Releases: shadesofdeath/Crisp
Release list
v0.8.0 — the overlay stops being a one-way door
The overlay stops being a one-way door
Seven things Crisp implied it could do and could not.
An action bar on the settled selection
Once a rectangle settles, a bar appears beside it: copy, save, edit, recognise
text, pin, upload. Hovering a button names it.
After capture answers "what should happen to every capture". There was no
way to answer "what about this one" — saving a single screenshot meant
opening Settings, ticking a box, capturing, then going back and unticking it.
Enter still does whatever your settings say; the bar is how you do something
different once.
Scrolling capture
Select a region and Crisp scrolls the window under it, capturing as it goes,
then joins the frames into one tall image. A long page or a chat log in one
piece instead of three screenshots aligned by hand.
It refuses rather than guesses. Any two images have a best-fitting offset,
including two completely unrelated ones; treating that as an answer would
silently produce a picture made of two unrelated strips. It stops at the end of
the page, at 30 frames, or the moment two frames cannot be matched.
Pinned images survive a restart
Pins lived in memory only — closing Crisp, or a Windows update, took them with
it, and nothing had been written anywhere. Position, zoom and opacity now go to
%LOCALAPPDATA%\Crisp\Pins beside plain PNGs, and come back at startup.
Killing the process from Task Manager still loses them; the save runs on a
clean exit.
Type a size into the overlay
Ctrl+C has always copied the selection's numbers. Ctrl+V now reads them
back: 1200x630, 1200 × 630, 1200, 630, or the exact text Ctrl+C writes.
"This has to be exactly 1200×630" used to mean dragging pixel by pixel while
watching the magnifier.
Delayed window and delayed monitor
Delay always meant region. The machinery could already delay any capture; only
the way to ask for it was missing. Delayed in the tray is now a submenu of
three, and -delayed-window / -delayed-monitor work on the command line.
The editor's select tool resizes shapes
It moved, deleted and restyled them — while drawing four corner handles that did
nothing, the same broken promise the overlay's handles used to make. One
proportional mapping covers arrows, rectangles and freehand alike: an arrow
keeps its direction, a curve keeps its shape.
Blur, mosaic and crop preview live
They drew a dashed outline, justified by "computing the real effect every
mouse-move would be slow". It was never measured and it was wrong — the blur is
a two-pass sliding window, linear in area, and the preview needs only the
selected region at screen scale.
The outline's real cost: blur is a redaction tool, and finding out it was not
enough after you let go means looking at the thing you were hiding one more
time. Crop now dims what will be discarded instead of outlining what will stay.
327 tests, 41 of them new. ActionBar, Stitch and PinStore live in
crisp_core, so the geometry, the frame matching and the index format are all
testable without opening a window.
Download: Crisp-0.8.0-setup-x64.exe to install, or
Crisp-0.8.0-portable-x64.zip to just run it. Windows 10/11 x64.
v0.7.1 — read the whole row
Fixed
The two longest rows in the upload service list were cut off at the edge. A combo box drops its list at the width of the box, and bashupload.app · 1 gün · ücretsiz and Freeimage.host · kalıcı · API key did not fit. Widening the box would have disturbed the column it sits in, so only the list widens, to the measured width of its longest entry.
The point of putting the lifetime and the price on every row was that they could be read.
Everything in v0.7.0 — six more upload services, the divider between free and key-requiring ones, and the installer — is included.
Download: Crisp-0.7.1-setup-x64.exe to install, or Crisp-0.7.1-portable-x64.zip to just run it. Windows 10/11 x64.
v0.7.0 — thirteen places to put a screenshot, and a way to install it
Thirteen places to put a screenshot, and a way to install it
Six more upload services
kappa.lol and pone.rs (permanent), qu.ax (30 days), x0.at (3 days and up by
size), temp.sh (3 days) and bashupload.app (24 hours). None of them wants an
account — that makes ten keyless services and three that take a key.
The list has a divider now. Thirteen entries where three behave differently
is a list you have to read twice. The keyless ones come first, longest-lived
first, then a rule, then the three that want a key. Every row also carries its
own lifetime and either "free" or the name of the key it wants — with the list
closed you only see the row you picked, and a divider you cannot see explains
nothing.
| No account | Link lives |
|---|---|
| Catbox, kappa.lol, pone.rs | permanent |
| 0x0.st, qu.ax | 30 days |
| Litterbox, x0.at, temp.sh | 3 days |
| bashupload.app | 24 hours |
| Uguu | 3 hours |
| Your own key | |
|---|---|
| Imgur | Client ID |
| ImgBB, Freeimage.host | API key |
Not all thirteen are equivalent and the README says which: qu.ax and temp.sh
return a page with the image on it rather than the image itself, and
bashupload serves its files as downloads.
Each service was verified by uploading through Crisp's own code rather than by
reading documentation — which is how the following was found.
Fixed
- bashupload was storing the multipart envelope as the file. It does not
parsemultipart/form-data; it takes the request body as the file. Every
upload came back with a working link whose file was the boundary lines, the
headers and the PNG saved as one blob, and nothing looked wrong until you
clicked it. It gets raw bytes overPUTnow — what its own documentation
always said — and returns byte-for-byte what was sent. - bashupload replies with an
http://address. It is upgraded tohttps://
before it reaches your clipboard; sending over TLS and handing back a
plaintext link would have been theatre. - Without an expiry header bashupload deletes the file after one download, so
the first person you send the link to gets the image and the second gets
nothing. Crisp asks for the longest window the server allows. - Link lifetimes read as
72 sa— hours, in Turkish, in all sixteen
languages. They read as days where days make sense, translated.
An installer
Crisp-0.7.0-setup-x64.exe, alongside the portable ZIP and carrying the same
executable. Start menu entry, optional desktop shortcut, optional start at
sign-in, a proper uninstaller, and fifteen languages.
- It asks for no administrator rights. Crisp writes only to
HKCUand
installs one file; with no elevation available it installs under your own
profile rather than demanding a UAC prompt for nothing. - Uninstalling leaves your settings alone. Shortcuts, save folder and API
key stay inHKCU, so reinstalling finds them. - It closes a running Crisp first. Restart Manager could not — it asks
windows to close, and a tray application's only window is hidden. An
uninstall while Crisp was running used to remove the shortcuts, leave the
executable behind, and report success.
The portable ZIP is still the first option and still writes nothing outside
HKCU — or nothing at all, with an empty Crisp.ini beside it.
Also
- The installer is built in CI too. A release artifact only one computer can
produce is a release artifact nobody can check. - 293 tests.
Download: Crisp-0.7.0-setup-x64.exe to install, or
Crisp-0.7.0-portable-x64.zip to just run it. Windows 10/11 x64.
v0.6.1 — say that it is still working
Say that it is still working
Some image hosts take fifteen to twenty seconds. For all of that time the screen
said nothing — the capture notification faded and then there was silence, so an
upload in progress and an upload forgotten looked exactly the same.
There is a notification while the upload runs. It does not fade; that is the
point of it. It counts the seconds, which is what separates a slow upload from a
stuck one, and the result notification takes its place when the link arrives. If
the result never comes it gives up after two minutes rather than sitting there
forever.
The capture notification stands down while an upload is pending — it runs first
and would otherwise destroy the progress box the moment it appeared.
Fixed
- The shutter-sound test asserted that the machine had a sound card.
PlaySoundreturns false with no output device, which says nothing about
whether the bytes are correct. The build server has no audio, so CI went red on
a commit that changed nothing about sound. The test skips where there is no
device and runs everywhere else.
Everything in v0.6.0
— the adjustable selection, the overlay hint that names every key, recent links
in the tray, localised upload errors — is included.
Download: Crisp-0.6.1-portable-x64.zip — one executable, statically linked,
nothing to install. Windows 10/11 x64.
v0.6.0 — the selection you can actually adjust
The selection you can actually adjust
Releasing the mouse used to capture immediately. The eight handles the overlay
drew had never done anything — the interface promised a rectangle you could
correct, and the code did not deliver one, so a selection missed by three pixels
meant starting the drag over.
The rectangle settles now. Drag a handle to resize it, drag inside it to
move it, press Enter or double-click inside to capture. Small selections shed
their handles rather than letting them overlap, and handles are grabbed over a
wider area than they are drawn — a seven-pixel square is not a mouse target.
Once a selection is settled, the monitor keys reshape it instead of capturing.
Enter stays the single commit.
Half the overlay's keys were invisible
Space, 1–9, 0 and Ctrl+C all worked and appeared nowhere but the
README. The hint is two lines now — mouse above, keyboard below — in all sixteen
languages, and it wraps rather than running off a narrow screen. A settled
selection gets its own second line.
The auto-upload notification never showed, and the link never reached the clipboard
Both were being done on the upload thread. A window created there gets no
message loop, so its fade-in timer never ran and it stayed fully transparent;
closing the previous notification failed silently because that window belonged
to another thread. What you saw was a notification that appeared out of nowhere
when the pointer crossed it — and a "link copied" message for a clipboard that
had not been written, since OpenClipboard wants a window owned by the calling
thread and was failing for the same reason.
The thread now waits on the network and nothing else, and posts its result back
to the window.
Recent links
Upload put a link on the clipboard and left it there; the next copy erased it.
The tray menu keeps the last ten now, and clicking one copies it again. Plain
tab-separated text in %LOCALAPPDATA%\Crisp\uploads.txt — a line you can delete
by hand, not a database.
Also
- Upload errors were Turkish in all sixteen languages. The sentences lived
incrisp_core, which cannot reach the localiser. The core reports a code now
and the app translates it. - Settings hints were a fixed three lines tall and the longer translations were
clipped. They are measured now. - Continuous integration. 269 tests existed and nothing ran them. A Windows
workflow builds, tests and packages on every push. 284 tests now.
Known limitations
- Alt+Tab away from the overlay still cancels a settled selection outright.
- The size label can cover the top or bottom handles. They stay grabbable — the
hit test reads the selection, not the painter.
Download: Crisp-0.6.0-portable-x64.zip — one executable, statically linked,
nothing to install. Windows 10/11 x64.
Crisp 0.5.0 — the shortcut you actually wanted
Three things a user reported. Two are fixed, the third turned into a feature.
Any key can be a shortcut
Shortcuts used to require Ctrl, Alt or Shift. The reasoning was sound — a
letter bound on its own is taken away from every text box on the system — but it
imposed that judgement on you, and it did so silently, in three places at once:
the shortcut box refused the key with a beep and wrote nothing, the settings
loader deleted modifier-less shortcuts on startup, and it deleted Win+letter
too. If you wanted one key for one screenshot, your choice was undone by the next
launch with no explanation.
The cost has not gone away, it moved to where you can read it. The hint under the
shortcut list now says which keys are taken from typing, in all sixteen
languages, and nothing is refused. Insert, Home, End, Page Up/Page Down, the arrows and the menu key joined the list of keys with nothing to lose —
on a keyboard without a numeric pad those are the spare keys left to bind.
Win+letter is left to RegisterHotKey, the only component that knows which of
those Windows has actually reserved, and which already reports what it cannot
register.
The overlay stays on one monitor
The selection overlay's hint box was centred on a rectangle named monitor that
actually held the virtual screen — every display joined together. On a single
monitor those are the same thing and the bug is invisible. On two, the horizontal
centre of the virtual screen is precisely the seam between the displays, so the
box was cut in half down the middle.
The magnifier had the same root cause with a quieter symptom: it flips to the
other side of the cursor when it runs out of room, and it was measuring that room
against the whole desktop — so near the right edge of the first monitor it decided
there was space and appeared on the second one, away from where you were looking.
Both now use the monitor the pointer is on. What the magnifier samples still comes
from the whole desktop, which is correct.
Upload a capture and get a link back
Seven services. Four need no account at all:
| Service | Link lives for |
|---|---|
| Catbox | permanently |
| Litterbox | 72 hours |
| Uguu | 3 hours |
| 0x0.st | 30–365 days by size |
Three take an API key you paste into Settings: Imgur, ImgBB and
Freeimage.host. The key box stays disabled until the service you picked needs
one, and each service's lifetime and key requirement is written beside its name —
so "why did my link die" and "why does this want a key" are answered in the list
rather than afterwards.
Two ways to trigger it, both off until you ask:
- the editor's Upload button, disabled while no service is chosen;
- Upload and copy the link under After capture, which sends every capture on
its own and puts the link on the clipboard.
Either way the notification arrives when the upload lands, not when the capture
was taken — a message saying "copied" ahead of a failed upload would have you
pasting a link you do not have.
This is the first network code Crisp has had, so the default matters more than the
feature. The setting ships as Do not upload, and with no service chosen the
program never opens a socket. That checkbox is last in the After capture list on
purpose: the eight above it keep the image on your machine, and it is the only one
that does not.
Everything is HTTPS and certificate validation is not relaxed anywhere. The API
key travels in the header for Imgur and in the body for ImgBB — never in a query
string, where it would survive in redirects and server logs. Both are pinned by
tests.
Also
- Settings hint boxes are measured rather than assumed to be three lines tall, so
no translation can clip them. - The settings window's columns were rebalanced to fit the new Upload group.
CMakeLists.txtsaid version 0.1.0 while the changelog had reached 0.4.0. They
agree now.
Build
Windows 10 or 11, x64. No runtime to install, no account, no telemetry.
cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release
cmake --build build
269 tests pass. MIT licensed.