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