horde-engine 7.2.2__tar.gz → 7.2.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (284) hide show
  1. {horde_engine-7.2.2 → horde_engine-7.2.4}/PKG-INFO +1 -1
  2. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/_version.py +2 -2
  3. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/horde.py +20 -8
  4. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipeline/comfy_node_inputs.json +9 -0
  5. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipeline/families/post_processing.py +5 -0
  6. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipeline/horde_compat.py +16 -0
  7. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipeline/payload_pp.py +27 -6
  8. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipeline_designs/pipeline_image_facefix.json +68 -5
  9. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipelines/pipeline_image_facefix.json +19 -1
  10. {horde_engine-7.2.2 → horde_engine-7.2.4}/.gitignore +0 -0
  11. {horde_engine-7.2.2 → horde_engine-7.2.4}/LICENSE +0 -0
  12. {horde_engine-7.2.2 → horde_engine-7.2.4}/README.md +0 -0
  13. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/__init__.py +0 -0
  14. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/__pyinstaller.py +0 -0
  15. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/api.py +0 -0
  16. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/benchmark.py +0 -0
  17. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/beta_models.py +0 -0
  18. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/comfy_horde.py +0 -0
  19. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/config_path.py +0 -0
  20. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/consts.py +0 -0
  21. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/exceptions.py +0 -0
  22. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/execution/__init__.py +0 -0
  23. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/execution/adaptive_sampler_bound.py +0 -0
  24. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/execution/comfy_events.py +0 -0
  25. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/execution/comfy_patches.py +0 -0
  26. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/execution/component_cache.py +0 -0
  27. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/execution/component_materialize.py +0 -0
  28. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/execution/component_restore.py +0 -0
  29. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/execution/component_stability_probe.py +0 -0
  30. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/execution/cpu_weight_retention.py +0 -0
  31. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/execution/graph_utils.py +0 -0
  32. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/execution/in_process.py +0 -0
  33. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/execution/interface.py +0 -0
  34. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/execution/model_dirs.py +0 -0
  35. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/execution/phase_timing.py +0 -0
  36. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/execution/progress_hook.py +0 -0
  37. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/execution/results.py +0 -0
  38. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/execution/sampler_options.py +0 -0
  39. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/execution/sampling_lease.py +0 -0
  40. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/execution/server_shim.py +0 -0
  41. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/execution/shared_components.py +0 -0
  42. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/execution/sigma_schedules.py +0 -0
  43. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/execution/stage_graph.py +0 -0
  44. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/execution/stage_payloads.py +0 -0
  45. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/execution/standalone_vae.py +0 -0
  46. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/execution/weight_prefetch.py +0 -0
  47. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/execution/zero_copy_load.py +0 -0
  48. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/feature_impact.py +0 -0
  49. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/feature_requirements.py +0 -0
  50. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/initialisation.py +0 -0
  51. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/installation/__init__.py +0 -0
  52. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/installation/__main__.py +0 -0
  53. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/installation/installer.py +0 -0
  54. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/installation/manifest.json +0 -0
  55. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/installation/manifest.py +0 -0
  56. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/integrations/__init__.py +0 -0
  57. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/integrations/logfire_comfy_internals.py +0 -0
  58. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/integrations/logfire_setup.py +0 -0
  59. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/metrics.py +0 -0
  60. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/model_database/db_dep.json +0 -0
  61. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/model_database/db_embeds.json +0 -0
  62. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/model_database/diffusers.json +0 -0
  63. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/model_database/med_config.json +0 -0
  64. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/model_manager/__init__.py +0 -0
  65. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/model_manager/annotator_provider.py +0 -0
  66. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/model_manager/base.py +0 -0
  67. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/model_manager/civitai_adhoc.py +0 -0
  68. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/model_manager/civitai_provider.py +0 -0
  69. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/model_manager/civitai_records.py +0 -0
  70. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/model_manager/codeformer.py +0 -0
  71. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/model_manager/compvis.py +0 -0
  72. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/model_manager/controlnet.py +0 -0
  73. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/model_manager/controlnet_annotator.py +0 -0
  74. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/model_manager/diffusers.py +0 -0
  75. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/model_manager/esrgan.py +0 -0
  76. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/model_manager/gfpgan.py +0 -0
  77. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/model_manager/hyper.py +0 -0
  78. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/model_manager/lora.py +0 -0
  79. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/model_manager/miscellaneous.py +0 -0
  80. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/model_manager/safety_checker.py +0 -0
  81. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/model_manager/ti.py +0 -0
  82. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/__init__.py +0 -0
  83. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/comfyui_layerdiffuse/LICENSE +0 -0
  84. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/comfyui_layerdiffuse/README.md +0 -0
  85. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/comfyui_layerdiffuse/__init__.py +0 -0
  86. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/comfyui_layerdiffuse/examples/layer_diffusion_cond_example.json +0 -0
  87. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/comfyui_layerdiffuse/examples/layer_diffusion_cond_fg_all.json +0 -0
  88. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/comfyui_layerdiffuse/examples/layer_diffusion_cond_joint_bg.json +0 -0
  89. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/comfyui_layerdiffuse/examples/layer_diffusion_cond_joint_fg.json +0 -0
  90. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/comfyui_layerdiffuse/examples/layer_diffusion_diff_bg.json +0 -0
  91. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/comfyui_layerdiffuse/examples/layer_diffusion_diff_bg_stop_at.json +0 -0
  92. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/comfyui_layerdiffuse/examples/layer_diffusion_diff_fg.json +0 -0
  93. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/comfyui_layerdiffuse/examples/layer_diffusion_fg_example.json +0 -0
  94. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/comfyui_layerdiffuse/examples/layer_diffusion_fg_example_rgba.json +0 -0
  95. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/comfyui_layerdiffuse/examples/layer_diffusion_joint.json +0 -0
  96. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/comfyui_layerdiffuse/layered_diffusion.py +0 -0
  97. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/comfyui_layerdiffuse/lib_layerdiffusion/__init__.py +0 -0
  98. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/comfyui_layerdiffuse/lib_layerdiffusion/attention_sharing.py +0 -0
  99. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/comfyui_layerdiffuse/lib_layerdiffusion/enums.py +0 -0
  100. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/comfyui_layerdiffuse/lib_layerdiffusion/models.py +0 -0
  101. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/comfyui_layerdiffuse/lib_layerdiffusion/utils.py +0 -0
  102. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/comfyui_layerdiffuse/pyproject.toml +0 -0
  103. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/comfyui_layerdiffuse/requirements.txt +0 -0
  104. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/LICENSE +0 -0
  105. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/README.md +0 -0
  106. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/__init__.py +0 -0
  107. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/basicsr/VERSION +0 -0
  108. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/basicsr/__init__.py +0 -0
  109. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/basicsr/archs/__init__.py +0 -0
  110. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/basicsr/archs/arcface_arch.py +0 -0
  111. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/basicsr/archs/arch_util.py +0 -0
  112. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/basicsr/archs/codeformer_arch.py +0 -0
  113. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/basicsr/archs/rrdbnet_arch.py +0 -0
  114. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/basicsr/archs/vgg_arch.py +0 -0
  115. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/basicsr/archs/vqgan_arch.py +0 -0
  116. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/basicsr/data/__init__.py +0 -0
  117. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/basicsr/data/data_sampler.py +0 -0
  118. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/basicsr/data/data_util.py +0 -0
  119. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/basicsr/data/prefetch_dataloader.py +0 -0
  120. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/basicsr/data/transforms.py +0 -0
  121. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/basicsr/losses/__init__.py +0 -0
  122. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/basicsr/losses/loss_util.py +0 -0
  123. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/basicsr/losses/losses.py +0 -0
  124. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/basicsr/metrics/__init__.py +0 -0
  125. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/basicsr/metrics/metric_util.py +0 -0
  126. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/basicsr/metrics/psnr_ssim.py +0 -0
  127. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/basicsr/models/__init__.py +0 -0
  128. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/basicsr/ops/__init__.py +0 -0
  129. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/basicsr/ops/dcn/__init__.py +0 -0
  130. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/basicsr/ops/dcn/deform_conv.py +0 -0
  131. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/basicsr/ops/dcn/src/deform_conv_cuda.cpp +0 -0
  132. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/basicsr/ops/dcn/src/deform_conv_cuda_kernel.cu +0 -0
  133. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/basicsr/ops/dcn/src/deform_conv_ext.cpp +0 -0
  134. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/basicsr/ops/fused_act/__init__.py +0 -0
  135. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/basicsr/ops/fused_act/fused_act.py +0 -0
  136. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/basicsr/ops/fused_act/src/fused_bias_act.cpp +0 -0
  137. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/basicsr/ops/fused_act/src/fused_bias_act_kernel.cu +0 -0
  138. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/basicsr/ops/upfirdn2d/__init__.py +0 -0
  139. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/basicsr/ops/upfirdn2d/src/upfirdn2d.cpp +0 -0
  140. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/basicsr/ops/upfirdn2d/src/upfirdn2d_kernel.cu +0 -0
  141. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/basicsr/ops/upfirdn2d/upfirdn2d.py +0 -0
  142. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/basicsr/setup.py +0 -0
  143. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/basicsr/train.py +0 -0
  144. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/basicsr/utils/__init__.py +0 -0
  145. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/basicsr/utils/dist_util.py +0 -0
  146. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/basicsr/utils/download_util.py +0 -0
  147. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/basicsr/utils/file_client.py +0 -0
  148. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/basicsr/utils/img_util.py +0 -0
  149. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/basicsr/utils/lmdb_util.py +0 -0
  150. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/basicsr/utils/logger.py +0 -0
  151. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/basicsr/utils/matlab_functions.py +0 -0
  152. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/basicsr/utils/misc.py +0 -0
  153. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/basicsr/utils/options.py +0 -0
  154. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/basicsr/utils/realesrgan_utils.py +0 -0
  155. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/basicsr/utils/registry.py +0 -0
  156. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/basicsr/version.py +0 -0
  157. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/facelib/__init__.py +0 -0
  158. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/facelib/detection/__init__.py +0 -0
  159. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/facelib/detection/align_trans.py +0 -0
  160. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/facelib/detection/matlab_cp2tform.py +0 -0
  161. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/facelib/detection/retinaface/retinaface.py +0 -0
  162. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/facelib/detection/retinaface/retinaface_net.py +0 -0
  163. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/facelib/detection/retinaface/retinaface_utils.py +0 -0
  164. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/facelib/detection/yolov5face/__init__.py +0 -0
  165. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/facelib/detection/yolov5face/face_detector.py +0 -0
  166. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/facelib/detection/yolov5face/models/__init__.py +0 -0
  167. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/facelib/detection/yolov5face/models/common.py +0 -0
  168. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/facelib/detection/yolov5face/models/experimental.py +0 -0
  169. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/facelib/detection/yolov5face/models/yolo.py +0 -0
  170. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/facelib/detection/yolov5face/models/yolov5l.yaml +0 -0
  171. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/facelib/detection/yolov5face/models/yolov5n.yaml +0 -0
  172. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/facelib/detection/yolov5face/utils/__init__.py +0 -0
  173. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/facelib/detection/yolov5face/utils/autoanchor.py +0 -0
  174. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/facelib/detection/yolov5face/utils/datasets.py +0 -0
  175. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/facelib/detection/yolov5face/utils/extract_ckpt.py +0 -0
  176. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/facelib/detection/yolov5face/utils/general.py +0 -0
  177. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/facelib/detection/yolov5face/utils/torch_utils.py +0 -0
  178. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/facelib/parsing/__init__.py +0 -0
  179. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/facelib/parsing/bisenet.py +0 -0
  180. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/facelib/parsing/parsenet.py +0 -0
  181. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/facelib/parsing/resnet.py +0 -0
  182. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/facelib/utils/__init__.py +0 -0
  183. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/facelib/utils/face_restoration_helper.py +0 -0
  184. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/facelib/utils/face_utils.py +0 -0
  185. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/facelib/utils/misc.py +0 -0
  186. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/r_chainner/README.md +0 -0
  187. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/r_chainner/__init__.py +0 -0
  188. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/r_chainner/gfpganv1_clean_arch.py +0 -0
  189. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/r_chainner/model_loading.py +0 -0
  190. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/r_chainner/stylegan2_clean_arch.py +0 -0
  191. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/facerestore_cf/r_chainner/types.py +0 -0
  192. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/node_controlnet_model_loader.py +0 -0
  193. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/node_image_loader.py +0 -0
  194. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/node_image_output.py +0 -0
  195. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/node_lora_loader.py +0 -0
  196. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/node_model_loader.py +0 -0
  197. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/node_stage_io.py +0 -0
  198. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/node_upscale_model_loader.py +0 -0
  199. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/nodes/node_v3_canary.py +0 -0
  200. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipeline/__init__.py +0 -0
  201. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipeline/constants.py +0 -0
  202. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipeline/context.py +0 -0
  203. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipeline/definition.py +0 -0
  204. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipeline/families/__init__.py +0 -0
  205. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipeline/families/image.py +0 -0
  206. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipeline/families/image_gen/__init__.py +0 -0
  207. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipeline/families/image_gen/baselines.py +0 -0
  208. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipeline/families/image_gen/bindings.py +0 -0
  209. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipeline/families/image_gen/cascade.py +0 -0
  210. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipeline/families/image_gen/controlnet.py +0 -0
  211. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipeline/families/image_gen/creative_upscale.py +0 -0
  212. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipeline/families/image_gen/features.py +0 -0
  213. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipeline/families/image_gen/flux.py +0 -0
  214. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipeline/families/image_gen/qr_code.py +0 -0
  215. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipeline/families/image_gen/qwen.py +0 -0
  216. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipeline/families/image_gen/stable_diffusion.py +0 -0
  217. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipeline/families/image_gen/steps.py +0 -0
  218. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipeline/families/image_gen/z_image.py +0 -0
  219. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipeline/graph.py +0 -0
  220. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipeline/identifiers.py +0 -0
  221. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipeline/node_schemas.py +0 -0
  222. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipeline/patches.py +0 -0
  223. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipeline/payload.py +0 -0
  224. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipeline/registry.py +0 -0
  225. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipeline/resolution.py +0 -0
  226. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipeline/sdk_adapter.py +0 -0
  227. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipeline_designs/pipeline_controlnet.json +0 -0
  228. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipeline_designs/pipeline_controlnet_annotator.json +0 -0
  229. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipeline_designs/pipeline_controlnet_hires_fix.json +0 -0
  230. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipeline_designs/pipeline_flux.json +0 -0
  231. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipeline_designs/pipeline_image_upscale.json +0 -0
  232. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipeline_designs/pipeline_qr_code.json +0 -0
  233. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipeline_designs/pipeline_qwen.json +0 -0
  234. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipeline_designs/pipeline_stable_cascade.json +0 -0
  235. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipeline_designs/pipeline_stable_cascade_2pass.json +0 -0
  236. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipeline_designs/pipeline_stable_cascade_remix.json +0 -0
  237. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipeline_designs/pipeline_stable_diffusion.json +0 -0
  238. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipeline_designs/pipeline_stable_diffusion_hires_fix.json +0 -0
  239. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipeline_designs/pipeline_stable_diffusion_img2img_mask.json +0 -0
  240. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipeline_designs/pipeline_stable_diffusion_paint.json +0 -0
  241. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipelines/pipeline_controlnet.json +0 -0
  242. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipelines/pipeline_controlnet_annotator.json +0 -0
  243. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipelines/pipeline_controlnet_hires_fix.json +0 -0
  244. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipelines/pipeline_creative_upscale.json +0 -0
  245. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipelines/pipeline_flux.json +0 -0
  246. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipelines/pipeline_image_upscale.json +0 -0
  247. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipelines/pipeline_qr_code.json +0 -0
  248. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipelines/pipeline_qwen.json +0 -0
  249. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipelines/pipeline_stable_cascade.json +0 -0
  250. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipelines/pipeline_stable_cascade_2pass.json +0 -0
  251. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipelines/pipeline_stable_cascade_remix.json +0 -0
  252. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipelines/pipeline_stable_diffusion.json +0 -0
  253. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipelines/pipeline_stable_diffusion_hires_fix.json +0 -0
  254. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipelines/pipeline_stable_diffusion_img2img_mask.json +0 -0
  255. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipelines/pipeline_stable_diffusion_paint.json +0 -0
  256. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pipelines/pipeline_z_image.json +0 -0
  257. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/preload.py +0 -0
  258. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/profiling.py +0 -0
  259. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/py.typed +0 -0
  260. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pyinstaller_hooks/__init__.py +0 -0
  261. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/pyinstaller_hooks/hook-hordelib.horde.py +0 -0
  262. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/safety.py +0 -0
  263. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/safety_checker.py +0 -0
  264. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/settings.py +0 -0
  265. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/shared_model_manager.py +0 -0
  266. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/train.py +0 -0
  267. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/utils/__init__.py +0 -0
  268. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/utils/device_pinning.py +0 -0
  269. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/utils/distance.py +0 -0
  270. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/utils/dynamicprompt.py +0 -0
  271. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/utils/fd_limits.py +0 -0
  272. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/utils/gpuinfo.py +0 -0
  273. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/utils/image_utils.py +0 -0
  274. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/utils/ioredirect.py +0 -0
  275. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/utils/logger.py +0 -0
  276. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/utils/memory_trim.py +0 -0
  277. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/utils/nvml.py +0 -0
  278. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/utils/optional_deps.py +0 -0
  279. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/utils/sanitizer.py +0 -0
  280. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/utils/switch.py +0 -0
  281. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/utils/torch_build.py +0 -0
  282. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/utils/torch_memory.py +0 -0
  283. {horde_engine-7.2.2 → horde_engine-7.2.4}/hordelib/vram_planning.py +0 -0
  284. {horde_engine-7.2.2 → horde_engine-7.2.4}/pyproject.toml +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: horde-engine
3
- Version: 7.2.2
3
+ Version: 7.2.4
4
4
  Summary: A wrapper around ComfyUI to allow use by AI Horde.
5
5
  Project-URL: Homepage, https://github.com/Haidra-Org/hordelib
6
6
  Project-URL: Bug Tracker, https://github.com/Haidra-Org/hordelib/issues
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '7.2.2'
22
- __version_tuple__ = version_tuple = (7, 2, 2)
21
+ __version__ = version = '7.2.4'
22
+ __version_tuple__ = version_tuple = (7, 2, 4)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -263,9 +263,14 @@ class HordeLib:
263
263
  tuple[OutputSpec, ...],
264
264
  ]:
265
265
  """The shared typed tail of the pipeline flow: resize -> resolve -> select -> materialize."""
266
- from hordelib.pipeline.horde_compat import enforce_schedule_constraints, resize_sources_to_request
266
+ from hordelib.pipeline.horde_compat import (
267
+ disable_hires_fix_for_masked_img2img,
268
+ enforce_schedule_constraints,
269
+ resize_sources_to_request,
270
+ )
267
271
  from hordelib.pipeline.resolution import resolve_image_generation
268
272
 
273
+ typed = disable_hires_fix_for_masked_img2img(typed)
269
274
  typed = resize_sources_to_request(typed)
270
275
  typed, context, resolution_faults = resolve_image_generation(typed, context)
271
276
  typed, schedule_faults = enforce_schedule_constraints(typed)
@@ -789,13 +794,14 @@ class HordeLib:
789
794
  strength=payload.get("facefixer_strength", 1.0),
790
795
  image_index=img_idx,
791
796
  ):
792
- # facefixer_strength is deliberately not forwarded: the
793
- # legacy mapping never wired it to codeformer_fidelity, so
794
- # honoring it would change existing job output.
797
+ # facefixer_strength blends the restored image back over the
798
+ # pre-fix one; absent, it is 1.0 (full restoration), which is
799
+ # what the graph produced before the knob was honored.
795
800
  image_ret = self.post_process(
796
801
  FacefixPayload(
797
802
  model=post_processing,
798
803
  source_image=final_image,
804
+ strength=payload.get("facefixer_strength", 1.0),
799
805
  ),
800
806
  )
801
807
  single_image_faults += image_ret.faults
@@ -1002,13 +1008,18 @@ class HordeLib:
1002
1008
  RuntimeError: If the model cannot be resolved (unknown to the reference or
1003
1009
  missing from disk).
1004
1010
  """
1005
- from hordelib.pipeline.horde_compat import apply_model_compat, resize_sources_to_request
1011
+ from hordelib.pipeline.horde_compat import (
1012
+ apply_model_compat,
1013
+ disable_hires_fix_for_masked_img2img,
1014
+ resize_sources_to_request,
1015
+ )
1006
1016
  from hordelib.pipeline.resolution import resolve_image_generation, resolve_image_model
1007
1017
  from hordelib.pipeline.sdk_adapter import to_image_gen_payload
1008
1018
 
1009
1019
  typed, _conversion_faults = to_image_gen_payload(params)
1010
1020
  context = resolve_image_model(typed.model)
1011
1021
  typed, _compat_faults = apply_model_compat(typed, context)
1022
+ typed = disable_hires_fix_for_masked_img2img(typed)
1012
1023
  typed = resize_sources_to_request(typed)
1013
1024
  typed, context, _resolution_faults = resolve_image_generation(typed, context)
1014
1025
 
@@ -1110,14 +1121,15 @@ class HordeLib:
1110
1121
  def image_facefix(self, payload: dict) -> ResultingImageReturn:
1111
1122
  """Fix faces in an image (legacy dict surface; prefer :meth:`post_process`).
1112
1123
 
1113
- ``facefixer_strength`` in the dict is ignored, as it always has been: the legacy
1114
- parameter mapping never wired it to the graph's ``codeformer_fidelity`` input. Typed
1115
- callers can set :attr:`FacefixPayload.fidelity` explicitly.
1124
+ ``facefixer_strength`` blends the restored image back over the input (1.0, the default when
1125
+ absent, is full restoration). CodeFormer's ``codeformer_fidelity`` is a separate knob with
1126
+ different meaning; typed callers set it through :attr:`FacefixPayload.fidelity`.
1116
1127
  """
1117
1128
  logger.debug("image_facefix called")
1118
1129
  return self.post_process(
1119
1130
  FacefixPayload(
1120
1131
  model=payload["model"],
1121
1132
  source_image=payload["source_image"],
1133
+ strength=payload.get("facefixer_strength", 1.0),
1122
1134
  ),
1123
1135
  )
@@ -199,6 +199,15 @@
199
199
  ],
200
200
  "optional": []
201
201
  },
202
+ "ImageBlend": {
203
+ "required": [
204
+ "image1",
205
+ "image2",
206
+ "blend_factor",
207
+ "blend_mode"
208
+ ],
209
+ "optional": []
210
+ },
202
211
  "ImageBlur": {
203
212
  "required": [
204
213
  "image",
@@ -66,6 +66,11 @@ IMAGE_FACEFIX_DEFINITION: PostProcessingDefinition = PipelineDefinition(
66
66
  bindings=(
67
67
  *node("image_loader", "HordeImageLoader").bind(image="source_image"),
68
68
  *node("face_restore_with_model", "FaceRestoreCFWithModel").bind(codeformer_fidelity="fidelity"),
69
+ # The restorer replaces every detected face outright, so requested strength is honored as a
70
+ # blend of its output back over the untouched input: at 1.0 the blend returns the restored
71
+ # image bit-for-bit, at 0.0 the original. Doing it in the graph keeps one image encode and
72
+ # works for GFPGAN too, whose architecture takes no strength of its own.
73
+ *node("facefix_blend", "ImageBlend").bind(blend_factor="strength"),
69
74
  ),
70
75
  outputs=(OutputSpec(node="output_image"),),
71
76
  patch_steps=(_apply_model_file,),
@@ -24,6 +24,7 @@ from hordelib.pipeline.constants import (
24
24
  )
25
25
  from hordelib.pipeline.context import ModelContext
26
26
  from hordelib.pipeline.families.image_gen.baselines import align_your_steps_model_type
27
+ from hordelib.pipeline.families.image_gen.features import IMG2IMG_MASK
27
28
  from hordelib.pipeline.payload import ImageGenPayload
28
29
  from hordelib.utils.image_utils import ImageUtils
29
30
 
@@ -273,6 +274,21 @@ def apply_model_compat(
273
274
  return payload, faults
274
275
 
275
276
 
277
+ def disable_hires_fix_for_masked_img2img(payload: ImageGenPayload) -> ImageGenPayload:
278
+ """Disable hires fix when img2img carries a mask (explicit, or an alpha channel acting as one).
279
+
280
+ The masked img2img graph is single-pass, so the hires-fix first-pass shrink would become the
281
+ final output size. Masked payloads with a controlnet keep hires fix: the controlnet hires
282
+ graph has a real second pass. Must run before :func:`resize_sources_to_request`, which merges
283
+ the mask into the source alpha channel and makes every masked payload look alpha-masked.
284
+ """
285
+ if not payload.hires_fix or payload.control_type or not IMG2IMG_MASK.is_set(payload):
286
+ return payload
287
+ payload = payload.model_copy(deep=False)
288
+ payload.hires_fix = False
289
+ return payload
290
+
291
+
276
292
  def resize_sources_to_request(payload: ImageGenPayload) -> ImageGenPayload:
277
293
  """Ensure the source image and mask match the requested generation size.
278
294
 
@@ -61,7 +61,15 @@ class FacefixPayload(_PostProcessingPayloadBase):
61
61
 
62
62
  model: str
63
63
  fidelity: float = 0.5
64
- """CodeFormer fidelity weight (0 = strongest restoration, 1 = closest to input)."""
64
+ """CodeFormer fidelity weight (0 = strongest restoration, 1 = closest to input).
65
+
66
+ This is CodeFormer-specific and unrelated to :attr:`strength`: it steers the restoration
67
+ itself (identity versus quality) and GFPGAN's architecture ignores it entirely."""
68
+ strength: float = 1.0
69
+ """How much of the restored image is blended back over the input (1 = fully restored, 0 = untouched).
70
+
71
+ Fixer-agnostic by construction: the blend happens in image space after the restorer runs, so it
72
+ means the same thing for GFPGAN (which has no strength input of its own) and CodeFormers."""
65
73
 
66
74
  @field_validator("fidelity", mode="before")
67
75
  @classmethod
@@ -72,6 +80,15 @@ class FacefixPayload(_PostProcessingPayloadBase):
72
80
  return 0.5
73
81
  return min(max(value, 0.0), 1.0)
74
82
 
83
+ @field_validator("strength", mode="before")
84
+ @classmethod
85
+ def _clamp_strength(cls, value: Any) -> float:
86
+ try:
87
+ value = float(value)
88
+ except (TypeError, ValueError):
89
+ return 1.0
90
+ return min(max(value, 0.0), 1.0)
91
+
75
92
 
76
93
  class StripBackgroundPayload(_PostProcessingPayloadBase):
77
94
  """Remove the image background (pure-Python rembg; not a ComfyUI graph)."""
@@ -90,10 +107,10 @@ def post_processing_payload_from_horde_dict(data: dict[str, Any]) -> PostProcess
90
107
  ``model``, ``source_image``, and (for upscales) optional ``width``/``height`` meaning
91
108
  "shrink the result back to this size".
92
109
 
93
- Note: ``facefixer_strength`` is deliberately *not* mapped onto ``FacefixPayload.fidelity``
94
- — the legacy path silently ignored it (the graph's hardcoded 0.5 always applied), and
95
- honoring it here would change output images for existing callers. Typed callers can set
96
- ``fidelity`` explicitly.
110
+ ``facefixer_strength`` maps onto ``FacefixPayload.strength`` (the blend of the restored image
111
+ over the input), not onto ``fidelity``: fidelity is CodeFormer's identity/quality tradeoff and
112
+ means nothing to GFPGAN. Absent, strength defaults to 1.0, which is full restoration and leaves
113
+ output identical to a request that never named the knob.
97
114
  """
98
115
  model = data.get("model")
99
116
  if not isinstance(model, str):
@@ -113,7 +130,11 @@ def post_processing_payload_from_horde_dict(data: dict[str, Any]) -> PostProcess
113
130
  rescale_height=data.get("height"),
114
131
  )
115
132
  case PostProcessorKind.facefixer:
116
- return FacefixPayload(model=model, source_image=source_image)
133
+ return FacefixPayload(
134
+ model=model,
135
+ source_image=source_image,
136
+ strength=data.get("facefixer_strength", 1.0),
137
+ )
117
138
  case PostProcessorKind.strip_background:
118
139
  return StripBackgroundPayload(source_image=source_image)
119
140
  case _:
@@ -1,6 +1,6 @@
1
1
  {
2
- "last_node_id": 11,
3
- "last_link_id": 14,
2
+ "last_node_id": 12,
3
+ "last_link_id": 16,
4
4
  "nodes": [
5
5
  {
6
6
  "id": 6,
@@ -14,13 +14,13 @@
14
14
  "1": 416.33331298828125
15
15
  },
16
16
  "flags": {},
17
- "order": 3,
17
+ "order": 4,
18
18
  "mode": 0,
19
19
  "inputs": [
20
20
  {
21
21
  "name": "images",
22
22
  "type": "IMAGE",
23
- "link": 14
23
+ "link": 16
24
24
  }
25
25
  ],
26
26
  "title": "output_image",
@@ -81,7 +81,8 @@
81
81
  "name": "IMAGE",
82
82
  "type": "IMAGE",
83
83
  "links": [
84
- 13
84
+ 13,
85
+ 15
85
86
  ],
86
87
  "slot_index": 0
87
88
  },
@@ -145,6 +146,52 @@
145
146
  "retinaface_resnet50",
146
147
  0.5
147
148
  ]
149
+ },
150
+ {
151
+ "id": 12,
152
+ "type": "ImageBlend",
153
+ "pos": [
154
+ 397,
155
+ 331
156
+ ],
157
+ "size": {
158
+ "0": 315,
159
+ "1": 102
160
+ },
161
+ "flags": {},
162
+ "order": 3,
163
+ "mode": 0,
164
+ "inputs": [
165
+ {
166
+ "name": "image1",
167
+ "type": "IMAGE",
168
+ "link": 15
169
+ },
170
+ {
171
+ "name": "image2",
172
+ "type": "IMAGE",
173
+ "link": 14
174
+ }
175
+ ],
176
+ "outputs": [
177
+ {
178
+ "name": "IMAGE",
179
+ "type": "IMAGE",
180
+ "links": [
181
+ 16
182
+ ],
183
+ "shape": 3,
184
+ "slot_index": 0
185
+ }
186
+ ],
187
+ "title": "facefix_blend",
188
+ "properties": {
189
+ "Node name for S&R": "ImageBlend"
190
+ },
191
+ "widgets_values": [
192
+ 1,
193
+ "normal"
194
+ ]
148
195
  }
149
196
  ],
150
197
  "links": [
@@ -168,6 +215,22 @@
168
215
  14,
169
216
  11,
170
217
  0,
218
+ 12,
219
+ 1,
220
+ "IMAGE"
221
+ ],
222
+ [
223
+ 15,
224
+ 1,
225
+ 0,
226
+ 12,
227
+ 0,
228
+ "IMAGE"
229
+ ],
230
+ [
231
+ 16,
232
+ 12,
233
+ 0,
171
234
  6,
172
235
  0,
173
236
  "IMAGE"
@@ -13,7 +13,7 @@
13
13
  "inputs": {
14
14
  "filename_prefix": "ComfyUI",
15
15
  "images": [
16
- "11",
16
+ "12",
17
17
  0
18
18
  ]
19
19
  },
@@ -48,5 +48,23 @@
48
48
  "_meta": {
49
49
  "title": "face_restore_with_model"
50
50
  }
51
+ },
52
+ "12": {
53
+ "inputs": {
54
+ "blend_factor": 1,
55
+ "blend_mode": "normal",
56
+ "image1": [
57
+ "1",
58
+ 0
59
+ ],
60
+ "image2": [
61
+ "11",
62
+ 0
63
+ ]
64
+ },
65
+ "class_type": "ImageBlend",
66
+ "_meta": {
67
+ "title": "facefix_blend"
68
+ }
51
69
  }
52
70
  }
File without changes
File without changes
File without changes