Image-to-Image / provenance.py
hy3dlab's picture
feat: restore General plus 19 LoRA editor
df13472 verified
Raw
History Blame Contribute Delete
7.85 kB
"""Pinned model and optional adapter provenance for the public backend."""
from __future__ import annotations
from dataclasses import dataclass
UPSTREAM_SPACE_ID = "prithivMLmods/Qwen-Image-Edit-2511-LoRAs-Fast"
UPSTREAM_SPACE_REVISION = "e1c9d2e8421d7934841d67f809d87ac7a6cdf720"
BASE_MODEL_ID = "Qwen/Qwen-Image-Edit-2511"
BASE_MODEL_REVISION = "6f3ccc0b56e431dc6a0c2b2039706d7d26f22cb9"
TRANSFORMER_MODEL_ID = "prithivMLmods/Qwen-Image-Edit-Rapid-AIO-V19"
TRANSFORMER_MODEL_REVISION = "7409bee9ad51ca89da13f80b75eded2f8afe0152"
KERNEL_MODEL_ID = "kernels-community/vllm-flash-attn3"
KERNEL_MODEL_REVISION = "9a3cd57fdb1a2c01ef72f1ef48ceca4991134ce6"
@dataclass(frozen=True)
class AdapterSpec:
repo: str
revision: str
weights: str
adapter_name: str
license_status: str
# These are the provenance-pinned adapters copied from the approved upstream
# revision. Runtime code may only load entries from this immutable allowlist.
CANDIDATE_ADAPTER_SPECS: dict[str, AdapterSpec] = {
"Multiple-Angles": AdapterSpec(
repo="dx8152/Qwen-Edit-2509-Multiple-angles",
revision="c342b0e746c3a3275af1a4a0c6ae78e0e4802531",
weights="镜头转换.safetensors",
adapter_name="multiple-angles",
license_status="metadata-apache-2.0",
),
"Photo-to-Anime": AdapterSpec(
repo="autoweeb/Qwen-Image-Edit-2509-Photo-to-Anime",
revision="2fdebf4e0c1ea04ef3037ff531bc5a4a3a842396",
weights="Qwen-Image-Edit-2509-Photo-to-Anime_000001000.safetensors",
adapter_name="photo-to-anime",
license_status="metadata-mit",
),
"Anime-V2": AdapterSpec(
repo="prithivMLmods/Qwen-Image-Edit-2511-Anime",
revision="977f8c2ed22c8581c8750370bfce34058b253598",
weights="Qwen-Image-Edit-2511-Anime-2000.safetensors",
adapter_name="anime-v2",
license_status="metadata-apache-2.0",
),
"Light-Migration": AdapterSpec(
repo="dx8152/Qwen-Edit-2509-Light-Migration",
revision="402a49e4afaf739e7dc21da3549ae9353db9759b",
weights="参考色调.safetensors",
adapter_name="light-migration",
license_status="metadata-apache-2.0",
),
"Upscaler": AdapterSpec(
repo="starsfriday/Qwen-Image-Edit-2511-Upscale2K",
revision="129c6cc77643fd55e59902f2e9363912b638ad26",
weights="qwen_image_edit_2511_upscale.safetensors",
adapter_name="upscale-2k",
license_status="metadata-apache-2.0",
),
"Style-Transfer": AdapterSpec(
repo="zooeyy/Style-Transfer",
revision="88b73376f56b5fbec98e796b84b42627490f3172",
weights="Style Transfer-Alpha-V0.1.safetensors",
adapter_name="style-transfer",
license_status="conflict-metadata-apache-card-mit",
),
"Manga-Tone": AdapterSpec(
repo="nappa114514/Qwen-Image-Edit-2509-Manga-Tone",
revision="a415e6bf60a65814b2cfafd9d07bbe4e918c044d",
weights="tone001.safetensors",
adapter_name="manga-tone",
license_status="metadata-apache-2.0",
),
"Anything2Real": AdapterSpec(
repo="lrzjason/Anything2Real_2601",
revision="b547e090d255ac10b190204c7868b03a61faf15e",
weights="anything2real_2601.safetensors",
adapter_name="anything2real",
license_status="metadata-apache-2.0",
),
"Fal-Multiple-Angles": AdapterSpec(
repo="fal/Qwen-Image-Edit-2511-Multiple-Angles-LoRA",
revision="e3066224ab74263f4a5b6179cd1a3b0a15577e44",
weights="qwen-image-edit-2511-multiple-angles-lora.safetensors",
adapter_name="fal-multiple-angles",
license_status="metadata-apache-2.0",
),
"Polaroid-Photo": AdapterSpec(
repo="prithivMLmods/Qwen-Image-Edit-2511-Polaroid-Photo",
revision="6e9d2f4b9fc0b9a1484cccade8ffdcfed13bd2a1",
weights="Qwen-Image-Edit-2511-Polaroid-Photo.safetensors",
adapter_name="polaroid-photo",
license_status="metadata-apache-2.0-brand-review",
),
"Unblur-Anything": AdapterSpec(
repo="prithivMLmods/Qwen-Image-Edit-2511-Unblur-Upscale",
revision="365faf9244e381bf5ac1a6d124eb2a1d1ed857ff",
weights="Qwen-Image-Edit-Unblur-Upscale_15.safetensors",
adapter_name="unblur-anything",
license_status="metadata-apache-2.0",
),
"Midnight-Noir-Eyes-Spotlight": AdapterSpec(
repo="prithivMLmods/Qwen-Image-Edit-2511-Midnight-Noir-Eyes-Spotlight",
revision="c1bfc0f3c9e753fb4eb29be5f9de9440fc6ff055",
weights="Qwen-Image-Edit-2511-Midnight-Noir-Eyes-Spotlight.safetensors",
adapter_name="midnight-noir-eyes-spotlight",
license_status="metadata-apache-2.0",
),
"Hyper-Realistic-Portrait": AdapterSpec(
repo="prithivMLmods/Qwen-Image-Edit-2511-Hyper-Realistic-Portrait",
revision="bdac42896d98c846751e8f8df018154318790fee",
weights="HRP_20.safetensors",
adapter_name="hyper-realistic-portrait",
license_status="metadata-apache-2.0",
),
"Ultra-Realistic-Portrait": AdapterSpec(
repo="prithivMLmods/Qwen-Image-Edit-2511-Ultra-Realistic-Portrait",
revision="78ae4115a70bd234799747675f096be3c58f0c87",
weights="URP_20.safetensors",
adapter_name="ultra-realistic-portrait",
license_status="metadata-apache-2.0",
),
"Pixar-Inspired-3D": AdapterSpec(
repo="prithivMLmods/Qwen-Image-Edit-2511-Pixar-Inspired-3D",
revision="833e5db8031cd3a1b3e70cd0e016fc78d09a4785",
weights="PI3_20.safetensors",
adapter_name="pi3",
license_status="metadata-apache-2.0-brand-review",
),
"Noir-Comic-Book": AdapterSpec(
repo="prithivMLmods/Qwen-Image-Edit-2511-Noir-Comic-Book-Panel",
revision="b6774f01b2fea7074882d0dec1e1694cea30df12",
weights="Noir-Comic-Book-Panel_20.safetensors",
adapter_name="ncb",
license_status="metadata-apache-2.0",
),
"Any-light": AdapterSpec(
repo="lilylilith/QIE-2511-MP-AnyLight",
revision="ad3ce5f3602542cc2cfae8db9616f8712e0d025c",
weights="QIE-2511-AnyLight_.safetensors",
adapter_name="any-light",
license_status="metadata-apache-2.0",
),
"Studio-DeLight": AdapterSpec(
repo="prithivMLmods/QIE-2511-Studio-DeLight",
revision="a5c2440989ba6a025ac99acac095369486e32774",
weights="QIE-2511-Studio-DeLight-5000.safetensors",
adapter_name="studio-delight",
license_status="metadata-apache-2.0",
),
"Cinematic-FlatLog": AdapterSpec(
repo="prithivMLmods/QIE-2511-Cinematic-FlatLog-Control",
revision="f30505226920906802c9677634219bc53edfd915",
weights="QIE-2511-Cinematic-FlatLog-Control-3200.safetensors",
adapter_name="flat-log",
license_status="metadata-apache-2.0",
),
}
# General editing remains available without an adapter, while all 19 pinned
# upstream adapters are explicitly enabled. The runtime keeps at most one LoRA
# resident at a time; this allowlist does not imply that all weights are loaded.
ENABLED_ADAPTER_IDS: frozenset[str] = frozenset(CANDIDATE_ADAPTER_SPECS)
ENABLED_ADAPTER_SPECS = {
adapter_id: CANDIDATE_ADAPTER_SPECS[adapter_id]
for adapter_id in CANDIDATE_ADAPTER_SPECS
if adapter_id in ENABLED_ADAPTER_IDS
}
def assert_pinned_provenance() -> None:
revisions = [
UPSTREAM_SPACE_REVISION,
BASE_MODEL_REVISION,
TRANSFORMER_MODEL_REVISION,
KERNEL_MODEL_REVISION,
*(spec.revision for spec in CANDIDATE_ADAPTER_SPECS.values()),
]
if any(len(revision) != 40 or any(c not in "0123456789abcdef" for c in revision) for revision in revisions):
raise RuntimeError("All remote assets must use a full 40-character commit revision")
assert_pinned_provenance()