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

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.2
File Size Uploaded
blendiff-0.8.2.tar.gz 643.6 kB Details

Built distribution (wheel)

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

Total release size: 802.0 kB

Release files / blendiff-0.8.2.tar.gz

Download URL blendiff-0.8.2.tar.gz
Size 643.6 kB
Tags Source
SHA-256 checksum
How to use checksums
ca75198e9268ea5ceb53547944a6798022bdee53d089c142c63b8e0873815e88
BLAKE2b-256 checksum
How to use checksums
f68e648e283936f5a366836431f7de2d339ce82b8cfae653b303cee4aa1c1cb2
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 11, 2026.

Transparency log

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

Download URL blendiff-0.8.2-py3-none-any.whl
Size 158.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8770e4d7aacad5a860c13bd3f452877bf5cc26cd9cd5fb759abec86c58dfdd0b
BLAKE2b-256 checksum
How to use checksums
5b053b20fa3bf42a7a0c83addf9f32251b124efcb05d6c7c26c35be3b37881da
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 11, 2026.

Transparency log

Release history Release notifications | RSS feed

0.9.0

2 release files

0.8.3

2 release files

This release

0.8.2 This release

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