Releases: writingdeveloper/Notro
Release list
v2.10.3
Fixed
- Discord CDN and media-proxy emoji/sticker links now work across PNG, GIF, WebP, JPEG, and AVIF variants while preserving the usable rendition URL.
- Link validation now accepts valid mixed-case emoji/sticker paths while rejecting lookalike Unicode hosts and non-ASCII asset IDs.
- Unsupported Lottie stickers now return a consistent, clear error.
Verification
- Installer SHA-256:
968aa01ca4d51b50edda636dadbed68a4096de90034ab5a77a2a38805beab3b7
Full Changelog: v2.10.2...v2.10.3
v2.10.2
Fixes found while QA-ing the picker window and auto-send that shipped in 2.10.0/2.10.1.
The settings dialog was unusable in a small window
Adding the auto-send toggle and the paste-size section made the settings dialog taller than the picker window itself. It had no maximum height and no scrolling, so it overflowed off the top and bottom — the first setting was clipped and the "add folder" and "close" buttons were simply unreachable.
The dialog now caps at the window height, scrolls inside it, and keeps its button row pinned to the bottom at any size.
Resizing the picker
- It can no longer be dragged smaller than its layout supports. Handing resizing to the OS also removed any floor, so the window could be shrunk until the collection rail and the tabs overlapped. There is now a real 360×300 minimum that Windows enforces while you drag.
- A window you enlarged stays enlarged. The remembered size was capped at 1100×900, so on a large monitor the picker came back smaller than you left it. The size you choose is now kept and only fitted to the monitor it opens on, so a smaller screen never gets an off-screen window and returning to the big one restores your size.
Auto-send timing is adjustable
How long Discord needs to attach an image before Enter is safe depends on the machine and the file size, so the 0.45 s default is only a default. Set auto_send_delay_ms (DWORD) under HKCU\Software\Notro to change it — it is read on every paste, so a new value applies without restarting, and out-of-range values fall back to the default instead of firing Enter instantly.
NotroSetup.exe.sha256 below. See SECURITY.md.
Full Changelog: v2.10.1...v2.10.2
v2.10.1
Pre-launch hardening. Everything here came out of a review done before promoting the project, while it still had essentially no users.
Auto-update was silently broken for non-ASCII account names
If your Windows account name isn't plain ASCII — C:\Users\홍길동\…, and likewise for Japanese or Chinese names — auto-update did nothing and took the app with it. The update downloaded, its SHA-256 verified, you clicked "restart to update", the app exited… and never came back. No error, no installer.
The helper batch was written as UTF-8, but cmd.exe reads batch files in the OEM code page, so the installer path inside it came out as mojibake and the batch failed to execute a single line. It's now written in the code page cmd actually reads, and if a path can't be encoded at all, Notro launches the installer directly instead.
Reproduced on a Hangul path and verified end to end after the fix.
If you're on 2.10.0 or earlier and your account name has non-English characters, the in-app update will not work. Download
NotroSetup.exebelow and run it once — from then on updates work normally.
Also
NotroSetup.exenow carries version information instead of showing a blank properties dialog.- Builds no longer depend on what's installed on the machine doing the build.
--collect-all webviewhad been collecting numpy and cryptography from a development machine — 37 MB the app never imports. Published installers were never affected (CI installs only the declared requirements), but a locally built release would have been.
New documentation
- SECURITY.md — what Notro reads and stores, the complete list of the four network endpoints it contacts, where every file lives, and how to verify an unsigned download. Short version: nothing you copy is ever transmitted, there is no telemetry, and clipboard images are only saved if you turn that on.
- THIRD-PARTY-NOTICES.md — bundled components and their licenses.
- CODE_SIGNING.md — how releases are built and what will govern signing.
NotroSetup.exe.sha256 below.
Full Changelog: v2.10.0...v2.10.1
v2.10.0
Two releases in one: v2.9.0 was never published, so everything from it is included here.
Emoji finally come out the same size
Discord draws an image attachment at its native pixel size, so a library holding a 20×20 GIF next to a 1080×1078 PNG pasted one as a speck and the other as a full picture — nothing like a real custom emoji, which is always the same size.
Notro now normalizes the longest edge just before pasting: 48 px for emoji (the size of a jumbo custom emoji), 160 px for stickers, original size for GIFs. Configurable per tab in picker settings (⚙), "Original" included. Animated GIFs keep every frame and their timing, resized copies are cached so re-pasting doesn't re-encode, and your library files are never modified — only the copy that goes on the clipboard.
Picker
- Korean initial-consonant search — typing
ㅁㅋfinds미쿠. Plain queries behave exactly as before. - Keyboard navigation — arrow keys move through the grid, Enter pastes the highlighted item. No mouse needed after the hotkey.
- Register an emoji from its message text — paste
<:name:id>or<a:name:id>, not just a "Copy Link" URL. The emoji's own name becomes the item name. - Rename items and edit keywords from the right-click menu.
- Duplicate registrations are refused instead of piling up — per tab and collection, so keeping the same picture in two places still works.
- The picker window can be resized and remembers its size.
- Optional auto-send after pasting (off by default).
Video
- Trim a clip and drop its audio before compressing. The confirm window takes a
start – endrange (mm:ss) and a Drop audio checkbox, and the estimate updates as you type. The same 10 MB budget spent on a shorter clip buys a much better picture: a 30-second 1080p60 capture that falls back to 1080p30 for the whole clip stays at 1080p60 when trimmed to seven seconds.
Fixed
- Files whose extension lies about their format are stored correctly — a
.gifholding a still PNG used to claim it was animated and was served with the wrong MIME type. - The temp folder is cleaned up again.
cleanup_temp()wrapped its whole loop in onetry, so the updater'supdatedirectory aborted the sweep and left every later file in place forever.
Full Changelog: v2.8.0...v2.10.0
v2.8.0
Added
- Folders you create under
%APPDATA%\Notro\assetsare picked up automatically. Drop a
folder of images in there and it shows up as a collection in the picker with no registration
step; a file dropped into an existing collection folder appears alongside its registered
items without duplicating them. Animated files land in the GIF tab, still images in the
Emoji tab. - Pick the destination collection when adding. The add-by-URL dialog now has a collection
dropdown listing every existing collection, plus a "New collection…" entry for naming a new
one. It defaults to the collection you are viewing. Dropped files and
Ctrl+V registrations follow the selected collection too, instead of
always landing in the uncategorized bucket.
Changed
- Items added by URL now go to the tab you are viewing, matching how dropped files already
behaved. Previously an animated emoji added from the GIFs tab silently landed in Emoji. - The picker's native dropdowns and scrollbars now render in dark mode.
Fixed
- Animated emoji added by URL no longer freeze. Discord's CDN serves only the first frame
for a query-less.webp/.png, so Notro now prefers the animated.gifvariant and falls
back to the requested extension for still assets. - Animated WebP files are converted to GIF on registration, the same as APNG. Emoji saved
from Discord are usually WebP, which some clients render as a still image when re-uploaded. - Watched-folder items now detect animated WebP and APNG instead of assuming only
.gifmoves.
Full Changelog: v2.7.0...v2.8.0