Repository navigation
Releases: mxggle/phrase-lens
Release list
PhraseLens v0.10.0
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
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
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
Fixed
- download the latest macOS installer directly from English and Chinese download buttons.
PhraseLens v0.7.1
Changed
- automate PhraseLens releases.
PhraseLens 0.7.0
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
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
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
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.
screencapturehands
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
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