# INSTALLED BY DEFAULT, on top of diffusers-pin.txt. Set UNSLOTH_DIFFUSERS_MAIN=0 to opt out.
# Today that is FLUX.3 Image Klein: Diffusers support merged as huggingface/diffusers#15046 on 2026-10-15 and is
# in no release yet. The commit below is main as of 2026-10-16 (d42ebf9c, the FLUX.3 prompt upsampler block,
# huggingface/diffusers#15058), which carries that merge; past it only FLUX.3 files changed. Studio drops the
# upsampler step from the blocks (diffusion_flux3.flux3_blocks). Comment the line out again (and empty
# _UNRELEASED_MIN_DIFFUSERS) once a release carries it.
#
# A pinned commit of Diffusers main, for models whose support has merged upstream but has not
# reached a release yet. The last one was Qwen-Image-2.1: it merged on 2026-09-18, four weeks after
# 0.40.0 was cut, and until 0.41.0 shipped (2026-10-06) nothing on PyPI could run it. Without this
# file the only way to run such a model is to break the release pin by hand.
#
# Why this is a SEPARATE file rather than an edit to diffusers-pin.txt, even though both now run on
# every install. That file is the single source of truth for the release everything is built
# against, and it deliberately refuses a source build. Keeping them apart is what makes this one
# survivable: the release lands first and stays resident, so a host with no git, no route to
# github.com, or an upstream that is down for the afternoon keeps a working Studio and loses one
# model, instead of failing the install outright. Folding the commit into the pin would make a
# reachable github.com a hard requirement of installing Unsloth at all.
#
# Why a COMMIT and not a branch. Nothing in Unsloth can tell two builds of main apart: a git
# checkout reports 0.41.0.dev0 whatever it was built from, and ``_version_tuple`` truncates that to
# (0, 41, 0), so the family version gate reads any main build as satisfying 0.41.0. The commit is
# therefore the only thing actually pinning behaviour, and with this on by default that matters
# more, not less: everyone gets the same tree. It is also cheaper to check: for a full SHA
# ``_direct_reference_is_installed`` compares what is recorded in direct_url.json and needs no
# network, while a branch ref costs a git ls-remote on every pass.
#
# This exact commit is the tree FLUX.3 Klein was rendered and compared against in Studio, so what a
# user gets is what was tested, not "whatever the branch was that day".
#
# Why the URL still says git+ when most hosts have no git. It is the requirement, not the transport:
# a host with no working git installs the same commit from
# https://github.com/huggingface/diffusers/archive/<commit>.zip, which needs nothing but https, and
# _github_archive_url derives that URL from this line so there is still one commit written down in
# one place. That fallback is why the commit below must stay a full 40-character SHA: an archive
# records no ref, so only a SHA in the URL makes the resident build identifiable afterwards.
#
# Unlike a clone, an archive's bytes are not checked against the commit, so pip and uv verify this
# SHA-256 before building; no digest line means no zip route. Bump it with the commit:
#   curl -sL https://github.com/huggingface/diffusers/archive/<commit>.zip | sha256sum
# archive-sha256: c46925a12c1b64340272dbd4c5d72a4298ecd4c96cad2c9d549b85a99ffb491f
#
# Retiring a pin: bump diffusers-pin.txt to the release and comment the line out (done for 0.41.0).
diffusers @ git+https://github.com/huggingface/diffusers.git@d42ebf9c6e0b46103b74283f5324357a67acaa04
