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, visibility, parenting and custom properties
  • 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
  • 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

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".
  3. Carry on working.
  4. Open Snapshot History and press play next to any snapshot to compare it against the current scene.
  5. 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 Modifier and 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
Camera and light settings
Material slot assignment

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.8.3

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.8.3
File Size Uploaded
blendiff-0.8.3.tar.gz 1.6 MB Details

Built distribution (wheel)

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

Total release size: 1.8 MB

Release files / blendiff-0.8.3.tar.gz

Download URL blendiff-0.8.3.tar.gz
Size 1.6 MB
Tags Source
SHA-256 checksum
How to use checksums
f02d7a9663c0a8b079e982315c9711f8040c02e6c779046cd2563b0779ef849d
BLAKE2b-256 checksum
How to use checksums
c3110c2ea3d5b85c827b9ad9d1a2dd223c88150299fa4660d3d5cc1e48e44a98
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 Sep 12, 2026.

Transparency log

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

Download URL blendiff-0.8.3-py3-none-any.whl
Size 157.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
450026ded7058d7646ff3d0bedede74b41e86007195f5396fab8e6211fd6a774
BLAKE2b-256 checksum
How to use checksums
f4e8d0797bff7471e10620f40679589e031922a9a76871d8415ebbac54bab3fc
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 Sep 12, 2026.

Transparency log

Release history Release notifications | RSS feed

0.9.0

2 release files

This release

0.8.3 This release

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