gitextract_r6aji11h/ ├── .ci/ │ ├── update_windows/ │ │ ├── update.py │ │ ├── update_comfyui.bat │ │ └── update_comfyui_stable.bat │ ├── windows_amd_base_files/ │ │ ├── README_VERY_IMPORTANT.txt │ │ ├── run_amd_gpu.bat │ │ └── run_amd_gpu_disable_smart_memory.bat │ ├── windows_nightly_base_files/ │ │ └── run_nvidia_gpu_fast.bat │ └── windows_nvidia_base_files/ │ ├── README_VERY_IMPORTANT.txt │ ├── advanced/ │ │ └── run_nvidia_gpu_disable_api_nodes.bat │ ├── run_cpu.bat │ ├── run_nvidia_gpu.bat │ └── run_nvidia_gpu_fast_fp16_accumulation.bat ├── .coderabbit.yaml ├── .gitattributes ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug-report.yml │ │ ├── config.yml │ │ ├── feature-request.yml │ │ └── user-support.yml │ ├── PULL_REQUEST_TEMPLATE/ │ │ └── api-node.md │ ├── scripts/ │ │ └── check-ai-co-authors.sh │ └── workflows/ │ ├── api-node-template.yml │ ├── check-ai-co-authors.yml │ ├── check-line-endings.yml │ ├── pullrequest-ci-run.yml │ ├── release-stable-all.yml │ ├── release-webhook.yml │ ├── ruff.yml │ ├── stable-release.yml │ ├── stale-issues.yml │ ├── test-build.yml │ ├── test-ci.yml │ ├── test-execution.yml │ ├── test-launch.yml │ ├── test-unit.yml │ ├── update-api-stubs.yml │ ├── update-ci-container.yml │ ├── update-version.yml │ ├── windows_release_dependencies.yml │ ├── windows_release_dependencies_manual.yml │ ├── windows_release_nightly_pytorch.yml │ └── windows_release_package.yml ├── .gitignore ├── CODEOWNERS ├── CONTRIBUTING.md ├── LICENSE ├── QUANTIZATION.md ├── README.md ├── alembic.ini ├── alembic_db/ │ ├── README.md │ ├── env.py │ ├── script.py.mako │ └── versions/ │ ├── 0001_assets.py │ ├── 0002_merge_to_asset_references.py │ └── 0003_add_metadata_job_id.py ├── api_server/ │ ├── __init__.py │ ├── routes/ │ │ ├── __init__.py │ │ └── internal/ │ │ ├── README.md │ │ ├── __init__.py │ │ └── internal_routes.py │ ├── services/ │ │ ├── __init__.py │ │ └── terminal_service.py │ └── utils/ │ └── file_operations.py ├── app/ │ ├── __init__.py │ ├── app_settings.py │ ├── assets/ │ │ ├── api/ │ │ │ ├── routes.py │ │ │ ├── schemas_in.py │ │ │ ├── schemas_out.py │ │ │ └── upload.py │ │ ├── database/ │ │ │ ├── models.py │ │ │ └── queries/ │ │ │ ├── __init__.py │ │ │ ├── asset.py │ │ │ ├── asset_reference.py │ │ │ ├── common.py │ │ │ └── tags.py │ │ ├── helpers.py │ │ ├── scanner.py │ │ ├── seeder.py │ │ └── services/ │ │ ├── __init__.py │ │ ├── asset_management.py │ │ ├── bulk_ingest.py │ │ ├── file_utils.py │ │ ├── hashing.py │ │ ├── ingest.py │ │ ├── metadata_extract.py │ │ ├── path_utils.py │ │ ├── schemas.py │ │ └── tagging.py │ ├── custom_node_manager.py │ ├── database/ │ │ ├── db.py │ │ └── models.py │ ├── frontend_management.py │ ├── logger.py │ ├── model_manager.py │ ├── node_replace_manager.py │ ├── subgraph_manager.py │ └── user_manager.py ├── blueprints/ │ ├── .glsl/ │ │ ├── Brightness_and_Contrast_1.frag │ │ ├── Chromatic_Aberration_16.frag │ │ ├── Color_Adjustment_15.frag │ │ ├── Edge-Preserving_Blur_128.frag │ │ ├── Film_Grain_15.frag │ │ ├── Glow_30.frag │ │ ├── Hue_and_Saturation_1.frag │ │ ├── Image_Blur_1.frag │ │ ├── Image_Channels_23.frag │ │ ├── Image_Levels_1.frag │ │ ├── README.md │ │ ├── Sharpen_23.frag │ │ ├── Unsharp_Mask_26.frag │ │ └── update_blueprints.py │ ├── Brightness and Contrast.json │ ├── Canny to Image (Z-Image-Turbo).json │ ├── Canny to Video (LTX 2.0).json │ ├── Chromatic Aberration.json │ ├── Color Adjustment.json │ ├── Depth to Image (Z-Image-Turbo).json │ ├── Depth to Video (ltx 2.0).json │ ├── Edge-Preserving Blur.json │ ├── Film Grain.json │ ├── Glow.json │ ├── Hue and Saturation.json │ ├── Image Blur.json │ ├── Image Captioning (gemini).json │ ├── Image Channels.json │ ├── Image Edit (Flux.2 Klein 4B).json │ ├── Image Edit (Qwen 2511).json │ ├── Image Inpainting (Qwen-image).json │ ├── Image Levels.json │ ├── Image Outpainting (Qwen-Image).json │ ├── Image Upscale(Z-image-Turbo).json │ ├── Image to Depth Map (Lotus).json │ ├── Image to Layers(Qwen-Image Layered).json │ ├── Image to Model (Hunyuan3d 2.1).json │ ├── Image to Video (Wan 2.2).json │ ├── Pose to Image (Z-Image-Turbo).json │ ├── Pose to Video (LTX 2.0).json │ ├── Prompt Enhance.json │ ├── Sharpen.json │ ├── Text to Audio (ACE-Step 1.5).json │ ├── Text to Image (Z-Image-Turbo).json │ ├── Text to Video (Wan 2.2).json │ ├── Unsharp Mask.json │ ├── Video Captioning (Gemini).json │ ├── Video Inpaint(Wan2.1 VACE).json │ ├── Video Stitch.json │ ├── Video Upscale(GAN x4).json │ └── put_blueprints_here ├── comfy/ │ ├── audio_encoders/ │ │ ├── audio_encoders.py │ │ ├── wav2vec2.py │ │ └── whisper.py │ ├── cldm/ │ │ ├── cldm.py │ │ ├── control_types.py │ │ ├── dit_embedder.py │ │ └── mmdit.py │ ├── cli_args.py │ ├── clip_config_bigg.json │ ├── clip_model.py │ ├── clip_vision.py │ ├── clip_vision_config_g.json │ ├── clip_vision_config_h.json │ ├── clip_vision_config_vitl.json │ ├── clip_vision_config_vitl_336.json │ ├── clip_vision_config_vitl_336_llava.json │ ├── clip_vision_siglip2_base_naflex.json │ ├── clip_vision_siglip_384.json │ ├── clip_vision_siglip_512.json │ ├── comfy_types/ │ │ ├── README.md │ │ ├── __init__.py │ │ ├── examples/ │ │ │ └── example_nodes.py │ │ └── node_typing.py │ ├── conds.py │ ├── context_windows.py │ ├── controlnet.py │ ├── diffusers_convert.py │ ├── diffusers_load.py │ ├── extra_samplers/ │ │ └── uni_pc.py │ ├── float.py │ ├── gligen.py │ ├── hooks.py │ ├── image_encoders/ │ │ ├── dino2.py │ │ ├── dino2_giant.json │ │ └── dino2_large.json │ ├── k_diffusion/ │ │ ├── deis.py │ │ ├── sa_solver.py │ │ ├── sampling.py │ │ └── utils.py │ ├── latent_formats.py │ ├── ldm/ │ │ ├── ace/ │ │ │ ├── ace_step15.py │ │ │ ├── attention.py │ │ │ ├── lyric_encoder.py │ │ │ ├── model.py │ │ │ └── vae/ │ │ │ ├── autoencoder_dc.py │ │ │ ├── music_dcae_pipeline.py │ │ │ ├── music_log_mel.py │ │ │ └── music_vocoder.py │ │ ├── anima/ │ │ │ └── model.py │ │ ├── audio/ │ │ │ ├── autoencoder.py │ │ │ ├── dit.py │ │ │ └── embedders.py │ │ ├── aura/ │ │ │ └── mmdit.py │ │ ├── cascade/ │ │ │ ├── common.py │ │ │ ├── controlnet.py │ │ │ ├── stage_a.py │ │ │ ├── stage_b.py │ │ │ ├── stage_c.py │ │ │ └── stage_c_coder.py │ │ ├── chroma/ │ │ │ ├── layers.py │ │ │ └── model.py │ │ ├── chroma_radiance/ │ │ │ ├── layers.py │ │ │ └── model.py │ │ ├── common_dit.py │ │ ├── cosmos/ │ │ │ ├── blocks.py │ │ │ ├── cosmos_tokenizer/ │ │ │ │ ├── layers3d.py │ │ │ │ ├── patching.py │ │ │ │ └── utils.py │ │ │ ├── model.py │ │ │ ├── position_embedding.py │ │ │ ├── predict2.py │ │ │ └── vae.py │ │ ├── flux/ │ │ │ ├── controlnet.py │ │ │ ├── layers.py │ │ │ ├── math.py │ │ │ ├── model.py │ │ │ └── redux.py │ │ ├── genmo/ │ │ │ ├── joint_model/ │ │ │ │ ├── asymm_models_joint.py │ │ │ │ ├── layers.py │ │ │ │ ├── rope_mixed.py │ │ │ │ ├── temporal_rope.py │ │ │ │ └── utils.py │ │ │ └── vae/ │ │ │ └── model.py │ │ ├── hidream/ │ │ │ └── model.py │ │ ├── hunyuan3d/ │ │ │ ├── model.py │ │ │ └── vae.py │ │ ├── hunyuan3dv2_1/ │ │ │ └── hunyuandit.py │ │ ├── hunyuan_video/ │ │ │ ├── model.py │ │ │ ├── upsampler.py │ │ │ ├── vae.py │ │ │ └── vae_refiner.py │ │ ├── hydit/ │ │ │ ├── attn_layers.py │ │ │ ├── controlnet.py │ │ │ ├── models.py │ │ │ ├── poolers.py │ │ │ └── posemb_layers.py │ │ ├── kandinsky5/ │ │ │ └── model.py │ │ ├── lightricks/ │ │ │ ├── av_model.py │ │ │ ├── embeddings_connector.py │ │ │ ├── latent_upsampler.py │ │ │ ├── model.py │ │ │ ├── symmetric_patchifier.py │ │ │ ├── vae/ │ │ │ │ ├── audio_vae.py │ │ │ │ ├── causal_audio_autoencoder.py │ │ │ │ ├── causal_conv3d.py │ │ │ │ ├── causal_video_autoencoder.py │ │ │ │ ├── conv_nd_factory.py │ │ │ │ ├── dual_conv3d.py │ │ │ │ └── pixel_norm.py │ │ │ └── vocoders/ │ │ │ └── vocoder.py │ │ ├── lumina/ │ │ │ ├── controlnet.py │ │ │ └── model.py │ │ ├── mmaudio/ │ │ │ └── vae/ │ │ │ ├── __init__.py │ │ │ ├── activations.py │ │ │ ├── alias_free_torch.py │ │ │ ├── autoencoder.py │ │ │ ├── bigvgan.py │ │ │ ├── distributions.py │ │ │ ├── vae.py │ │ │ └── vae_modules.py │ │ ├── models/ │ │ │ └── autoencoder.py │ │ ├── modules/ │ │ │ ├── attention.py │ │ │ ├── diffusionmodules/ │ │ │ │ ├── __init__.py │ │ │ │ ├── mmdit.py │ │ │ │ ├── model.py │ │ │ │ ├── openaimodel.py │ │ │ │ ├── upscaling.py │ │ │ │ └── util.py │ │ │ ├── distributions/ │ │ │ │ ├── __init__.py │ │ │ │ └── distributions.py │ │ │ ├── ema.py │ │ │ ├── encoders/ │ │ │ │ ├── __init__.py │ │ │ │ └── noise_aug_modules.py │ │ │ ├── sdpose.py │ │ │ ├── sub_quadratic_attention.py │ │ │ └── temporal_ae.py │ │ ├── omnigen/ │ │ │ └── omnigen2.py │ │ ├── pixart/ │ │ │ ├── blocks.py │ │ │ └── pixartms.py │ │ ├── qwen_image/ │ │ │ ├── controlnet.py │ │ │ └── model.py │ │ ├── util.py │ │ └── wan/ │ │ ├── model.py │ │ ├── model_animate.py │ │ ├── model_multitalk.py │ │ ├── vae.py │ │ └── vae2_2.py │ ├── lora.py │ ├── lora_convert.py │ ├── memory_management.py │ ├── model_base.py │ ├── model_detection.py │ ├── model_management.py │ ├── model_patcher.py │ ├── model_sampling.py │ ├── nested_tensor.py │ ├── ops.py │ ├── options.py │ ├── patcher_extension.py │ ├── pinned_memory.py │ ├── pixel_space_convert.py │ ├── quant_ops.py │ ├── rmsnorm.py │ ├── sample.py │ ├── sampler_helpers.py │ ├── samplers.py │ ├── sd.py │ ├── sd1_clip.py │ ├── sd1_clip_config.json │ ├── sd1_tokenizer/ │ │ ├── merges.txt │ │ ├── special_tokens_map.json │ │ ├── tokenizer_config.json │ │ └── vocab.json │ ├── sdxl_clip.py │ ├── supported_models.py │ ├── supported_models_base.py │ ├── t2i_adapter/ │ │ └── adapter.py │ ├── taesd/ │ │ ├── taehv.py │ │ └── taesd.py │ ├── text_encoders/ │ │ ├── ace.py │ │ ├── ace15.py │ │ ├── ace_lyrics_tokenizer/ │ │ │ └── vocab.json │ │ ├── ace_text_cleaners.py │ │ ├── anima.py │ │ ├── aura_t5.py │ │ ├── bert.py │ │ ├── byt5_config_small_glyph.json │ │ ├── byt5_tokenizer/ │ │ │ ├── added_tokens.json │ │ │ ├── special_tokens_map.json │ │ │ └── tokenizer_config.json │ │ ├── cosmos.py │ │ ├── flux.py │ │ ├── genmo.py │ │ ├── hidream.py │ │ ├── hunyuan_image.py │ │ ├── hunyuan_video.py │ │ ├── hydit.py │ │ ├── hydit_clip.json │ │ ├── hydit_clip_tokenizer/ │ │ │ ├── special_tokens_map.json │ │ │ ├── tokenizer_config.json │ │ │ └── vocab.txt │ │ ├── jina_clip_2.py │ │ ├── kandinsky5.py │ │ ├── llama.py │ │ ├── llama_tokenizer/ │ │ │ ├── tokenizer.json │ │ │ └── tokenizer_config.json │ │ ├── long_clipl.py │ │ ├── longcat_image.py │ │ ├── lt.py │ │ ├── lumina2.py │ │ ├── mt5_config_xl.json │ │ ├── newbie.py │ │ ├── omnigen2.py │ │ ├── ovis.py │ │ ├── pixart_t5.py │ │ ├── qwen25_tokenizer/ │ │ │ ├── merges.txt │ │ │ ├── tokenizer_config.json │ │ │ └── vocab.json │ │ ├── qwen_image.py │ │ ├── qwen_vl.py │ │ ├── sa_t5.py │ │ ├── sd2_clip.py │ │ ├── sd2_clip_config.json │ │ ├── sd3_clip.py │ │ ├── spiece_tokenizer.py │ │ ├── t5.py │ │ ├── t5_config_base.json │ │ ├── t5_config_xxl.json │ │ ├── t5_old_config_xxl.json │ │ ├── t5_pile_config_xl.json │ │ ├── t5_pile_tokenizer/ │ │ │ └── tokenizer.model │ │ ├── t5_tokenizer/ │ │ │ ├── special_tokens_map.json │ │ │ ├── tokenizer.json │ │ │ └── tokenizer_config.json │ │ ├── umt5_config_base.json │ │ ├── umt5_config_xxl.json │ │ ├── wan.py │ │ └── z_image.py │ ├── utils.py │ ├── weight_adapter/ │ │ ├── __init__.py │ │ ├── base.py │ │ ├── boft.py │ │ ├── bypass.py │ │ ├── glora.py │ │ ├── loha.py │ │ ├── lokr.py │ │ ├── lora.py │ │ └── oft.py │ └── windows.py ├── comfy_api/ │ ├── feature_flags.py │ ├── generate_api_stubs.py │ ├── input/ │ │ ├── __init__.py │ │ ├── basic_types.py │ │ └── video_types.py │ ├── input_impl/ │ │ ├── __init__.py │ │ └── video_types.py │ ├── internal/ │ │ ├── __init__.py │ │ ├── api_registry.py │ │ ├── async_to_sync.py │ │ └── singleton.py │ ├── latest/ │ │ ├── __init__.py │ │ ├── _caching.py │ │ ├── _input/ │ │ │ ├── __init__.py │ │ │ ├── basic_types.py │ │ │ └── video_types.py │ │ ├── _input_impl/ │ │ │ ├── __init__.py │ │ │ └── video_types.py │ │ ├── _io.py │ │ ├── _io_public.py │ │ ├── _ui.py │ │ ├── _ui_public.py │ │ ├── _util/ │ │ │ ├── __init__.py │ │ │ ├── geometry_types.py │ │ │ ├── image_types.py │ │ │ └── video_types.py │ │ └── generated/ │ │ └── ComfyAPISyncStub.pyi │ ├── torch_helpers/ │ │ ├── __init__.py │ │ └── torch_compile.py │ ├── util/ │ │ ├── __init__.py │ │ └── video_types.py │ ├── util.py │ ├── v0_0_1/ │ │ ├── __init__.py │ │ └── generated/ │ │ └── ComfyAPISyncStub.pyi │ ├── v0_0_2/ │ │ ├── __init__.py │ │ └── generated/ │ │ └── ComfyAPISyncStub.pyi │ └── version_list.py ├── comfy_api_nodes/ │ ├── __init__.py │ ├── apis/ │ │ ├── __init__.py │ │ ├── bfl.py │ │ ├── bria.py │ │ ├── bytedance.py │ │ ├── elevenlabs.py │ │ ├── gemini.py │ │ ├── grok.py │ │ ├── hitpaw.py │ │ ├── hunyuan3d.py │ │ ├── ideogram.py │ │ ├── kling.py │ │ ├── luma.py │ │ ├── magnific.py │ │ ├── meshy.py │ │ ├── minimax.py │ │ ├── moonvalley.py │ │ ├── openai.py │ │ ├── pixverse.py │ │ ├── recraft.py │ │ ├── reve.py │ │ ├── rodin.py │ │ ├── runway.py │ │ ├── stability.py │ │ ├── topaz.py │ │ ├── tripo.py │ │ ├── veo.py │ │ ├── vidu.py │ │ └── wavespeed.py │ ├── nodes_bfl.py │ ├── nodes_bria.py │ ├── nodes_bytedance.py │ ├── nodes_elevenlabs.py │ ├── nodes_gemini.py │ ├── nodes_grok.py │ ├── nodes_hitpaw.py │ ├── nodes_hunyuan3d.py │ ├── nodes_ideogram.py │ ├── nodes_kling.py │ ├── nodes_ltxv.py │ ├── nodes_luma.py │ ├── nodes_magnific.py │ ├── nodes_meshy.py │ ├── nodes_minimax.py │ ├── nodes_moonvalley.py │ ├── nodes_openai.py │ ├── nodes_pixverse.py │ ├── nodes_recraft.py │ ├── nodes_reve.py │ ├── nodes_rodin.py │ ├── nodes_runway.py │ ├── nodes_sora.py │ ├── nodes_stability.py │ ├── nodes_topaz.py │ ├── nodes_tripo.py │ ├── nodes_veo2.py │ ├── nodes_vidu.py │ ├── nodes_wan.py │ ├── nodes_wavespeed.py │ └── util/ │ ├── __init__.py │ ├── _helpers.py │ ├── client.py │ ├── common_exceptions.py │ ├── conversions.py │ ├── download_helpers.py │ ├── request_logger.py │ ├── upload_helpers.py │ └── validation_utils.py ├── comfy_config/ │ ├── config_parser.py │ └── types.py ├── comfy_execution/ │ ├── cache_provider.py │ ├── caching.py │ ├── graph.py │ ├── graph_utils.py │ ├── jobs.py │ ├── progress.py │ ├── utils.py │ └── validation.py ├── comfy_extras/ │ ├── chainner_models/ │ │ └── model_loading.py │ ├── nodes_ace.py │ ├── nodes_advanced_samplers.py │ ├── nodes_align_your_steps.py │ ├── nodes_apg.py │ ├── nodes_attention_multiply.py │ ├── nodes_audio.py │ ├── nodes_audio_encoder.py │ ├── nodes_camera_trajectory.py │ ├── nodes_canny.py │ ├── nodes_cfg.py │ ├── nodes_chroma_radiance.py │ ├── nodes_clip_sdxl.py │ ├── nodes_color.py │ ├── nodes_compositing.py │ ├── nodes_cond.py │ ├── nodes_context_windows.py │ ├── nodes_controlnet.py │ ├── nodes_cosmos.py │ ├── nodes_custom_sampler.py │ ├── nodes_dataset.py │ ├── nodes_differential_diffusion.py │ ├── nodes_easycache.py │ ├── nodes_edit_model.py │ ├── nodes_eps.py │ ├── nodes_flux.py │ ├── nodes_freelunch.py │ ├── nodes_fresca.py │ ├── nodes_gits.py │ ├── nodes_glsl.py │ ├── nodes_hidream.py │ ├── nodes_hooks.py │ ├── nodes_hunyuan.py │ ├── nodes_hunyuan3d.py │ ├── nodes_hypernetwork.py │ ├── nodes_hypertile.py │ ├── nodes_image_compare.py │ ├── nodes_images.py │ ├── nodes_ip2p.py │ ├── nodes_kandinsky5.py │ ├── nodes_latent.py │ ├── nodes_load_3d.py │ ├── nodes_logic.py │ ├── nodes_lora_debug.py │ ├── nodes_lora_extract.py │ ├── nodes_lotus.py │ ├── nodes_lt.py │ ├── nodes_lt_audio.py │ ├── nodes_lt_upsampler.py │ ├── nodes_lumina2.py │ ├── nodes_mahiro.py │ ├── nodes_mask.py │ ├── nodes_math.py │ ├── nodes_mochi.py │ ├── nodes_model_advanced.py │ ├── nodes_model_downscale.py │ ├── nodes_model_merging.py │ ├── nodes_model_merging_model_specific.py │ ├── nodes_model_patch.py │ ├── nodes_morphology.py │ ├── nodes_nag.py │ ├── nodes_nop.py │ ├── nodes_optimalsteps.py │ ├── nodes_pag.py │ ├── nodes_painter.py │ ├── nodes_perpneg.py │ ├── nodes_photomaker.py │ ├── nodes_pixart.py │ ├── nodes_post_processing.py │ ├── nodes_preview_any.py │ ├── nodes_primitive.py │ ├── nodes_qwen.py │ ├── nodes_rebatch.py │ ├── nodes_replacements.py │ ├── nodes_resolution.py │ ├── nodes_rope.py │ ├── nodes_sag.py │ ├── nodes_sd3.py │ ├── nodes_sdpose.py │ ├── nodes_sdupscale.py │ ├── nodes_slg.py │ ├── nodes_stable3d.py │ ├── nodes_stable_cascade.py │ ├── nodes_string.py │ ├── nodes_tcfg.py │ ├── nodes_textgen.py │ ├── nodes_tomesd.py │ ├── nodes_toolkit.py │ ├── nodes_torch_compile.py │ ├── nodes_train.py │ ├── nodes_upscale_model.py │ ├── nodes_video.py │ ├── nodes_video_model.py │ ├── nodes_wan.py │ ├── nodes_wanmove.py │ ├── nodes_webcam.py │ └── nodes_zimage.py ├── comfyui_version.py ├── cuda_malloc.py ├── custom_nodes/ │ └── example_node.py.example ├── execution.py ├── extra_model_paths.yaml.example ├── folder_paths.py ├── hook_breaker_ac10a0.py ├── latent_preview.py ├── main.py ├── manager_requirements.txt ├── middleware/ │ ├── __init__.py │ └── cache_middleware.py ├── new_updater.py ├── node_helpers.py ├── nodes.py ├── protocol.py ├── pyproject.toml ├── pytest.ini ├── requirements.txt ├── script_examples/ │ ├── basic_api_example.py │ ├── websockets_api_example.py │ └── websockets_api_example_ws_images.py ├── server.py ├── tests/ │ ├── README.md │ ├── __init__.py │ ├── compare/ │ │ ├── conftest.py │ │ └── test_quality.py │ ├── conftest.py │ ├── execution/ │ │ ├── test_async_nodes.py │ │ ├── test_execution.py │ │ ├── test_jobs.py │ │ ├── test_preview_method.py │ │ ├── test_progress_isolation.py │ │ ├── test_public_api.py │ │ └── testing_nodes/ │ │ └── testing-pack/ │ │ ├── __init__.py │ │ ├── api_test_nodes.py │ │ ├── async_test_nodes.py │ │ ├── conditions.py │ │ ├── flow_control.py │ │ ├── specific_tests.py │ │ ├── stubs.py │ │ ├── tools.py │ │ └── util.py │ └── inference/ │ ├── __init__.py │ ├── graphs/ │ │ └── default_graph_sdxl1_0.json │ └── test_inference.py ├── tests-unit/ │ ├── README.md │ ├── app_test/ │ │ ├── __init__.py │ │ ├── custom_node_manager_test.py │ │ ├── frontend_manager_test.py │ │ ├── model_manager_test.py │ │ ├── test_migrations.py │ │ └── user_manager_system_user_test.py │ ├── assets_test/ │ │ ├── conftest.py │ │ ├── helpers.py │ │ ├── queries/ │ │ │ ├── conftest.py │ │ │ ├── test_asset.py │ │ │ ├── test_asset_info.py │ │ │ ├── test_cache_state.py │ │ │ ├── test_metadata.py │ │ │ └── test_tags.py │ │ ├── services/ │ │ │ ├── __init__.py │ │ │ ├── conftest.py │ │ │ ├── test_asset_management.py │ │ │ ├── test_bulk_ingest.py │ │ │ ├── test_enrich.py │ │ │ ├── test_ingest.py │ │ │ ├── test_tag_histogram.py │ │ │ └── test_tagging.py │ │ ├── test_assets_missing_sync.py │ │ ├── test_crud.py │ │ ├── test_downloads.py │ │ ├── test_file_utils.py │ │ ├── test_list_filter.py │ │ ├── test_metadata_filters.py │ │ ├── test_prune_orphaned_assets.py │ │ ├── test_sync_references.py │ │ ├── test_tags_api.py │ │ └── test_uploads.py │ ├── comfy_api_test/ │ │ ├── input_impl_test.py │ │ └── video_types_test.py │ ├── comfy_extras_test/ │ │ ├── __init__.py │ │ ├── image_stitch_test.py │ │ └── nodes_math_test.py │ ├── comfy_quant/ │ │ └── test_mixed_precision.py │ ├── comfy_test/ │ │ ├── folder_path_test.py │ │ └── model_detection_test.py │ ├── execution_test/ │ │ ├── preview_method_override_test.py │ │ ├── test_cache_provider.py │ │ └── validate_node_input_test.py │ ├── feature_flags_test.py │ ├── folder_paths_test/ │ │ ├── __init__.py │ │ ├── filter_by_content_types_test.py │ │ ├── misc_test.py │ │ └── system_user_test.py │ ├── prompt_server_test/ │ │ ├── __init__.py │ │ ├── system_user_endpoint_test.py │ │ └── user_manager_test.py │ ├── requirements.txt │ ├── seeder_test/ │ │ └── test_seeder.py │ ├── server/ │ │ └── utils/ │ │ └── file_operations_test.py │ ├── server_test/ │ │ └── test_cache_control.py │ ├── utils/ │ │ ├── extra_config_test.py │ │ └── json_util_test.py │ └── websocket_feature_flags_test.py └── utils/ ├── __init__.py ├── extra_config.py ├── install_util.py ├── json_util.py └── mime_types.py