mirror of
https://github.com/Haidra-Org/AI-Horde.git
synced 2026-11-06 05:17:31 +00:00
feat: z-image-turbo support
This commit is contained in:
1 parent
76352409d9
commit
46e08e9aef
7 files changed
+27
-10
No files matched your search
@@ -6,6 +6,10 @@ SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
# Changelog
|
||||
|
||||
# 4.48.4
|
||||
|
||||
Z-Image-Turbo Beta
|
||||
|
||||
# 4.48.3
|
||||
|
||||
Qwen-Image Beta
|
||||
|
||||
@@ -154,9 +154,12 @@ class ImageAsyncGenerate(GenerateTemplate):
|
||||
if any(model_reference.get_model_baseline(model_name).startswith("flux_1") for model_name in self.args.models):
|
||||
if "control_type" in self.params:
|
||||
raise e.BadRequest("ControlNet does not work with Flux currently.", rc="ControlNetMismatch")
|
||||
if any(model_reference.get_model_baseline(model_name).startswith("Qwen") for model_name in self.args.models):
|
||||
if any(model_reference.get_model_baseline(model_name).startswith("qwen_image") for model_name in self.args.models):
|
||||
if "control_type" in self.params:
|
||||
raise e.BadRequest("ControlNet does not work with Qwen currently.", rc="ControlNetMismatch")
|
||||
if any(model_reference.get_model_baseline(model_name).startswith("z_image_turbo") for model_name in self.args.models):
|
||||
if "control_type" in self.params:
|
||||
raise e.BadRequest("ControlNet does not work with Z-Image currently.", rc="ControlNetMismatch")
|
||||
if self.params.get("transparent", False) is True:
|
||||
if self.args.extra_source_images and len(self.args.extra_source_images) > 0:
|
||||
raise e.BadRequest(
|
||||
|
||||
@@ -63,9 +63,12 @@ class ImageProcessingGeneration(ProcessingGeneration):
|
||||
if self.wp.params.get("hires_fix", False):
|
||||
return self.wp.kudos * 7
|
||||
return self.wp.kudos * 4
|
||||
if model_reference.get_model_baseline(self.model) in ["flux_1", "qwen_image"]:
|
||||
if model_reference.get_model_baseline(self.model) in ["flux_1", "z_image_turbo"]:
|
||||
# Flux and Qwen is double the size of SDXL and much slower, so it gives double the rewards from it.
|
||||
return self.wp.kudos * 8
|
||||
if model_reference.get_model_baseline(self.model) in ["qwen_image"]:
|
||||
# Qwen is even larger than flux.
|
||||
return self.wp.kudos * 12
|
||||
return self.wp.kudos
|
||||
|
||||
def log_aborted_generation(self):
|
||||
@@ -166,7 +169,7 @@ class ImageProcessingGeneration(ProcessingGeneration):
|
||||
if self.wp.gen_payload.get("control_type"):
|
||||
self.job_ttl = self.job_ttl * 2
|
||||
# Flux and Qwen is way slower than Stable Diffusion
|
||||
if any(model_reference.get_model_baseline(mn) in ["flux_1", "qwen_image"] for mn in self.wp.get_model_names()):
|
||||
if any(model_reference.get_model_baseline(mn) in ["flux_1", "qwen_image", "z_image_turbo"] for mn in self.wp.get_model_names()):
|
||||
self.job_ttl = self.job_ttl * 3
|
||||
if self.job_ttl < 150:
|
||||
self.job_ttl = 150
|
||||
|
||||
@@ -472,8 +472,10 @@ class ImageWaitingPrompt(WaitingPrompt):
|
||||
return (self.calculate_extra_kudos_burn(kudos) * self.n * 2) + 1
|
||||
if model_reference.get_model_baseline(model_name) in ["stable_cascade"]:
|
||||
return (self.calculate_extra_kudos_burn(kudos) * self.n * 4) + 1
|
||||
if model_reference.get_model_baseline(model_name) in ["flux_1", "qwen_image"]:
|
||||
if model_reference.get_model_baseline(model_name) in ["flux_1", "z_image_turbo"]:
|
||||
return (self.calculate_extra_kudos_burn(kudos) * self.n * 8) + 1
|
||||
if model_reference.get_model_baseline(model_name) in ["qwen_image"]:
|
||||
return (self.calculate_extra_kudos_burn(kudos) * self.n * 12) + 1
|
||||
# The +1 is the extra kudos burn per request
|
||||
return (self.calculate_extra_kudos_burn(kudos) * self.n) + 1
|
||||
|
||||
|
||||
@@ -45,6 +45,7 @@ HEAVY_POST_PROCESSORS = {
|
||||
BASELINE_BATCHING_MULTIPLIERS = {
|
||||
"flux_1": 5,
|
||||
"qwen_image": 10,
|
||||
"z_image_turbo": 5,
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -33,11 +33,9 @@ class ModelReference(PrimaryTimedFunction):
|
||||
for _riter in range(10):
|
||||
try:
|
||||
ref_json = "https://raw.githubusercontent.com/Haidra-Org/AI-Horde-image-model-reference/main/stable_diffusion.json"
|
||||
if datetime.utcnow() <= datetime(2025, 12, 30): # Qwen beta
|
||||
ref_json = (
|
||||
"https://raw.githubusercontent.com/Haidra-Org/AI-Horde-image-model-reference/refs/heads/qwen/stable_diffusion.json"
|
||||
)
|
||||
logger.debug("Using qwen beta model reference...")
|
||||
if datetime.utcnow() <= datetime(2025, 12, 30): # Qwen and Zmodel beta
|
||||
ref_json = "https://raw.githubusercontent.com/Haidra-Org/AI-Horde-image-model-reference/refs/heads/zmodel/stable_diffusion.json"
|
||||
logger.debug("Using qwen and zmodel beta model reference...")
|
||||
self.reference = requests.get(
|
||||
os.getenv(
|
||||
"HORDE_IMAGE_COMPVIS_REFERENCE",
|
||||
@@ -64,6 +62,7 @@ class ModelReference(PrimaryTimedFunction):
|
||||
"stable_cascade",
|
||||
"flux_1",
|
||||
"qwen_image",
|
||||
"z_image_turbo",
|
||||
}:
|
||||
self.stable_diffusion_names.add(model)
|
||||
if self.reference[model].get("nsfw"):
|
||||
@@ -108,6 +107,8 @@ class ModelReference(PrimaryTimedFunction):
|
||||
return "flux_1"
|
||||
if not model_details and "[Qwen]" in model_name:
|
||||
return "qwen_image"
|
||||
if not model_details and ("[ZModel]" in model_name or "[ZImage]" in model_name):
|
||||
return "z_image_turbo"
|
||||
return model_details.get("baseline", "stable diffusion 1")
|
||||
|
||||
def get_all_model_baselines(self, model_names):
|
||||
|
||||
+4
-1
@@ -74,9 +74,12 @@ class ParamValidator:
|
||||
if any(model_reference.get_model_baseline(model_name).startswith("flux_1") for model_name in self.models):
|
||||
if self.params.get("hires_fix", False) is True:
|
||||
raise e.BadRequest("HiRes Fix does not work with Flux currently.", rc="HiResMismatch")
|
||||
if any(model_reference.get_model_baseline(model_name).startswith("Qwen") for model_name in self.models):
|
||||
if any(model_reference.get_model_baseline(model_name).startswith("qwen_image") for model_name in self.models):
|
||||
if self.params.get("hires_fix", False) is True:
|
||||
raise e.BadRequest("HiRes Fix does not work with Qwen currently.", rc="HiResMismatch")
|
||||
if any(model_reference.get_model_baseline(model_name).startswith("z_image_turbo") for model_name in self.models):
|
||||
if self.params.get("hires_fix", False) is True:
|
||||
raise e.BadRequest("HiRes Fix does not work with Z-Image currently.", rc="HiResMismatch")
|
||||
if "loras" in self.params:
|
||||
if len(self.params["loras"]) > 5:
|
||||
raise e.BadRequest("You cannot request more than 5 loras per generation.", rc="TooManyLoras")
|
||||
|
||||
Reference in new issue
Block a user