• v0.6.0 f48326748d

    noorlab released this 2026-10-14 01:18:19 +08:00 | 0 commits to main since this release

    Added

    • Offline models are downloaded on demand from ModelScope instead of being put in place
      by hand: PaddleOCR (31 MB) when it is chosen or used without its files, and the Opus-MT
      English → Chinese / Chinese → English models (about 172 MB each) when a translation
      needs one, or both when Opus-MT is chosen in Preferences. NoorPaste asks first (size,
      source, licence), shows a progress dialog with Cancel, checks every file against a
      SHA-256 pinned in the program and keeps files that are already there. The local
      translation engine now always offers those directions.
    Downloads
  • v0.5.0 f48326748d

    noorlab released this 2026-10-10 06:50:46 +08:00 | 0 commits to main since this release

    Added

    • Canvas: Ctrl+C / Ctrl+X and the item menu's Copy / Cut work on the selected pictures
      and annotations. The clipboard gets a transparent picture of them alone (Output
      settings apply) and Ctrl+V pastes them back as editable items, each paste offset
      from the last; cutting is one undo step and does not ask. With nothing selected
      Ctrl+C still copies the whole canvas.
    • Preferences → Snip → Behavior, Gemini: the model box lists the key's text models
      (fetched from the API at most daily or when the key changes, cached in
      gemini_models.json in the data folder) and still takes any typed name; Get a key…
      shows how to create an API key; Test translates a word and tells how long Gemini
      took. The Gemini settings show only while Gemini is the translation engine. The
      default model is now gemini-3.1-flash-lite (3.5-flash-lite took 12–35 s to answer).
    • OCR and translation failures: the bar's status ends in a ? mark whose tooltip gives
      the technical reason (engine and model, HTTP status and Gemini's error code and
      message, or the HRESULT), also written to the log.
    • Pin toolbar: select button (left of the tools), as on the snip toolbar. While on, a
      click selects an annotation and a drag selects several; they move together and Delete
      removes them. A tool, a second click or hiding the toolbar gives the mouse back to the
      pin (dragging moves it again).
    • Recognize text (OCR) while snipping: O on the monitor under the cursor or on the
      selection or the snip toolbar's OCR button. Snip and recognize text / Snip and
      translate
      (hotkeys hotkeys.ocr / hotkeys.translate, unassigned by default, or tray
      actions) go straight from the chosen region to recognition (and translation of all
      text), without the toolbar. Two offline engines, switched in the bar or in
      Preferences → Snip → Behavior (snip.ocr_engine): Windows OCR (small text recognized
      again enlarged with high-quality resampling; 丨 / 」 inside Latin words read as
      l) and PaddleOCR (PP-OCRv6 small models in ocr_models/, run by the built-in
      Windows ML runtime on the CPU). Words are marked and selected like text (drag, double
      / triple click, Alt+drag box, Ctrl+A); the bar under the area switches the engine and
      the Windows OCR language (snip.ocr_language), joins lines into the paragraphs the
      layout shows (wider spacing, short last lines, indents and list items end one; line-end
      hyphens are joined back) and
      copies; Ctrl+C copies (with nothing selected: everything, also for Copy and Enter,
      shown as "Copied all"; "Nothing to copy" before there is text), Enter copies and
      quits, Esc / right click leaves. The mode's shortcuts show in the snip hint card (it
      makes way for the bar); the bar's status sits in its own tinted segment with a
      coloured dot, divided from the buttons.
    • OCR translation in place: T or the snip toolbar's Translate button (recognize and
      translate at once, also T while choosing a region for the monitor under the cursor),
      and in the OCR mode its bar's Translate button or T, translates the
      selection (or everything) block by block — columns found by a recursive XY-cut (a
      heading over columns too), paragraphs ending where the next line's first word would
      have fitted (text wrapped at any width, hanging indents and pieces of one line kept
      together; line numbers and other lines without letters left out and visible), the
      columns of a speech balloon together — and
      draws each translation over its covered text: speech balloons and buttons (a closed
      region of the text's background colour) are painted over and the translation centred
      in them, flat backgrounds filled, busy ones frosted (blurred and tinted); the font is
      the original's (estimated from character advances: CJK one em, others 0.55 em) with the
      original's line spacing, kept a quarter em inside the area, smaller when that does not
      fit, else the text wraps further down to the next translation or the area's edge (the
      bar then says some text is cut short). While recognizing or translating, the area is
      blurred under a spinner (re-translating keeps the last translation with the spinner).
      A bar (replacing the OCR bar) switches
      original / translation (hold Space too), engine, target and the panel (the translation
      as text, hanging under the bar), copies the text or the translated area as an image (Copy ▾),
      pins the translated area as an image (the panel: its text) and closes (Esc / right
      click). Engines: Opus-MT models in
      translate_models/<source>-<target>/ run by the built-in Windows ML runtime
      (SentencePiece tokenizer, cached greedy decoding), one block per line; and Gemini
      (online, snip.gemini_api_key, model snip.gemini_model, default
      gemini-3.1-flash-lite) with the blocks sent and answered as a JSON object keyed by
      number (enforced by a response schema). Gemini asks once before the first text goes to
      Google (snip.gemini_consent), retries an overloaded model once, gives up after 20 s
      and the panel explains overload, used-up quota and timeouts. The target and engine are
      remembered (snip.translate_target, snip.translate_engine).
    • The OCR and translation bars (with the panel) go where they cover the least recognized
      text — outside the area first, then inside its corners — and can be dragged by their
      grip (⠿) for the rest of the snip.
    • PaddleOCR reads vertical text (columns turned a quarter before reading), and its word
      boxes cover the glyphs (the detector only marks their core).

    Changed

    • The translation panel's text is 10 pt (was 11 pt).
    • Tray icon middle click is configurable (mouse.tray_middle_click); the tray actions
      also offer snip, translate and paste.
    • Defaults: the theme colour is the periwinkle #8080FF (the original's is the blue
      #2080F0), a tray click recognizes text and a middle click translates; settings you
      changed stay.

    Fixed

    • Snip toolbar tooltips no longer pop up over the hidden toolbar (Space).
    • In-place translation: the cover stays inside its region — trimmed where a text box
      reaches past a tab or cell, grown only up to borders and other shades — and the
      background is judged without the recognized text around it, so terminals and documents
      are filled flat rather than frosted; table cells and other text side by side more than
      a line height apart are no longer read as one line.
    • In-place translation keeps the layout: a closed region filling nearly all of its
      bounds (a table cell, a button, a panel) is a box, not a speech balloon, so its text is
      no longer centred; a paragraph keeps its left / centred / right alignment and a single
      line in a box its side of it; text with no word (icons read as letters) is left alone,
      and a translation equal to its source (a name, a path) keeps the original pixels.
    • In-place translation in tight table cells: a block's background is the most common
      colour inside its own box (not the rules around it), the cover is trimmed only by
      one-colour edge lines (never the text itself), horizontal rules (table lines) end
      paragraphs, and a single line may run on over the free background to its right.
    • Menus and lists are no longer merged into one paragraph: a Latin line of one or two
      words is an item of its own (unless it ends on a comma, hyphen or a word such as
      "and", "of", "the"); Gemini is told short paragraphs may be interface labels and words
      them as software does; a single line's free room to the right ignores neighbouring
      lines' boxes grazing its edges.
    Downloads
  • v0.4.0 f48326748d

    noorlab released this 2026-10-06 19:08:48 +08:00 | 0 commits to main since this release

    Added

    • Auto backup (Preferences → General, on by default) now does what the original's does:
      pins (open and recently closed, with groups, position, zoom, opacity, orientation,
      filters, thumbnail view and annotations) and the snip history (, / . records and R
      regions) are saved as they change and restored at the next start. Pins whose monitor
      is gone come back on the primary one.
    • Updates (Preferences → Update, like the original's page without the proxy group):
      checks the public release page start_delay seconds after start (60 by default) and
      every 24 hours, both switchable, optionally including betas, or on demand with Check
      for Updates
      . A newer version shows a notification; its dialog lists what is new and
      Update and Restart downloads the executable, verifies its SHA-256 against the
      published checksum, swaps it in (the old file is removed at the next start) and
      restarts. Settings and data stay untouched; pins and the snip history come back through
      auto backup.

    Changed

    • The storage folder became the data storage location in Preferences → General → Data
      (an existing canvas.storage_folder setting carries over). Besides the snip cache and
      canvas tabs it holds the pin and snip history backups. Changing it asks Yes (move) /
      No (leave the data; what is open is saved in the new place) / Cancel, says when the new
      place already holds data, checks that it is writable, moves in the background with a
      progress window and reports files that could not be moved.
    • Canvas dot grid reads like tldraw's: faint fine dots every grid step are shown from
      100 % zoom, with larger, darker round dots every fourth step (one major level at a time,
      so dots no longer stack darker where levels coincide).

    Fixed

    • Work handed back from background threads (or deferred) while a dialog opened from
      deferred work was showing waited until that dialog closed.

    Removed

    • config.toml.bak (what Auto backup used to write).
    Downloads
  • v0.3.0 f48326748d

    noorlab released this 2026-10-06 01:05:23 +08:00 | 0 commits to main since this release

    Added

    • Snip toolbar: send to canvas. The button puts the snip into the current canvas tab, its
      drop-down into the current or a new tab; the annotations stay editable on top of the
      picture (all selected, so they move together; one undo step). Snips with eraser
      strokes go flattened, since the eraser restores the screenshot the canvas does not
      have. The snip also joins the snip cache, auto-save and history.
    • Snip toolbar: select button (left of the tools). While on, a click selects an
      annotation and a drag selects several (Ctrl/Shift add); they move together, Delete
      removes them and Ctrl+A selects all. The region's edges and anchors still resize it;
      a tool or a second click on the button gives the mouse back to the region.

    Changed

    • Snip: Esc and the close button ask before quitting when the selection has annotations,
      and so does a right click (select again), which used to drop them silently. Ask
      for confirmation on Esc
      now also asks without annotations. No is the default button.
    • Canvas title bar (Windows 11) takes the tab row's colour and text colour in every frame
      colour mode, with a matching window border; the title text fades while the canvas is
      inactive.
    Downloads
  • v0.2.0 f48326748d

    noorlab released this 2026-10-06 01:05:05 +08:00 | 0 commits to main since this release

    Added

    • Annotation palette themes: Classic (the original's), Morandi, Macaron, High contrast
      and a user-editable Custom palette. Switch them from the drop-down next to the palette
      in the tool sub panel, or in Preferences → Interface → Annotation.
    • Step-number annotation tool: each click places the next number as a circle or a
      label (customisable text with {n}), optionally with a dragged leader arrow. Start
      number in the sub panel; automatic renumbering or kept numbers in Preferences.
    • Callout annotation tool: a text box filled with the chosen colour (text in black or
      white for contrast). Click places the box; dragging from the press pulls a pointer to
      the release point, either a leader arrow or a speech-bubble tail. Square or rounded
      corners, bold / italic, font and size in the sub panel; double-click edits the text,
      the tip has its own handle. Saved canvas tabs keep callouts.
    • Canvas (Alt+F1, tray menu): collect pictures from the clipboard (Ctrl+V) or from the
      scrollable snip cache strip, move/resize them (no tool) or annotate over them (any
      tool), zoom a picture with Alt+wheel, change its stacking order from its right-click
      menu, and copy, save or pin everything on the tab (content bounds plus a margin).
      Endless canvas: wheel / Shift+wheel / tilt wheel scroll, Ctrl+wheel zooms at the
      cursor, middle-button or Space drag pans, Ctrl+0 resets to 100 %, Ctrl+1 fits all; the
      zoom shows at the bottom-left; each tab keeps its view. Browser-like tabs (Ctrl+T / Ctrl+W /
      Ctrl+Tab; rename by double-click, F2 or the tab's right-click menu, which also closes
      the tab or the other tabs; confirmation before closing tabs with content).
      Per-tab background with curated presets, the three most recent ones on the toolbar,
      transparent and custom colours; picture-shadow, always-on-top and clear buttons. Snips
      copied to the clipboard are kept in the snip cache (count and size limits in
      Preferences → Canvas). The strip header deletes single snips (trash can, then
      × on each thumbnail) or clears the cache (broom, after a confirmation); deleted snips go
      to the Recycle Bin.
    • Canvas tabs, their content and the window placement are saved and reopened after a
      restart (switchable in Preferences → Canvas). The snip cache and the saved
      tabs share one storage folder (snip_cache/ and canvas/ inside), chosen with
      Browse…, which offers to move the current data to the new folder.
    • Canvas mosaic/blur samples everything beneath it (pictures, earlier annotations) like
      frosted glass that stays in place; copies, saves and pins show it, the saved tab keeps
      the original pictures. Snips and pins keep sampling the screenshot, like the original.
    • Canvas zoom bar at the bottom-left: − / + in fixed steps (10 %–800 %), the zoom, 1:1
      and show everything (clicking the percentage no longer resets the zoom).
    • Canvas shortcut help: hovering the ? button at the right of the toolbar row shows the
      canvas's mouse and keyboard shortcuts in the snip overlay's hint panel style.
    • Canvas annotations change stacking order like pictures: right-click any item (without
      switching tools) for front / forward / backward / back / delete; Ctrl+] / Ctrl+[ (with
      Shift: front / back) for the selected item.
    • Canvas Ctrl+V turns text, HTML and non-image files' paths into pictures like a pin
      paste (Preferences → Paste → Conversion).
    • Canvas toolbar in one row: the tool options float over the canvas with a soft shadow;
      a Select (arrow) button leaves the tool.
    • Canvas multiple selection: drag on empty canvas to select every item the box touches,
      Ctrl+click to add or remove one, Ctrl+drag for a box over items, Ctrl+A for all. The
      selection moves together, arranges keeping its order, and Delete asks before removing
      several items.
    • Canvas full screen (F11 or the toolbar button): covers the monitor without the tab row;
      Esc leaves the tool or selection, then full screen, then hides the canvas. Not restored
      after a restart.
    • Canvas clipboard watching (clipboard button on the snip cache strip, or Preferences →
      Canvas; off by default): images other programs copy join the snip cache.
      NoorPaste's own copies, a repeat of the last cached image and content its owner marks
      as excluded from clipboard monitors / history are skipped.
    • Canvas select mode: clicking an annotation selects it without switching tools, and the
      floating panel edits its colour, width or font; Shift works like Ctrl for adding to
      the selection.
    • Snip cache hover preview: hovering a thumbnail shows the snip in a fixed card left of
      the strip (700 DIP wide, 16:9 picture area, size and time underneath; the picture fits
      inside, never enlarged), decoded on a worker; the thumbnail stands in meanwhile. It hides
      as soon as the pointer leaves the strip. The card fades in (80 ms) and out, and
      pictures cross-fade (120 ms) when moving between thumbnails or when the sharp image
      replaces the thumbnail; with Windows' animation effects off, changes are immediate.
    • Canvas frame colour (Preferences → Canvas → Appearance): Auto (default; light or dark by
      the tab background, in the background's hue: each frame colour keeps its lightness and
      takes the background's hue and saturation, capped at 35 %), Light or Dark, for the tab
      row, toolbar and strip (and a dark or light title bar). Snip and pin toolbars keep the
      original light look.
    • Preferences: the canvas settings have their own top-level tab (Appearance, Snip cache,
      Tabs) instead of Output → Canvas.
    • Canvas right-button drag pans (a right click that does not move still opens the menu),
      alongside the middle button (which some mouse utilities such as Logi Options+ take).
    • Canvas backgrounds Lavender mist (#ECE8F2) and Dusk violet (#2C2836).
    • Tray icon click actions (Preferences → Control → Mouse): click and double click each run
      snip, show/hide canvas, show/hide pins or nothing; defaults snip / canvas. With a
      double-click action, a click waits for the system's double-click time.
    • Freehand smoothing (pencil, marker, brush mosaic and eraser): a pulled-string
      stabilizer while drawing, then simplification and a corner-cut curve on release; the
      sub-panel button cycles off / low / medium / high (default low; Shift-straight strokes
      are left alone).
    • Canvas snapping (magnet button, on by default): moving and resizing snap to other items'
      edges and centres (geometry, not stroke paint) with pink guides; Alt suspends it.
    • Canvas dot grid (grid button): tldraw-style levels that fade in with the zoom, dark or
      light dots by background, never exported; with the grid on, moves and resizes snap to
      its 10 px step.

    Changed

    • Shortcut hint panels (snip overlay, canvas help) have a new look: dark rounded card
      with a soft shadow, filled key caps joined by "+", 9 pt text; the canvas help is
      grouped (View, Select & edit, Clipboard & output, Tabs & window) in two columns.
    • The snip cache is written on a worker thread (under a temporary name, then renamed),
      so copying a large snip no longer stalls the UI.
    • Tray icon: a double click now shows / hides the canvas by default, so a single click
      snips after the double-click time (set the double click to None for instant snips).

    Fixed

    • Preferences: the frame line of the Paste → Conversion and Output → File groups no longer
      runs through their caption check boxes (Text to image, Auto Save).
    • Folder pickers open even when the start folder is written with forward slashes.
    • Text annotations can be moved: drag an existing text (a click still edits it), or drag
      the frame of the text being edited. Applies to snips, pins and the canvas.
    Downloads