Skip to content

Releases: mxggle/phrase-lens

PhraseLens v0.10.0

Choose a tag to compare

@mxggle mxggle released this 09 Oct 01:34

Added

  • Named AI connections with independent credentials, multiple accounts per provider,
    explicit global defaults, and per-action connection and model routes.
  • Preserve result routing and prompt context for follow-ups and restored history;
    reject removed or changed connections without silently switching providers.
  • Migrate saved provider configurations and action model choices while retaining
    legacy data, and isolate model catalogs by connection and credential identity.
  • Split word lookup out of Translate into a new built-in Definition action:
    an offline Dictionary tab plus an AI Definition tab with senses and examples.
  • Per-action result buttons: alongside Copy, an action can offer Replace
    (write the answer over the selection) and Insert (write it after the
    selection), and choose which one is the highlighted primary button.
    Translate offers all three; Polish puts Replace first. The writing buttons
    appear only when the text was selected in an editable field in another app.

Changed

  • Translate now returns only the translation, single words included — no
    dictionary entry, examples, or source-word reading.
  • Fold the result pane's Dictionary/AI switch, language, and commands into one
    header row, and move follow-up suggestions to the end of the answer so the
    composer is a single row.
  • Give AI results more reading room: section spacing, looser line height,
    bold-line labels such as Examples rendered as section headings, and an
    example's translation kept under its example in a quieter tone.

Fixed

  • Post ⌘C for selection capture with the key the current keyboard layout
    assigns to C, instead of the ANSI position, which was ⌘J on Dvorak.
  • Silently skip the writing shortcut when no editable input is focused or the
    field is empty. Check editability before requesting a translation.
  • Make the main-window global shortcut hide the focused window when pressed
    again, while still raising a visible window that is behind another app.

Added

  • add AI connections, Definition action, and result buttons.

PhraseLens v0.9.0

Choose a tag to compare

@mxggle mxggle released this 27 Sep 00:32

Added

  • Check for updates from the app menu or Settings → About. Automatic checks and
    background download/install are separate opt-in preferences.
  • Authenticate both update feeds and archives with Ed25519 signatures; verify
    release artifacts before publishing a complete GitHub release.
  • Existing users must manually install this first updater-enabled release.
    Initial installation still requires macOS approval for an unnotarized app.

Added

  • add signed automatic app updates.

PhraseLens v0.8.0

Choose a tag to compare

@mxggle mxggle released this 26 Sep 23:51

Added

  • Filter translation history to favorites and access open, copy, favorite, and
    delete commands directly on history rows. Vocabulary cards now offer speak,
    copy, and delete commands on hover or selection.

Changed

  • Keep action names visible in the translator toolbar and move overflow actions
    into a More menu while keeping the selected action visible.
  • Place Translate / Look Up and transient status beside the source text, and
    combine dictionary result navigation and copy into a single header.
  • Move the persistent Getting Started entry into Settings while preserving the
    automatic guide on a fresh installation.
  • Simplify library toolbars, group export and history clearing under More, and
    avoid duplicate vocabulary organization buttons.

Fixed

  • Show readable history previews without raw Markdown formatting.
  • Open shortcut settings directly from the shortcut conflict warning.
  • Use self-hiding overlay scrollbars in text editors to avoid empty scrollbar tracks.

Added

  • improve translator and library workflows.

PhraseLens v0.7.2

Choose a tag to compare

@mxggle mxggle released this 26 Sep 15:22

Fixed

  • download the latest macOS installer directly from English and Chinese download buttons.

PhraseLens v0.7.1

Choose a tag to compare

@mxggle mxggle released this 24 Sep 12:14

Changed

  • automate PhraseLens releases.

PhraseLens 0.7.0

Choose a tag to compare

@mxggle mxggle released this 24 Sep 02:40
b000325

PhraseLens 0.7.0

Added

  • Offline Japanese-English and English-Japanese dictionary lookup with readings, inflected forms, attributed sources and licenses, copy support, and saving to Vocabulary.
  • A five-step guided setup for provider, model, shortcuts, permissions, and a sample translation.
  • English and Simplified Chinese localization across the app and landing page, including an in-app language preference.
  • Usage explanations and spoken selected words, translations, Japanese readings, and Chinese pinyin.

Fixed

  • Selection capture from the menu bar and Option-F when PhraseLens is the active accessory app.
  • Streaming long answers no longer stop following newly added text unexpectedly.
  • Text in the pop-up results can be selected without moving the window.

Downloads

  • PhraseLens.dmg — universal macOS app for Apple Silicon and Intel.
  • PhraseLens.zip — universal macOS app archive.
  • SHA256SUMS.txt — SHA-256 checksums for both downloads.

The app is Developer ID signed and verified. Apple notarization was skipped because this release environment has no notarization credentials; Gatekeeper may ask you to confirm the first launch of a downloaded copy.

See the full CHANGELOG.md.

PhraseLens v0.6.0 — A vocabulary that sorts itself

Choose a tag to compare

@mxggle mxggle released this 22 Aug 14:32

Added

  • Saved words are filed for you, and the collection can be cut apart. A vocabulary
    list past a screenful was a wall: a headword, a fixed expression and a whole sentence
    kept for its shape tiled together with nothing to tell them apart, and the only way
    back to one of them was remembering how it was spelled. Every word is now filed along
    five dimensions as it is saved — what kind of thing it is, its part of speech, the
    subject it belongs to, its register, and how hard it is, with the native rung ("N2",
    "B1") kept alongside for the languages that have one. Four of the five are closed
    sets, which is what lets the filter rail draw stable rows; topic is open, because what
    a reader's material is about is decided by the material, and a request offers the
    topics already in use back to the model so a collection converges on a handful of
    buckets instead of coining a synonym every twenty words.
  • A filter rail with counts that stay honest. Rows inside a dimension widen the
    result; rows across dimensions narrow it. Each dimension's counts are taken with its
    own choices lifted, so arming Word leaves Phrase and Sentence standing with
    their real totals rather than collapsing every sibling to zero — no click lands
    somewhere empty. The rail folds into a pull-down on a narrow window.
  • Grouping. Break the collection into pinned sections by any of the same dimensions,
    or by the month you collected it. Closed dimensions keep their declared order rather
    than sorting by size, and a word filed under two topics is browsable under both.
  • Organize. Words collected before this existed are picked up by one pass, twenty per
    request through the provider you already configured, saving each batch as it lands so
    a cancelled or dropped run keeps everything it finished.

Every tag is optional at every layer. Words saved before this existed decode untouched,
a model that cannot judge a dimension is told to leave it out rather than guess, and
anything unfiled stays reachable through a Not tagged row instead of dropping out of
the collection. Tags are read on every launch from the file that holds the words
themselves, so an unrecognized value costs that value and not the collection.

Fixed

  • The answer comes back in the language you picked, even when the source is a wall of
    another one.
    Summarize, Analyze and Explain in Context all ended their command
    prompt with the material itself, and a model that reads several hundred words of
    Japanese last answers in Japanese. Each now closes on the line naming the target
    language, and the shared answer-language rule states outright that the material never
    overrides it. Words, examples and quotes stay in the source language; everything
    written about them is in yours.

The app is signed but not notarized, so the first launch after downloading needs a right-click → Open.

Full changelog: v0.5.3...v0.6.0

PhraseLens v0.5.3 — No more stall after a capture

Choose a tag to compare

@mxggle mxggle released this 22 Aug 08:48

Fixed

  • The beachball after a screenshot capture is gone. A crop holding no text raised
    the error alert, and that alert arrived while the main window was still coming back
    from being hidden for the capture — so its backing surfaces were allocated and
    synchronised against a render server that was already rebuilding the window behind
    it, and the main thread sat there. Sampling a capture over a blank region put 929 ms
    on the main thread, 668 ms of it inside a Core Animation commit; the same capture
    over text cost 138 ms, because that path raises no alert. An empty crop is an outcome
    rather than a failure, so it now takes the route an empty selection already takes — a
    line in the status bar — and the same capture costs 103 ms.

The app is signed but not notarized, so the first launch after downloading needs a right-click → Open.

Full changelog: v0.5.2...v0.5.3

PhraseLens v0.5.2 — OCR that reads Chinese and Japanese

Choose a tag to compare

@mxggle mxggle released this 22 Aug 08:34

Fixed

  • Screenshot OCR reads Chinese and Japanese again. The recognizer was handed a
    fixed language list with English at its head. Vision does not try those languages in
    turn — it picks one model from the head of the list — so a Latin language in first
    place meant CJK text was dropped outright: a screenshot of Chinese or Japanese came
    back empty as "no text was found", and one that mixed scripts kept the English and
    turned the rest into glyph soup. The script is now detected from the screenshot
    itself, and a shot carrying Japanese, both Chinese scripts and English at once reads
    correctly.
  • A capture could be read before it had finished being written. screencapture hands
    the interactive selection to a helper and can exit before that helper has flushed the
    PNG, so the single check for the finished file sometimes ran first and the capture was
    reported as cancelled. It now waits for the file to settle.
  • A click that never became a drag no longer raises an error. The empty capture it
    writes used to travel all the way to a failed recognition; it is treated as a
    cancelled selection now, the same as pressing Escape.

The app is signed but not notarized, so the first launch after downloading needs a right-click → Open.

Full changelog: v0.5.1...v0.5.2

PhraseLens v0.5.1 — An editable source box

Choose a tag to compare

@mxggle mxggle released this 22 Aug 06:21

Changed

  • The source box is always editable. Text captured from another app used to
    arrive read-only, and editing it meant reaching for a pencil button in the pane's
    footer first. The box is now a plain editor whatever the text came from: a click
    puts the caret where it lands, and looking one word up and typing the next no
    longer costs a trip to the footer.
  • The translator's controls moved into the chrome they belong to. The strip that
    held the action tabs and both language pickers above the split is gone. The tabs
    sit beside the section title in the top bar, each language picker sits in the
    header of the pane it describes with the swap button between them, and Collect and
    Copy sit in the result header — leaving the foot of that pane to the follow-up
    question alone.

Fixed

  • Editing captured text now drops the sentence that was captured around it. A word
    typed over a selection was still translated against the surrounding sentence of the
    previous selection.
  • The language and action pickers draw their own fill, border, and trailing chevron.
    The menu style they used handed the label to an AppKit cell that kept the text and
    discarded the rest, then drew the indicator on the wrong edge.

The app is signed but not notarized, so the first launch after downloading needs a right-click → Open.

Full changelog: v0.5.0...v0.5.1