Skip to content

Diff engine

For every aligned slide pair, PptxDiff runs a deep, property-by-property diff — this is the core of the tool.

The Differences panel, showing FONT/SIZE/COLOR/TEXT/POSITION/TABLE diffs with word-level highlighting

What gets diffed

Category Details
Text Content, plus a word-level LCS diff that highlights exactly which words changed (strikethrough removed, bold added)
Font Family, size, weight, italic
Color Text and fill colors, including theme (schemeClr) resolution through the deck's color map
Layout Alignment, position, box size, text wrap
Shape Border width/color, hyperlinks (both text-run and shape-level, e.g. an image or textbox linked as a whole)
Images Content hash (did the picture itself change?) + position/size
Charts Chart type + underlying series data, with word-level diff on the data labels
Tables Cell text, per-cell background/border, row/column counts — capped at 20 shown cells with a "+N more" summary
SmartArt Text content extracted from diagram data
Backgrounds Solid / gradient / image / pattern fill, plus color
Animations Effect-sequence signature (detects that something about the animation changed, not a frame-by-frame replay)
Speaker notes Text and formatting — bold/italic/font/color, not just plain text
Transitions Type, speed, auto-advance
Media Video/audio content hash
Master/layout inheritance Layout name + theme name mismatches between the two slides
Embedded fonts Deck-level (not per-slide)

Word-level diffing

Rather than just flagging "text changed," PptxDiff runs an LCS (longest common subsequence) diff at the word level and highlights the actual delta inline — removed words struck through, added words bolded. This applies everywhere text lives: slide text runs, table cells, chart data labels, and SmartArt content.

Theme color resolution

Colors referenced as schemeClr (a theme slot like "accent1," not a literal RGB value) are resolved through the same theme + color-map resolver used for text runs — including table cell fill/border colors and background gradient/pattern first-stop colors. Two slides that both say "accent1" but resolve to different actual colors (because they use different masters/themes) will correctly show as a color diff.

Section headers

Sections (PowerPoint's p:sectionLst) are parsed and diffed at the presentation level, and a moved section (a contiguous block of slides that moved together) surfaces as its own note — "Section 'X' moved from slide N to slide M" — separate from per-slide moved detection.

Where this shows up in the UI

The Differences panel below the two slide previews lists every diff for the current pair, each taggable per-reviewer as approved/rejected (see Reviewer workflow) and individually pickable as Keep-Before/Keep-After/Custom during a three-way merge.