Skip to main content

BlenDiff

See what changed between two versions of a .blend file.

BlenDiff compares scenes, not bytes. It reads the file through Blender's own Python API, so instead of "these files differ" you get "this chair moved, that material was rewired, this mesh was subdivided". Save a snapshot whenever you reach a point worth keeping, then compare any two of them, or compare one against whatever is open now.

Snapshots live in a .blendiff file next to your .blend, so a project folder holds those two files and nothing else.


Detecting a geometry edit

The blackboard was reshaped in edit mode. BlenDiff picks up the new topology, the changed vertex positions and the UVs, without storing a copy of the mesh.

Geometry change detected

Comparing against a snapshot

Object level changes, property by property. The chair here was renamed, hidden from renders, moved and rotated, and BlenDiff tracks the rename as a rename rather than reporting an unrelated deletion and addition.

Diff results

Merging two versions

Give BlenDiff a common starting point and two versions that grew apart. It applies the changes that do not overlap and asks you about the ones that do. Apply Merge stays disabled until nothing is left undecided.

Three-way merge


What it compares

  • Objects: position, rotation, scale, parenting and custom properties
  • Visibility: viewport and render switches, selectability, display mode, and the per-ray flags that decide whether something casts a shadow or shows up in reflections
  • Meshes: a moved vertex, a subdivided face or a re-unwrap, caught by comparing content digests rather than storing the geometry
  • Materials: node graphs, node by node, including rewired links and image names
  • Armatures: bone hierarchy, rest pose, roll, bone collections, pose transforms and bone constraints, so a reparented finger or a rewired IK chain is visible
  • Modifiers and constraints: the whole stack, in order, with per setting detail
  • Geometry nodes: the node group on a modifier and every input it exposes, by the name you see in the panel rather than an internal socket number
  • Shape keys: each key's value, mute, slider range and interpolation, plus whether the shape itself was sculpted
  • Animation: keyframe counts, frame ranges, interpolation, drivers and NLA tracks
  • Scene settings: render engine, resolution, sampling, output format, colour management, world background, cameras and lights
  • Collections: which objects belong where, and whether a collection is hidden, excluded or set to holdout
  • Curves, text, empties and the rest: the settings that shape them, such as a curve's bevel and extrude or a text object's contents and spacing

Renames are tracked properly. Objects carry a hidden id, so renaming Cube to Body_LOW stays one modified object with its other changes intact.

Snapshots also record which of these they captured. If an old snapshot predates a feature, that part is reported as not compared instead of being diffed, so upgrading BlenDiff never fills your first diff with changes nobody made.


Installation

Blender 4.2 and newer

Edit > Preferences > Get Extensions, search for BlenDiff, click Install. Updates arrive on their own.

Blender 3.6 to 4.1

Download the latest blendiff-<version>.zip from Releases and install it with Edit > Preferences > Add-ons > Install from Disk.

Either way, the panel appears in the 3D viewport sidebar. Press N and look for the BlenDiff tab.


Using it

  1. Save your .blend file. BlenDiff needs somewhere to put its history.
  2. Press Save Snapshot and give it a name, something like "before rigging". If you would rather not remember, turn on Snapshot on save in the add-on preferences and one is taken every time you save. Those are pruned to a limit you set; the ones you take by hand are kept.
  3. Carry on working.
  4. Open Snapshot History and press play next to any snapshot to compare it against the current scene. To compare two saved snapshots to each other instead, pick them in Compare Two Snapshots and press Compare.
  5. To go back, press the restore button beside a snapshot. It writes that snapshot's values over the scene in one undo step, and tells you what it could not account for. It never creates or deletes objects, so anything made since the snapshot is left alone.
  6. Export HTML Report writes a single self contained page you can send to someone who does not have the file open.

For a merge, take a snapshot of the common starting point, then one of each version that grew from it, and pick all three in the Three-Way Merge panel.


What merge writes back

BlenDiff only claims to apply what it can actually apply. Anything it cannot write back is shown as read only, so it never asks you to choose a value it would then discard.

Applied for you Reported, but reconcile by hand
Position, rotation, scale Mesh geometry
Viewport and render visibility Constraint stacks
Object names Keyframes, drivers, NLA strips
Collection membership Material node graphs
Parenting, keeping world position Bone constraints
Pose bone transforms Adding or removing bones
Rest bones: parenting, rest pose, roll Object creation, which needs the source file
Custom properties Adding, removing or retyping a modifier
Camera and light settings
Material slot assignment
Modifier settings and stack order Collection visibility
Curve, text, empty and lattice settings Links to another datablock
Geometry nodes inputs Swapping a node group
Shape key value, mute, slider range A sculpted shape key

Also available as a Python library

BlenDiff installs from PyPI as a plain Python package, with no Blender required, for comparing snapshots in scripts or in continuous integration:

pip install blendiff

See docs/development.md for the command line tool and the Python API, and docs/architecture.md for how the code is put together.


License

GPL-3.0-or-later. See LICENSE.

BlenDiff is licensed under the GNU General Public License v3 or later because Blender's Extensions Platform requires it: anything using the bpy API is treated as a derivative of Blender, which is itself GPL. The pip package and the Blender addon ship the same code under the same terms.

Metadata

Release files for blendiff 0.9.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for blendiff 0.9.0
File Size Uploaded
blendiff-0.9.0.tar.gz 1.6 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for blendiff 0.9.0
File Interpreter ABI Platform
blendiff-0.9.0-py3-none-any.whl Python 3 none any Details

Total release size: 1.8 MB

Release files / blendiff-0.9.0.tar.gz

Download URL blendiff-0.9.0.tar.gz
Size 1.6 MB
Tags Source
SHA-256 checksum
How to use checksums
a11c28b85ce84a671760262ebbf899281c093613a30cf5f8d0eceae6eb05deeb
BLAKE2b-256 checksum
How to use checksums
475b75df8bcca750494e894312811c11dcd5ce3e8f0966595f6a31067b74a88b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 8, 2026.

Transparency log

Release files / blendiff-0.9.0-py3-none-any.whl

Download URL blendiff-0.9.0-py3-none-any.whl
Size 180.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
380e9580132a3e4d03f15460b7f502af0c839891fbc531320cf38caa6ad810f8
BLAKE2b-256 checksum
How to use checksums
2f22b922a5c923c71f939e86ac8d528e3c3784c4126bcf243ac021c524986ece
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 8, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.9.0 This release

2 release files

0.8.3

2 release files

0.8.2

2 release files

0.8.1

2 release files

0.8.0

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page