Skip to content

Releases: raffaelemancuso/prosediff

prosediff 0.7.0

Choose a tag to compare

@raffaelemancuso raffaelemancuso released this 01 Oct 12:54

Review one file alone

  • --review FILE --assess AI, and the window's One file tab: no comparison. The AI reads the file whole and gives a verdict (Good, Fair or Poor), a summary, the strengths and the problems to fix, each marked in the text. prosediff-gui FILE fills in the One file tab too.

The AI's work back in Word and LibreOffice

  • When the AI marks problems in a Word document or an OpenDocument text, the report offers two documents to download, from the top bar or the assessment's drawer:
    • the tracked changes with the AI's comments: each change since the old version tracked, a comment of the AI's on each problem;
    • the new version with the AI's fixes: each fix a tracked change of its own, to accept or reject, what was wrong a comment on it.
  • The fixes sit on top of the co-authors' own tracked changes and comments, which are kept as they are; rejected, a fix gives the co-author's words back.
  • Review mode has a box beside each problem: unticked, it is left out of both documents.
  • A fix replaces whole words, keeps the document's formatting, curly quotes and dashes, and becomes a comment where its place could only be guessed (an equation, a field, a note reference). A problem in a footnote has its comment on the note's number, as Word allows no comment inside a note.
  • --no-assess-documents (the window's "Documents to download") leaves them out.

The window

  • The Markdown filter, the AI's timeout and the hidden lines are now in the window too, and it refuses the values the command line refuses.
  • Compare by greys out a split the chosen output cannot hold.
  • Number boxes are plain spin boxes; a value that is not a number is refused, not replaced by the default.
  • Model and effort wait, greyed out, for the AI's list of models.

Fixes

  • OpenDocument: a comment in a table cell, and tracked changes within a link, are read correctly.
  • Options after the file names work on Python 3.11 (prosediff --review FILE --assess claude OTHER now says why it is refused).
  • Cancelling a comparison in the window no longer leaves its polling running into the next one.

Documentation

  • A landing page, a shorter README, and the details in docs/ (command line, window, report, AI assessment, how it works, moved text).
  • CITATION.cff for "Cite this repository".

Python API

  • Options.move_settings() is gone: take Options.paragraph_moves or Options.sentence_moves and call .resolved(by_sentence) on it.

prosediff 0.6.0

Choose a tag to compare

@raffaelemancuso raffaelemancuso released this 29 Sep 13:44

Breaking changes

  • --docx-changes takes accept-all, reject-all or show (was accept, reject, all). A window setting saved with an old value falls back to accept all.

An AI assesses the changes

  • --assess AI: Claude Code (claude), ChatGPT through Codex (codex), a local model of Ollama (ollama/qwen3), or any provider any-llm reaches (openai/…, anthropic/…, gemini/…). Its verdict (improves, mixed, worsens), what changed, the improvements and the problems to fix open from the report's top bar.
  • The problems are marked in the text (--assess-annotate, on by default): a numbered badge before each passage and a card in the margin with what is wrong and the change proposed.
  • --assess-ai-writing: a second assessment of whether the new text reads as written by an AI (likely, possibly, unlikely), given as an indication, not a proof.
  • --assess-effort, --assess-context (the changes and the new version, or the changes only), --assess-instructions (your own, typed or from a file), --assess-save-prompt, --assess-timeout, --list-models AI and --login-codex.
  • In the window, Preview before sending (on by default) writes the report first and asks, in the window, before any text goes to the AI.

Tracked changes, even when Track Changes was off

  • --format docx and --format odt compare two Word documents (or two OpenDocument texts) and write a copy of the new one with every change since the old one marked as a tracked change, to accept or reject in Word or LibreOffice Writer. Neither file needs tracked changes of its own: a version edited with Track Changes off gets them back.
  • Everything the new file holds is kept: styles, page setup, sections, headers and footers, tables, images, fields, footnotes and comments.

Moved passages

  • --move-passages (on by default) follows passages moved within a paragraph or between two, shown as moved, not as a deletion and an unrelated insertion; --passage-* sets how they are told from chance likeness.

The HTML report, redesigned

  • A top bar with the verdicts, the navigation between changes, comments and problems, and the view menu.
  • A margin of cards beside the text: one for each comment added or removed and each problem the AI marked, level with its paragraph. Clicking a card or its mark pins it, highlighting the text it is anchored to.
  • Review mode (r): the changes, comments and problems one by one, with j and k.
  • Resizable columns: drag the line between the two versions, or the margin's edge; Margin (g) hides the margin.
  • Comments keep their formatting; a removed comment is a red balloon holding a −, an added one a green balloon holding a +.
  • A long card shows its first lines, Show all sliding the rest open when the text runs past them.

The window

  • One Comparison card; how the report shows the changes, moved passages and the text encoding in a window of their own, opened by the Advanced settings button.
  • The tracked formats are greyed out when the two files cannot give them.
  • The AIs are looked up in the background; a saved AI or model no longer offered is reported.

Fixes

  • A comment on a whole paragraph no longer makes the next paragraph look commented.
  • OpenDocument: deleted paragraphs and tracked table rows are read right.
  • A comment dated without a time keeps its date.
uv tool install prosediff    # or: uv tool upgrade prosediff

prosediff 0.5.0

Choose a tag to compare

@raffaelemancuso raffaelemancuso released this 29 Sep 13:18

Breaking changes

  • --by-sentence is now --split sentence.
  • --fold-comments is now --comments markers, one choice of how comments are shown in every format.

Three output formats

  • --format html|diff|wdiff: besides the HTML report, a unified diff (.diff) or a word diff (.wdiff, as git diff --word-diff writes it), all made from the same pairing of lines as the report. Formatting is written in Markdown, comments and tracked changes in CriticMarkup. The format follows the output file's extension.

Comparing prose

  • --split paragraph|sentence|both: both writes one HTML report holding the comparison paragraph by paragraph and sentence by sentence, the toolbar (s) switching between them.
  • --comments markers|text|none: comments set apart as markers, compared as text, or left out.
  • Moved paragraphs and sentences, each with its own settings: --move-similarity and --move-algorithm for paragraphs, --sentence-move-similarity and --sentence-move-algorithm for sentences (tokens, chars, levenshtein, token-sort, token-set). The defaults, token-sort at 0.7 and at 0.55, come from a sensitivity analysis on simulated revisions of five Project Gutenberg books.
  • A sentence moved into another paragraph is shown as moved, no longer as a rewrite of the unrelated sentence it lands next to.
  • Word formatting is read through the style cascade: text bold through its paragraph style is no longer a formatting change against the same text made bold by hand.

The HTML report

  • It opens with the counts of paragraphs (sentences, lines) changed, inserted, deleted and moved.
  • A moved line's number says, on hover, where it went or came from, and a line joins the two places of each move (l hides them); hovering either end lights up both.

The window

  • Redesigned: a segmented button for Git repository, Files and Folders, options in two cards with tooltips, switches, icon buttons, a progress bar and a notification when done.
  • "Compare by" paragraphs, sentences or both, and a threshold and an algorithm for moved paragraphs and for moved sentences.
  • Options are saved only when asked (Save options); Reset to defaults puts them back.
uv tool install prosediff    # or: uv tool upgrade prosediff

prosediff 0.4.0

Choose a tag to compare

@raffaelemancuso raffaelemancuso released this 26 Sep 08:47

Breaking changes

  • Say what to compare with exactly one of --git REPO BASE [TARGET], --files OLD NEW or --folders OLD NEW: prosediff . HEAD~1 HEAD is now prosediff --git . HEAD~1 HEAD.
  • --language auto is now --language guess.
  • Run prosediff --setup-git again in repositories set up before: git difftool -d then passes --folders, which the old command did not.

Word and OpenDocument files read directly

  • Documents are read into paragraphs of styled text, no longer converted to Markdown: each paragraph is compared as its text, with the formatting of each character, its language and its kind beside it. Asterisks or brackets typed in a document are just text; headings and table rows are never split into sentences.
  • Underline, strikethrough, superscript and subscript are read and shown.
  • Formatting changes: text whose words are the same but whose formatting changed (made bold or italic, underlined, struck through, a link, a heading) is marked in amber, what changed shown on hover (made "claim" bold), and counted in each file's header. On by default; the toolbar's new switch (m) hides them.
  • Each paragraph's language: the default --language reads the language Word and OpenDocument mark each paragraph with; a German quotation in an Italian paper is hyphenated and split as German. document uses only the marked languages. A flag shows the language: one in the file header, or one before each paragraph when they differ, with a tooltip that says how it was found. The flags are embedded SVGs, so they show on Windows too.
  • Markdown is only written for git's own commands (--to-markdown, git diff), in pandoc's syntax, formatting included.

Folders

  • --include PATTERNS: the files of two folders compared, glob patterns separated by | (default *.docx|*.odt|*.md|*.typ|*.txt; "" for every file). Lock files of open documents are always left out.
  • The page comparing two folders goes into the new one, as prosediff.html (unless --open), and is never compared itself.

The window

  • A modern look (ttkbootstrap), light or dark as the system is set: Windows, macOS, or the Linux desktop's colour scheme; a dark title bar on Windows.
  • No terminal flashes up any more when Compare runs.

Fixes

  • Short texts in legacy encodings are read right (cchardet, with charset-normalizer as fallback): “yes” in Windows-1252 no longer reads as УyesФ, nor a few words of Russian as box drawing.
  • A filter or git command that hangs is stopped after a time limit, with every process it started.
uv tool install prosediff    # or: uv tool upgrade prosediff

prosediff 0.3.1

Choose a tag to compare

@raffaelemancuso raffaelemancuso released this 26 Sep 07:14

Languages from Word and OpenDocument files

  • The document's own languages: Word and OpenDocument files record the language of their text (in the runs, the character and paragraph styles, the document defaults). prosediff now reads it, paragraph by paragraph: each paragraph is hyphenated, and split into sentences with --by-sentence, by the rules of its own language, so a German quotation in an Italian paper is hyphenated as German. The file's language is the one most of its letters are marked with, for the paragraphs that mark none.
  • --language values: default (the new default: a document's own languages, the other files' guessed), document (only the document's; an error for Markdown and text files), guess (guessed from the text, py3langid: what auto was, now renamed), or a code such as it.
  • Flags show the language: one in the file header when all of a file's paragraphs share a language, or one before each paragraph's number when they differ. The tooltip names the language and says how it was found: marked in the document, guessed, or given. The flags are SVGs of flag-icons (MIT), embedded in the page only when shown, so they draw on Windows too, which has no flag emoji.
  • Regional codes (pt-br, it-it) split sentences by their language's rules instead of the simple fallback rule.

Folders

  • --include PATTERNS: comparing two folders, only the files matching these glob patterns, separated by |. Default *.docx|*.odt|*.md|*.typ|*.txt; --include "" compares every file. In the window, the Folders: only box.
  • The lock files of open documents (Word's ~$name.docx, LibreOffice's .~lock.name.odt#) are always left out.

Fixes

  • In the window, Compare no longer flashes a terminal window up while git runs.
uv tool install prosediff    # or: uv tool upgrade prosediff

prosediff 0.3.0

Choose a tag to compare

@raffaelemancuso raffaelemancuso released this 26 Sep 06:17

Languages and encodings

  • --language (default auto): the language of each file's prose, guessed paragraph by paragraph (py3langid), so an English reference list does not make an Italian paper English. It sets the rules that split sentences with --by-sentence and hyphenate lines. It replaces --sentence-language. The file header says which language was used, and whether it was guessed.
  • Hyphenation: prose is hyphenated by its language's rules with soft hyphens (pyphen), so every browser breaks words the same way, on screen and on paper, without dictionaries of its own. Justified text loses its wide gaps. Copied text leaves the soft hyphens behind.
  • --encoding (default auto): text and Markdown files are read as UTF-8, unless a file cannot be, or reads with control characters no text holds; then its encoding is guessed (charset-normalizer), Windows-1252 preferred among equally likely ones. The file header says which was used. caffè in an old Latin-1 file no longer shows as caf�.
  • In the window, the Document language and Text encoding boxes.

The page

  • Tracked changes kept with --docx-changes all are shown as Word shows them: insertions underlined, deletions struck through, and who made each and when on hover.
  • Comments inline (key i): each comment written out after its marker, as on paper.
  • Gone: the colour-blind palette and the change tooltips.

Printing

  • Highlights stay inside their column and end at the text edge.
  • A long paragraph continues on the next page instead of leaving the rest of the page blank, never with a lone line either side; no line is cut at the foot of a page.
  • Narrower line-number gutters, for portrait pages.

Other

  • .odt support is an optional extra: uv tool install "prosediff[odt]".
  • --staged is gone: use --cached.
uv tool install prosediff    # or: uv tool upgrade prosediff

prosediff 0.2.0

Choose a tag to compare

@raffaelemancuso raffaelemancuso released this 25 Sep 15:05

The window (prosediff-gui)

  • Two folders: prosediff-gui OLD_FOLDER NEW_FOLDER opens the Files tab with them, compared file by file.
  • Unusable arguments show an error box listing the arguments received (quoted, missing paths marked), and the program exits once it is dismissed, instead of opening the window with a note in the status bar. Handy when launching it from an Explorer context menu.
  • A logo: on the title bar, the dialogs and, on Windows, a taskbar button of its own.

The page

  • The footer links "prosediff" to this repository.
uv tool install prosediff    # or: uv tool upgrade prosediff