Repository navigation
Releases: MR-TABATA/MrDiff
Release list
mrdiff 0.8.0
sha256: 9195a021cbb6f2b91922f53984923b4b0702c1f4f348688c2b03a26995aa110c
mrdiff 0.7.1
sha256: 06904233cc9e1f8c115e70b70daec2bbc7e0939e7c6bf4f293847cffcde068e7
mrdiff 0.7.0
sha256: 0ad0d09c28fa791e9529307bd618cb3d276d386df859d45872eabecb1f411881
mrdiff 0.6.0
--offset=dx,dy for images
Two screenshots whose header moved by one row are "49% different" pixel for pixel. --offset places the right image at (dx, dy) on the left one and compares the overlap only, so the question becomes "is the content the same once aligned?":
$ mrdiff --offset=0,-24 before.png after.png
Images differ — 1,440 of 518,400 pixels (0.3%)
First difference at (356, 260)
right shifted by (0, -24) — the 518,400 overlapping pixels only
- Images of different sizes are compared too, over the overlap.
- The output always states the shift and how many pixels that left to compare.
--json:imagegainsoffset: {x, y};totalthen counts the overlap. Nothing existing changed.--offseton anything but two images is refused.
The core also exposes its PDF page renderer and font glyph renderer (renderPDFPage, FontGlyphs), so a viewer built on it can draw with the same hand that judges.
日本語
画像の --offset=dx,dy。右の絵を左の (dx, dy) に置いて、重なる範囲だけ比べます ── ヘッダーが 1 行動いたスクリーンショット 2 枚が「49% 違う」ではなく「揃えたら中身は同じか」に答えます。寸法が違っても重なる範囲で比べます。出力は必ず、ずらしと重なった画素の数を言います。--json の image に offset が増え、既存の形は変わっていません。
sha256: b030ccaf579b6d864f116e2e95472aeb5a77165cbb3f57d2686312e87e5b62c0
mrdiff 0.5.0
PDF text
The text of a PDF is now compared alongside the rendering, and reported separately — a re-exported proof whose fonts changed and a contract whose clause changed are different events:
$ mrdiff proof-v1.pdf proof-v2.pdf
PDFs differ — 1 of 12 pages
p.7 1 region
top 69 mm, left 96 mm, 16 × 5 mm
the text is identical — only the rendering differs (fonts, images, layout)
--text shows the text diff instead: one line per extracted line, [p.N] marking pages, with the character-level highlight. Annotations (FreeText notes, comments) and form-field values are included as [FreeText] … lines. A PDF with no text (scanned pages) says so.
$ mrdiff --text contract-v1.pdf contract-v2.pdf
text: 1 lines changed, 0 added, 0 removed
12 - Article 3 Delivery by 31 October 2026.
12 + Article 3 Delivery by 30 November 2026.
--json: pdf gains text: {result, changed, added, removed, lines_a, lines_b} (null when a side has no text); --text reports kind: "pdf-text". Nothing existing changed.
The README's speed table now has a text row: a 780 MB, ten-million-line log with two changed lines compares in 0.7 s (warm cache).
日本語
PDF の文字も見た目と並べて比べ、別に言います ──「文字は同じ、違うのは見た目だけ」と「文字が N 行違う」。--text で行 diff が出ます([p.N] がページの境、注釈とフォームの値も含む)。文字の無い PDF(スキャン)はそう言います。--json は pdf に text が増え、--text は kind: "pdf-text"。既存の形は変わっていません。
sha256: c7c9981a1135c83909e4b4c9eee0e601005b551ed95fd9aa9c4d8e3eba0f1b09
mrdiff 0.4.0
Archives
Any zip — docx, xlsx, pptx, EPUB, Sketch, jar — is compared as a folder: which files inside differ, read from the archive's own table of contents (CRC and size per entry), without unpacking.
$ mrdiff deck-v1.pptx deck-v2.pptx
changed ppt/slides/slide3.xml
only in B ppt/media/image7.png
1 changed, 0 only in A, 1 only in B (inside the archive)
Word documents
When both archives hold a Word body, each paragraph's text is pulled out and compared as a line diff — one paragraph per line, with the character-level highlight. Other parts (formatting, media, properties) are counted, not compared.
$ mrdiff contract-v1.docx contract-v2.docx
paragraphs: 1 changed, 1 added, 0 removed
1 other parts differ (formatting, media, properties) — the text above is what changed in the body
1 - Article 1 Delivery by 31 October 2026.
1 + Article 1 Delivery by 30 November 2026.
Fonts
OTF, TTF, TTC. Every character both fonts have is drawn into the same 48 px cell and compared pixel by pixel; characters only one side has are listed as added or removed. WOFF is not read.
$ mrdiff Mincho-1.002.otf Mincho-1.003.otf
Fonts differ — 12 of 6,842 glyphs render differently
first: あ U+3042
only in B: 3 characters (first ① U+2460)
version: 1.002 → 1.003
--json gains kind: "archive", "docx", "font". Nothing existing changed. The README now also lists what ImageIO already decodes (PSD, HEIC, AVIF, WebP, TIFF, camera RAW).
日本語
- アーカイブ:zip なら何でも(docx・xlsx・pptx・EPUB・Sketch・jar)目次からフォルダとして比べ、中のどのファイルが違うかを言います。展開しません
- Word 文書:両方に本文があれば、段落ごとの文字を抜いて行 diff に掛けます。書式・画像・プロパティは数だけ
- フォント:OTF・TTF・TTC。両方が持つ文字を同じ枠に描いて画素で比べ、違った字形と増減した文字を言います。WOFF は読みません
--json に archive・docx・font が増え、既存の形は変わっていません。
sha256: 76c8fa938ff980d9b51b953d59629bb14c3818316412a4b5949ee66ef4837799
mrdiff 0.3.0
Two folders
mrdiff old/ new/ walks both trees and says which files differ, and which exist on one side only — the answer --ssh already gave for a server, now for the folder next door.
changed ch/chapter-02.pdf
only in A appendix.md
only in B chapter-07.md
1 changed, 1 only in A, 1 only in B
- File level on purpose: hand it the two files and it tells you which page / which pixels.
- Nothing is filtered (
.DS_Storecounts, as withdiff -r). --jsongainskind: "dir"— same shape astree, withonly_a/only_b. Nothing existing changed.- A folder and a file are not compared;
--tolerance/--ignore-alphaare refused for folders.
フォルダ 2 つ(日本語)
mrdiff old/ new/ で両方のツリーを歩き、どのファイルが違うか・片側にしか無いかを言います。--ssh がサーバ相手に返していた答えを、隣のフォルダに。ファイル単位で止めるのは意図したもので、その 2 本を渡せばどのページかまで出ます。--json には kind: "dir" が増え、既存の形は変わっていません。
sha256: bad277b76c18d74f2989634069df788dccdb9498de801f3401d46a7b55a03beb
mrdiff 0.2.0
mrdiff a.pdf b.pdf compares PDFs page by page and says where on the page — in millimetres, not pixels.
PDFs differ — 1 of 12 pages
p.7 2 regions
top 107 mm, left 25 mm, 71 × 14 mm
top 205 mm, left 106 mm, 21 × 21 mm
p.13 only in B
- Pages are paired by number; extra pages are listed, not compared. A page whose paper size differs is reported and not compared further.
- Rendered at 72 dpi on white.
--toleranceworks as for images;--ignore-alphais refused (nothing to apply to). --jsongainskind: "pdf"withpages[]andregions[]in mm. Nothing existing changed.
--help and --lang
mrdiff --help— every option, one line each.--lang=en|ja— same asMRDIFF_LANG, for one run.mrdiff --help --lang=jashows the help in Japanese. The OS locale is still never consulted.
PDF(日本語)
mrdiff a.pdf b.pdf で PDF をページごとに比べ、そのページのどこかを画素ではなく mm で言います。ページは番号で対にし、余ったページは列挙するだけで比べません。紙の大きさが違うページはそう言って、それ以上比べません。--json には kind: "pdf" が増え、既存の形は変わっていません。
--help と --lang
mrdiff --help でオプションの一覧(1 つ 1 行)。--lang=ja は MRDIFF_LANG=ja と同じで 1 回きり。mrdiff --help --lang=ja で日本語の一覧が出ます。
sha256: 8725f25221c76b2c1df2bf926f8246fa351a3b5cb0ac2217864c0555bc886692
mrdiff 0.1.2
sha256: 013f9cb9d03424376cf31ce6791b171d778134139a147aafacbf6c71b7fbd634
mrdiff 0.1.1
sha256: 4afb4b789248af1d9b4dc0341360ab26c1d8ed3ef5ba71b09ad29e4ef9f71087