SYMBOL INDEX (919 symbols across 94 files) FILE: api/config_routes.py function save_config (line 15) | def save_config(_config): function config_transaction (line 19) | async def config_transaction(): function _positive_int (line 29) | def _positive_int(value): function _apply_field_patch (line 77) | def _apply_field_patch(target: dict, data: dict, field_rules: list) -> N... function get_config_endpoint (line 90) | async def get_config_endpoint(request): function update_config_endpoint (line 96) | async def update_config_endpoint(request): function queue_status_endpoint (line 148) | async def queue_status_endpoint(request): function update_worker_endpoint (line 166) | async def update_worker_endpoint(request): function delete_worker_endpoint (line 210) | async def delete_worker_endpoint(request): function update_setting_endpoint (line 242) | async def update_setting_endpoint(request): function update_master_endpoint (line 265) | async def update_master_endpoint(request): FILE: api/job_routes.py function ensure_distributed_state (line 23) | def ensure_distributed_state(): function _decode_image_sync (line 33) | def _decode_image_sync(image_path): function _check_file_sync (line 79) | def _check_file_sync(filename, expected_hash): function _decode_canonical_png_tensor (line 104) | def _decode_canonical_png_tensor(image_payload): function _decode_audio_payload (line 135) | def _decode_audio_payload(audio_payload): function prepare_job_endpoint (line 143) | async def prepare_job_endpoint(request): function clear_memory_endpoint (line 161) | async def clear_memory_endpoint(request): function distributed_queue_endpoint (line 207) | async def distributed_queue_endpoint(request): function load_image_endpoint (line 239) | async def load_image_endpoint(request): function check_file_endpoint (line 256) | async def check_file_endpoint(request): function job_complete_endpoint (line 274) | async def job_complete_endpoint(request): FILE: api/orchestration/dispatch.py function trace_debug (line 12) | def trace_debug(*_args, **_kwargs): function trace_info (line 15) | def trace_info(*_args, **_kwargs): function parse_positive_int (line 21) | def parse_positive_int(value, default): function worker_is_active (line 31) | async def worker_is_active(worker): function worker_ws_is_active (line 37) | async def worker_ws_is_active(worker): function _probe_worker_active (line 56) | async def _probe_worker_active(worker, use_websocket, semaphore): function _dispatch_via_websocket (line 62) | async def _dispatch_via_websocket(worker_url, payload, client_id, timeou... function dispatch_worker_prompt (line 98) | async def dispatch_worker_prompt( function select_active_workers (line 144) | async def select_active_workers( function _extract_queue_remaining (line 194) | def _extract_queue_remaining(payload): function _probe_worker_queue (line 204) | async def _probe_worker_queue(worker, semaphore, probe_timeout): function _select_idle_round_robin (line 216) | def _select_idle_round_robin(statuses): function select_least_busy_worker (line 225) | async def select_least_busy_worker( FILE: api/orchestration/media_sync.py function _normalize_media_reference (line 26) | def _normalize_media_reference(value): function convert_paths_for_platform (line 36) | def convert_paths_for_platform(obj, target_separator): function _find_media_references (line 70) | def _find_media_references(prompt_obj): function _rewrite_prompt_media_inputs (line 84) | def _rewrite_prompt_media_inputs(prompt_obj, worker_media_paths): function _load_media_file_sync (line 105) | def _load_media_file_sync(filename): function fetch_worker_path_separator (line 127) | async def fetch_worker_path_separator(worker, trace_execution_id=None): function _upload_media_to_worker (line 146) | async def _upload_media_to_worker(worker, filename, file_bytes, file_has... function sync_worker_media (line 196) | async def sync_worker_media(worker, prompt_obj, trace_execution_id=None): FILE: api/orchestration/prompt_transform.py class PromptIndex (line 7) | class PromptIndex: method __init__ (line 10) | def __init__(self, prompt_obj): method copy_prompt (line 24) | def copy_prompt(self): method nodes_for_class (line 27) | def nodes_for_class(self, class_name): method has_upstream (line 30) | def has_upstream(self, start_node_id, target_class): function _iter_prompt_nodes (line 56) | def _iter_prompt_nodes(prompt_obj): function find_nodes_by_class (line 62) | def find_nodes_by_class(prompt_obj, class_name): function _find_downstream_nodes (line 70) | def _find_downstream_nodes(prompt_obj, start_ids): function _create_numeric_id_generator (line 91) | def _create_numeric_id_generator(prompt_obj): function _find_upstream_nodes (line 111) | def _find_upstream_nodes(prompt_obj, start_ids): function prune_prompt_for_worker (line 128) | def prune_prompt_for_worker(prompt_obj): function prepare_delegate_master_prompt (line 165) | def prepare_delegate_master_prompt(prompt_obj, collector_ids): function generate_job_id_map (line 217) | def generate_job_id_map(prompt_index, prefix): function _override_seed_nodes (line 228) | def _override_seed_nodes(prompt_copy, prompt_index, is_master, participa... function _override_collector_nodes (line 242) | def _override_collector_nodes( function _override_upscale_nodes (line 276) | def _override_upscale_nodes( function _override_value_nodes (line 302) | def _override_value_nodes(prompt_copy, prompt_index, is_master, particip... function apply_participant_overrides (line 316) | def apply_participant_overrides( FILE: api/queue_orchestration.py function _generate_execution_trace_id (line 38) | def _generate_execution_trace_id(): function ensure_distributed_state (line 42) | def ensure_distributed_state(server_instance=None): function _ensure_distributed_queue (line 55) | async def _ensure_distributed_queue(job_id): function _resolve_enabled_workers (line 63) | def _resolve_enabled_workers(config, requested_ids=None): function _resolve_orchestration_limits (line 96) | def _resolve_orchestration_limits(config): function _is_load_balance_enabled (line 123) | def _is_load_balance_enabled(value): function _prompt_requests_load_balance (line 133) | def _prompt_requests_load_balance(prompt_index): function _prepare_worker_payload (line 141) | async def _prepare_worker_payload( function orchestrate_distributed_execution (line 200) | async def orchestrate_distributed_execution( FILE: api/queue_request.py class QueueRequestPayload (line 6) | class QueueRequestPayload: function parse_queue_request_payload (line 16) | def parse_queue_request_payload(data: Any) -> QueueRequestPayload: FILE: api/schemas.py function require_fields (line 1) | def require_fields(data: dict, *fields) -> list[str]: function validate_worker_id (line 21) | def validate_worker_id(worker_id: str, config: dict) -> bool: function validate_positive_int (line 28) | def validate_positive_int(value, field_name: str) -> str | None: function parse_positive_int (line 39) | def parse_positive_int(value, default: int) -> int: function parse_positive_float (line 48) | def parse_positive_float(value, default: float) -> float: FILE: api/tunnel_routes.py function tunnel_status_endpoint (line 11) | async def tunnel_status_endpoint(request): function tunnel_start_endpoint (line 26) | async def tunnel_start_endpoint(request): function tunnel_stop_endpoint (line 40) | async def tunnel_stop_endpoint(request): FILE: api/usdu_routes.py function heartbeat_endpoint (line 17) | async def heartbeat_endpoint(request): function submit_tiles_endpoint (line 41) | async def submit_tiles_endpoint(request): function submit_image_endpoint (line 109) | async def submit_image_endpoint(request): function request_image_endpoint (line 169) | async def request_image_endpoint(request): function job_status_endpoint (line 219) | async def job_status_endpoint(request): FILE: api/worker_routes.py class PromptValidationError (line 36) | class PromptValidationError(RuntimeError): method __init__ (line 37) | def __init__(self, message, validation_error=None, node_errors=None): function worker_ws_endpoint (line 44) | async def worker_ws_endpoint(request): function clear_launching_state (line 116) | async def clear_launching_state(request): function get_network_ips (line 142) | def get_network_ips(): function get_recommended_ip (line 202) | def get_recommended_ip(ips): function _get_cuda_info (line 237) | def _get_cuda_info(): function _collect_network_info_sync (line 277) | def _collect_network_info_sync(): function _read_worker_log_sync (line 292) | def _read_worker_log_sync(log_file, lines_to_read): function _parse_positive_int_query (line 328) | def _parse_positive_int_query(value, default, minimum=1, maximum=10000): function _find_worker_by_id (line 340) | def _find_worker_by_id(config, worker_id): function get_local_log_endpoint (line 349) | async def get_local_log_endpoint(request): function get_network_info_endpoint (line 394) | async def get_network_info_endpoint(request): function get_system_info_endpoint (line 409) | async def get_system_info_endpoint(request): function launch_worker_endpoint (line 433) | async def launch_worker_endpoint(request): function stop_worker_endpoint (line 494) | async def stop_worker_endpoint(request): function get_managed_workers_endpoint (line 524) | async def get_managed_workers_endpoint(request): function get_local_worker_status_endpoint (line 537) | async def get_local_worker_status_endpoint(request): function get_worker_log_endpoint (line 607) | async def get_worker_log_endpoint(request): function get_remote_worker_log_endpoint (line 650) | async def get_remote_worker_log_endpoint(request): FILE: conftest.py function _patched_pkg_setup (line 16) | def _patched_pkg_setup(self) -> None: FILE: distributed.py function _cleanup_session (line 36) | async def _cleanup_session(): FILE: nodes/collector.py class DistributedCollectorNode (line 24) | class DistributedCollectorNode: method INPUT_TYPES (line 28) | def INPUT_TYPES(s): method run (line 58) | def run(self, images, load_balance=False, audio=None, multi_job_id="",... method send_batch_to_master (line 84) | async def send_batch_to_master(self, image_batch, audio, multi_job_id,... method _combine_audio (line 121) | def _combine_audio(self, master_audio, worker_audio, empty_audio, work... method _store_worker_result (line 176) | def _store_worker_result(self, worker_images: dict, item: dict) -> int: method _reorder_and_combine_tensors (line 193) | def _reorder_and_combine_tensors( method execute (line 238) | async def execute(self, images, audio, load_balance=False, multi_job_i... FILE: nodes/distributed_upscale.py function sync_wrapper (line 19) | def sync_wrapper(async_func): function _parse_enabled_worker_ids (line 30) | def _parse_enabled_worker_ids(enabled_worker_ids): class UltimateSDUpscaleDistributed (line 46) | class UltimateSDUpscaleDistributed( method __init__ (line 77) | def __init__(self): method INPUT_TYPES (line 84) | def INPUT_TYPES(s): method IS_CHANGED (line 121) | def IS_CHANGED(cls, **kwargs): method run (line 125) | def run(self, upscaled_image, model, positive, negative, vae, seed, st... method process_worker (line 164) | def process_worker(self, upscaled_image, model, positive, negative, vae, method process_master (line 204) | def process_master(self, upscaled_image, model, positive, negative, vae, method _determine_processing_mode (line 259) | def _determine_processing_mode(self, batch_size: int, num_workers: int... FILE: nodes/utilities.py function _chunk_bounds (line 7) | def _chunk_bounds(total_items: int, n_splits: int) -> list[tuple[int, in... class DistributedSeed (line 23) | class DistributedSeed: method INPUT_TYPES (line 31) | def INPUT_TYPES(cls): method distribute (line 52) | def distribute(self, seed, is_worker=False, worker_id=""): class AnyType (line 79) | class AnyType(str): method __ne__ (line 80) | def __ne__(self, __value: object) -> bool: class DistributedValue (line 86) | class DistributedValue: method INPUT_TYPES (line 95) | def INPUT_TYPES(cls): method _coerce (line 113) | def _coerce(value, value_type): method _coerce_safe (line 122) | def _coerce_safe(value, value_type): method distribute (line 129) | def distribute(self, default_value, worker_values="{}", is_worker=Fals... class DistributedModelName (line 164) | class DistributedModelName: method INPUT_TYPES (line 166) | def INPUT_TYPES(cls): method _stringify (line 183) | def _stringify(self, value): method _update_workflow (line 193) | def _update_workflow(self, extra_pnginfo, unique_id, values): method log_input (line 211) | def log_input(self, text, unique_id=None, extra_pnginfo=None): class ByPassTypeTuple (line 226) | class ByPassTypeTuple(tuple): method __getitem__ (line 227) | def __getitem__(self, index): class ImageBatchDivider (line 235) | class ImageBatchDivider: method INPUT_TYPES (line 237) | def INPUT_TYPES(s): method divide_batch (line 258) | def divide_batch(self, images, divide_by): class AudioBatchDivider (line 271) | class AudioBatchDivider: method INPUT_TYPES (line 275) | def INPUT_TYPES(s): method divide_audio (line 296) | def divide_audio(self, audio, divide_by): class DistributedEmptyImage (line 332) | class DistributedEmptyImage: method INPUT_TYPES (line 336) | def INPUT_TYPES(cls): method create (line 349) | def create(self, height, width, channels): FILE: tests/api/test_config_routes.py class _FakeResponse (line 10) | class _FakeResponse: method __init__ (line 11) | def __init__(self, payload, status=200): class _FakeRequest (line 16) | class _FakeRequest: method __init__ (line 17) | def __init__(self, payload=None): method json (line 20) | async def json(self): function _load_config_routes_module (line 24) | def _load_config_routes_module(): class ConfigRoutesTests (line 108) | class ConfigRoutesTests(unittest.IsolatedAsyncioTestCase): method test_get_config_returns_core_sections (line 109) | async def test_get_config_returns_core_sections(self): method test_update_config_valid_field_persists (line 119) | async def test_update_config_valid_field_persists(self): method test_update_config_unknown_field_returns_400 (line 130) | async def test_update_config_unknown_field_returns_400(self): method test_update_config_wrong_type_returns_400 (line 138) | async def test_update_config_wrong_type_returns_400(self): FILE: tests/api/test_distributed_queue.py class _FakeResponse (line 15) | class _FakeResponse: method __init__ (line 16) | def __init__(self, payload, status=200): class _FakeRequest (line 21) | class _FakeRequest: method __init__ (line 22) | def __init__(self, payload): method json (line 25) | async def json(self): function _load_job_routes_module (line 29) | def _load_job_routes_module(): class DistributedQueueEndpointTests (line 223) | class DistributedQueueEndpointTests(unittest.IsolatedAsyncioTestCase): method test_distributed_queue_happy_path_returns_prompt_metadata (line 224) | async def test_distributed_queue_happy_path_returns_prompt_metadata(se... method test_distributed_queue_missing_prompt_returns_400 (line 246) | async def test_distributed_queue_missing_prompt_returns_400(self): method test_distributed_queue_missing_enabled_worker_ids_returns_400 (line 257) | async def test_distributed_queue_missing_enabled_worker_ids_returns_40... class JobCompleteAudioPayloadTests (line 269) | class JobCompleteAudioPayloadTests(unittest.IsolatedAsyncioTestCase): method _encoded_audio_payload (line 270) | def _encoded_audio_payload(self): method test_job_complete_accepts_audio_payload (line 279) | async def test_job_complete_accepts_audio_payload(self): method test_decode_audio_payload_rejects_bad_shape (line 305) | def test_decode_audio_payload_rejects_bad_shape(self): method test_decode_audio_payload_rejects_bad_dtype (line 315) | def test_decode_audio_payload_rejects_bad_dtype(self): FILE: tests/api/test_media_sync.py function _load_media_sync_module (line 8) | def _load_media_sync_module(): class ConvertPathsForPlatformTests (line 89) | class ConvertPathsForPlatformTests(unittest.TestCase): method test_forward_slash_target_normalises_backslashes (line 90) | def test_forward_slash_target_normalises_backslashes(self): method test_backslash_target_normalises_forward_slashes (line 95) | def test_backslash_target_normalises_forward_slashes(self): method test_relative_media_paths_always_stay_forward_slash (line 101) | def test_relative_media_paths_always_stay_forward_slash(self): method test_relative_audio_paths_stay_forward_slash (line 107) | def test_relative_audio_paths_stay_forward_slash(self): method test_annotated_relative_media_path_stays_forward_slash (line 112) | def test_annotated_relative_media_path_stays_forward_slash(self): method test_non_filename_strings_are_untouched (line 118) | def test_non_filename_strings_are_untouched(self): method test_url_strings_are_untouched (line 124) | def test_url_strings_are_untouched(self): method test_invalid_separator_returns_obj_unchanged (line 129) | def test_invalid_separator_returns_obj_unchanged(self): method test_nested_dict_is_processed_recursively (line 134) | def test_nested_dict_is_processed_recursively(self): method test_list_items_are_processed_recursively (line 139) | def test_list_items_are_processed_recursively(self): method test_non_string_scalar_values_are_untouched (line 145) | def test_non_string_scalar_values_are_untouched(self): method test_absolute_unix_path_to_windows (line 151) | def test_absolute_unix_path_to_windows(self): method test_already_normalised_path_is_idempotent (line 156) | def test_already_normalised_path_is_idempotent(self): class FindMediaReferencesTests (line 166) | class FindMediaReferencesTests(unittest.TestCase): method test_finds_image_input (line 167) | def test_finds_image_input(self): method test_finds_video_input (line 172) | def test_finds_video_input(self): method test_finds_file_input_for_load_video (line 177) | def test_finds_file_input_for_load_video(self): method test_finds_audio_input (line 182) | def test_finds_audio_input(self): method test_strips_annotation_suffix (line 187) | def test_strips_annotation_suffix(self): method test_normalises_backslashes_in_path (line 193) | def test_normalises_backslashes_in_path(self): method test_ignores_non_media_text_inputs (line 198) | def test_ignores_non_media_text_inputs(self): method test_ignores_node_link_values (line 203) | def test_ignores_node_link_values(self): method test_deduplicates_same_file_across_nodes (line 209) | def test_deduplicates_same_file_across_nodes(self): method test_returns_sorted_list (line 217) | def test_returns_sorted_list(self): method test_ignores_non_dict_nodes (line 225) | def test_ignores_non_dict_nodes(self): method test_empty_prompt_returns_empty_list (line 230) | def test_empty_prompt_returns_empty_list(self): method test_multiple_media_types_all_found (line 233) | def test_multiple_media_types_all_found(self): class RewritePromptMediaInputsTests (line 245) | class RewritePromptMediaInputsTests(unittest.TestCase): method test_rewrites_video_file_input_to_worker_path (line 246) | def test_rewrites_video_file_input_to_worker_path(self): method test_rewrites_audio_input_and_strips_annotation_when_matching (line 253) | def test_rewrites_audio_input_and_strips_annotation_when_matching(self): FILE: tests/api/test_usdu_routes.py class _FakeResponse (line 13) | class _FakeResponse: method __init__ (line 14) | def __init__(self, payload, status=200): class _FakeRequest (line 19) | class _FakeRequest: method __init__ (line 20) | def __init__(self, json_payload=None, post_payload=None, headers=None,... method json (line 26) | async def json(self): method post (line 29) | async def post(self): class _Routes (line 33) | class _Routes: method post (line 34) | def post(self, _path): method get (line 40) | def get(self, _path): function _load_usdu_routes_module (line 47) | def _load_usdu_routes_module(): class _UploadField (line 177) | class _UploadField: method __init__ (line 178) | def __init__(self, data): function _tiny_png_bytes (line 182) | def _tiny_png_bytes(): class USDURoutesTests (line 189) | class USDURoutesTests(unittest.IsolatedAsyncioTestCase): method asyncSetUp (line 190) | async def asyncSetUp(self): method test_heartbeat_updates_worker_status (line 196) | async def test_heartbeat_updates_worker_status(self): method test_heartbeat_missing_fields_returns_400 (line 208) | async def test_heartbeat_missing_fields_returns_400(self): method test_request_image_dynamic_assigns_next_image (line 215) | async def test_request_image_dynamic_assigns_next_image(self): method test_request_image_static_assigns_tile_and_batched_flag (line 230) | async def test_request_image_static_assigns_tile_and_batched_flag(self): method test_submit_tiles_completion_signal_enqueues_last_marker (line 245) | async def test_submit_tiles_completion_signal_enqueues_last_marker(self): method test_submit_image_enqueues_processed_image_payload (line 268) | async def test_submit_image_enqueues_processed_image_payload(self): method test_job_status_endpoint_reports_ready (line 292) | async def test_job_status_endpoint_reports_ready(self): FILE: tests/api/test_worker_routes.py class _FakeResponse (line 12) | class _FakeResponse: method __init__ (line 13) | def __init__(self, payload, status=200): class _FakeRequest (line 18) | class _FakeRequest: method __init__ (line 19) | def __init__(self, payload=None, match_info=None, query=None): method json (line 24) | async def json(self): class _FakeHTTPClientResponse (line 28) | class _FakeHTTPClientResponse: method __init__ (line 29) | def __init__(self, payload, status=200): method __aenter__ (line 33) | async def __aenter__(self): method __aexit__ (line 36) | async def __aexit__(self, _exc_type, _exc, _tb): method json (line 39) | async def json(self): method text (line 42) | async def text(self): class _FakeHTTPClientSession (line 46) | class _FakeHTTPClientSession: method __init__ (line 47) | def __init__(self, payload, status=200): method get (line 52) | def get(self, url, params=None, timeout=None): class _DummyWorkerManager (line 57) | class _DummyWorkerManager: method __init__ (line 58) | def __init__(self): method launch_worker (line 61) | def launch_worker(self, worker): method _is_process_running (line 70) | def _is_process_running(self, _pid): method save_processes (line 73) | def save_processes(self): method stop_worker (line 76) | def stop_worker(self, _worker_id): method get_managed_workers (line 79) | def get_managed_workers(self): class _ImmediateLoop (line 83) | class _ImmediateLoop: method run_in_executor (line 84) | async def run_in_executor(self, _executor, func, *args): function _load_worker_routes_module (line 88) | def _load_worker_routes_module(): class WorkerRoutesTests (line 271) | class WorkerRoutesTests(unittest.IsolatedAsyncioTestCase): method test_launch_worker_valid_id_returns_200 (line 272) | async def test_launch_worker_valid_id_returns_200(self): method test_launch_worker_unknown_id_returns_404 (line 288) | async def test_launch_worker_unknown_id_returns_404(self): method test_worker_log_returns_content_json (line 301) | async def test_worker_log_returns_content_json(self): method test_local_log_reads_memory_buffer (line 328) | async def test_local_log_reads_memory_buffer(self): method test_remote_worker_log_proxies_to_worker_local_log_endpoint (line 353) | async def test_remote_worker_log_proxies_to_worker_local_log_endpoint(... method test_remote_worker_log_rejects_local_workers (line 390) | async def test_remote_worker_log_rejects_local_workers(self): FILE: tests/test_async_helpers.py class _PromptQueue (line 8) | class _PromptQueue: method __init__ (line 9) | def __init__(self): method put (line 12) | def put(self, item): function _load_async_helpers_module (line 16) | def _load_async_helpers_module(): class QueuePromptPayloadTests (line 64) | class QueuePromptPayloadTests(unittest.IsolatedAsyncioTestCase): method test_queue_prompt_payload_includes_create_time_and_client_metadata (line 65) | async def test_queue_prompt_payload_includes_create_time_and_client_me... FILE: tests/test_batch_dividers.py function _load_utilities_module (line 10) | def _load_utilities_module(): class ImageBatchDividerTests (line 48) | class ImageBatchDividerTests(unittest.TestCase): method test_divides_images_into_contiguous_chunks (line 49) | def test_divides_images_into_contiguous_chunks(self): method test_unused_image_outputs_are_empty (line 62) | def test_unused_image_outputs_are_empty(self): class AudioBatchDividerTests (line 73) | class AudioBatchDividerTests(unittest.TestCase): method test_divides_audio_samples_into_contiguous_chunks (line 74) | def test_divides_audio_samples_into_contiguous_chunks(self): method test_unused_audio_outputs_are_empty (line 87) | def test_unused_audio_outputs_are_empty(self): FILE: tests/test_config.py function _load_config_module (line 12) | def _load_config_module(): class MergeWithDefaultsTests (line 47) | class MergeWithDefaultsTests(unittest.TestCase): method test_non_dict_input_returns_defaults (line 48) | def test_non_dict_input_returns_defaults(self): method test_fills_missing_keys_with_defaults (line 52) | def test_fills_missing_keys_with_defaults(self): method test_loaded_value_overrides_default (line 56) | def test_loaded_value_overrides_default(self): method test_nested_dict_merges_recursively (line 61) | def test_nested_dict_merges_recursively(self): method test_preserves_unknown_keys_for_forward_compatibility (line 68) | def test_preserves_unknown_keys_for_forward_compatibility(self): method test_none_loaded_value_overrides_default (line 72) | def test_none_loaded_value_overrides_default(self): method test_non_dict_nested_loaded_value_replaces_dict_default (line 77) | def test_non_dict_nested_loaded_value_replaces_dict_default(self): class LoadConfigTests (line 89) | class LoadConfigTests(unittest.TestCase): method setUp (line 90) | def setUp(self): method tearDown (line 93) | def tearDown(self): method test_returns_defaults_when_file_missing (line 96) | def test_returns_defaults_when_file_missing(self): method test_loads_valid_json_file (line 103) | def test_loads_valid_json_file(self): method test_merges_loaded_file_with_defaults (line 121) | def test_merges_loaded_file_with_defaults(self): method test_falls_back_to_defaults_on_invalid_json (line 137) | def test_falls_back_to_defaults_on_invalid_json(self): method test_second_call_returns_cached_object (line 149) | def test_second_call_returns_cached_object(self): method test_invalidate_cache_forces_reload (line 161) | def test_invalidate_cache_forces_reload(self): class SaveConfigTests (line 185) | class SaveConfigTests(unittest.TestCase): method setUp (line 186) | def setUp(self): method tearDown (line 189) | def tearDown(self): method test_saves_and_reloads_correctly (line 192) | def test_saves_and_reloads_correctly(self): method test_returns_false_when_path_unwritable (line 203) | def test_returns_false_when_path_unwritable(self): method test_save_invalidates_cache (line 208) | def test_save_invalidates_cache(self): method test_written_file_is_valid_json (line 218) | def test_written_file_is_valid_json(self): class GetWorkerTimeoutSecondsTests (line 233) | class GetWorkerTimeoutSecondsTests(unittest.TestCase): method test_returns_configured_value (line 234) | def test_returns_configured_value(self): method test_clamps_zero_to_one (line 240) | def test_clamps_zero_to_one(self): method test_clamps_negative_to_one (line 246) | def test_clamps_negative_to_one(self): method test_falls_back_to_provided_default_when_key_missing (line 252) | def test_falls_back_to_provided_default_when_key_missing(self): method test_fallback_also_clamped_to_one (line 260) | def test_fallback_also_clamped_to_one(self): class IsMasterDelegateOnlyTests (line 272) | class IsMasterDelegateOnlyTests(unittest.TestCase): method test_returns_false_by_default (line 273) | def test_returns_false_by_default(self): method test_returns_true_when_enabled (line 278) | def test_returns_true_when_enabled(self): method test_returns_false_on_exception (line 284) | def test_returns_false_on_exception(self): FILE: tests/test_detection.py function _load_detection_module (line 9) | def _load_detection_module(): class IsDockerEnvironmentTests (line 75) | class IsDockerEnvironmentTests(unittest.TestCase): method test_true_when_dockerenv_file_exists (line 76) | def test_true_when_dockerenv_file_exists(self): method test_true_when_docker_container_env_var_is_set (line 82) | def test_true_when_docker_container_env_var_is_set(self): method test_true_when_platform_node_contains_docker (line 88) | def test_true_when_platform_node_contains_docker(self): method test_false_when_none_of_the_signals_are_present (line 94) | def test_false_when_none_of_the_signals_are_present(self): method test_docker_node_name_is_case_insensitive (line 100) | def test_docker_node_name_is_case_insensitive(self): method test_docker_env_var_empty_string_is_falsy (line 106) | def test_docker_env_var_empty_string_is_falsy(self): class IsRunpodEnvironmentTests (line 118) | class IsRunpodEnvironmentTests(unittest.TestCase): method test_true_when_runpod_pod_id_is_set (line 119) | def test_true_when_runpod_pod_id_is_set(self): method test_true_when_runpod_api_key_is_set (line 123) | def test_true_when_runpod_api_key_is_set(self): method test_true_when_both_vars_are_set (line 127) | def test_true_when_both_vars_are_set(self): method test_false_when_neither_var_is_set (line 135) | def test_false_when_neither_var_is_set(self): method test_true_when_pod_id_is_empty_string (line 139) | def test_true_when_pod_id_is_empty_string(self): class IsLocalWorkerTests (line 149) | class IsLocalWorkerTests(unittest.IsolatedAsyncioTestCase): method test_true_for_localhost_host (line 150) | async def test_true_for_localhost_host(self): method test_true_for_127_0_0_1 (line 154) | async def test_true_for_127_0_0_1(self): method test_true_for_0_0_0_0 (line 158) | async def test_true_for_0_0_0_0(self): method test_true_when_type_is_local (line 162) | async def test_true_when_type_is_local(self): method test_false_for_remote_host (line 166) | async def test_false_for_remote_host(self): method test_true_when_no_host_key (line 170) | async def test_true_when_no_host_key(self): class GetMachineIdTests (line 180) | class GetMachineIdTests(unittest.TestCase): method test_returns_a_string (line 181) | def test_returns_a_string(self): method test_returns_non_empty_string (line 185) | def test_returns_non_empty_string(self): method test_stable_across_calls (line 189) | def test_stable_across_calls(self): FILE: tests/test_dispatch_selection.py function _load_dispatch_module (line 10) | def _load_dispatch_module(): class DispatchSelectionTests (line 103) | class DispatchSelectionTests(unittest.IsolatedAsyncioTestCase): method test_select_active_workers_filters_offline (line 104) | async def test_select_active_workers_filters_offline(self): method test_select_active_workers_disables_delegate_when_all_offline (line 125) | async def test_select_active_workers_disables_delegate_when_all_offlin... method test_select_active_workers_uses_websocket_probe_when_enabled (line 142) | async def test_select_active_workers_uses_websocket_probe_when_enabled... method test_probe_concurrency_is_bounded (line 167) | async def test_probe_concurrency_is_bounded(self): method test_select_least_busy_worker_round_robins_idle_workers (line 190) | async def test_select_least_busy_worker_round_robins_idle_workers(self): method test_select_least_busy_worker_chooses_smallest_queue_when_all_busy (line 216) | async def test_select_least_busy_worker_chooses_smallest_queue_when_al... method test_select_least_busy_worker_returns_none_when_all_probes_fail (line 237) | async def test_select_least_busy_worker_returns_none_when_all_probes_f... FILE: tests/test_distributed_value.py class DistributedValueTests (line 5) | class DistributedValueTests(unittest.TestCase): method _make_node (line 8) | def _make_node(self): method setUp (line 47) | def setUp(self): method test_master_returns_default (line 50) | def test_master_returns_default(self): method test_master_coerces_default_int (line 59) | def test_master_coerces_default_int(self): method test_master_coerces_default_float (line 70) | def test_master_coerces_default_float(self): method test_worker_returns_specific_value (line 81) | def test_worker_returns_specific_value(self): method test_worker_second_index (line 91) | def test_worker_second_index(self): method test_worker_falls_back_to_default_when_key_missing (line 101) | def test_worker_falls_back_to_default_when_key_missing(self): method test_worker_falls_back_to_default_on_empty_value (line 112) | def test_worker_falls_back_to_default_on_empty_value(self): method test_worker_falls_back_on_invalid_json (line 122) | def test_worker_falls_back_on_invalid_json(self): method test_worker_falls_back_on_invalid_worker_id (line 131) | def test_worker_falls_back_on_invalid_worker_id(self): method test_worker_id_as_direct_integer (line 141) | def test_worker_id_as_direct_integer(self): method test_type_int_coerces_value (line 151) | def test_type_int_coerces_value(self): method test_type_float_coerces_value (line 162) | def test_type_float_coerces_value(self): method test_type_combo_stays_string (line 173) | def test_type_combo_stays_string(self): method test_type_string_default_stays_string (line 184) | def test_type_string_default_stays_string(self): method test_int_coerce_handles_float_string (line 195) | def test_int_coerce_handles_float_string(self): FILE: tests/test_job_timeout.py function _load_job_timeout_module (line 11) | def _load_job_timeout_module(): class JobTimeoutRequeueTests (line 129) | class JobTimeoutRequeueTests(unittest.IsolatedAsyncioTestCase): method asyncSetUp (line 130) | async def asyncSetUp(self): method test_requeues_only_incomplete_dynamic_tasks_for_timed_out_worker (line 140) | async def test_requeues_only_incomplete_dynamic_tasks_for_timed_out_wo... method test_busy_probe_graces_worker_and_skips_requeue (line 159) | async def test_busy_probe_graces_worker_and_skips_requeue(self): method test_completed_dynamic_task_is_not_requeued (line 178) | async def test_completed_dynamic_task_is_not_requeued(self): FILE: tests/test_network_helpers.py function _load_network_module (line 8) | def _load_network_module(): class NetworkHelpersTests (line 58) | class NetworkHelpersTests(unittest.TestCase): method test_normalize_host_strips_protocol_and_path (line 59) | def test_normalize_host_strips_protocol_and_path(self): method test_normalize_host_keeps_none (line 62) | def test_normalize_host_keeps_none(self): method test_build_worker_url_defaults_to_server_address (line 65) | def test_build_worker_url_defaults_to_server_address(self): method test_build_worker_url_cloud_defaults_to_https (line 69) | def test_build_worker_url_cloud_defaults_to_https(self): method test_build_worker_url_keeps_explicit_scheme (line 73) | def test_build_worker_url_keeps_explicit_scheme(self): method test_build_master_url_uses_https_for_cloud_host (line 77) | def test_build_master_url_uses_https_for_cloud_host(self): method test_build_master_url_keeps_explicit_scheme (line 85) | def test_build_master_url_keeps_explicit_scheme(self): method test_build_master_url_ignores_stale_saved_port_and_uses_runtime_port (line 93) | def test_build_master_url_ignores_stale_saved_port_and_uses_runtime_po... method test_build_master_url_keeps_explicit_port_in_host (line 101) | def test_build_master_url_keeps_explicit_port_in_host(self): method test_build_master_url_falls_back_to_server_address (line 109) | def test_build_master_url_falls_back_to_server_address(self): method test_build_master_callback_url_uses_loopback_for_local_worker (line 117) | def test_build_master_callback_url_uses_loopback_for_local_worker(self): method test_build_master_callback_url_keeps_public_master_url_for_remote_worker (line 126) | def test_build_master_callback_url_keeps_public_master_url_for_remote_... FILE: tests/test_payload_parsers.py function _load_payload_parsers_module (line 16) | def _load_payload_parsers_module(): function _make_png_bytes (line 34) | def _make_png_bytes(width=64, height=64, color=(128, 64, 32)): class _MockFileField (line 42) | class _MockFileField: class _MockFile (line 45) | class _MockFile: method __init__ (line 46) | def __init__(self, data: bytes): method read (line 49) | def read(self) -> bytes: method __init__ (line 52) | def __init__(self, data: bytes): function _make_form (line 56) | def _make_form(n_tiles, *, padding=None, extra_meta=None, image_color=(1... class ParseTilesFromFormTests (line 85) | class ParseTilesFromFormTests(unittest.TestCase): method test_single_tile_returns_one_entry (line 89) | def test_single_tile_returns_one_entry(self): method test_multiple_tiles_all_returned (line 93) | def test_multiple_tiles_all_returned(self): method test_tile_image_is_pil_image (line 97) | def test_tile_image_is_pil_image(self): method test_tile_metadata_fields_are_parsed (line 101) | def test_tile_metadata_fields_are_parsed(self): method test_padding_is_parsed_from_form (line 110) | def test_padding_is_parsed_from_form(self): method test_default_padding_is_zero (line 114) | def test_default_padding_is_zero(self): method test_invalid_padding_string_falls_back_to_zero (line 120) | def test_invalid_padding_string_falls_back_to_zero(self): method test_optional_batch_idx_included_when_present (line 126) | def test_optional_batch_idx_included_when_present(self): method test_optional_global_idx_included_when_present (line 131) | def test_optional_global_idx_included_when_present(self): method test_batch_idx_and_global_idx_absent_when_not_in_metadata (line 136) | def test_batch_idx_and_global_idx_absent_when_not_in_metadata(self): method test_tile_indices_match_metadata_order (line 141) | def test_tile_indices_match_metadata_order(self): method test_x_coordinates_reflect_metadata (line 146) | def test_x_coordinates_reflect_metadata(self): method test_missing_tiles_metadata_raises_value_error (line 153) | def test_missing_tiles_metadata_raises_value_error(self): method test_invalid_json_metadata_raises_value_error (line 157) | def test_invalid_json_metadata_raises_value_error(self): method test_non_list_metadata_raises_value_error (line 162) | def test_non_list_metadata_raises_value_error(self): method test_missing_tile_file_field_raises_value_error (line 167) | def test_missing_tile_file_field_raises_value_error(self): method test_tile_field_without_file_attr_raises_value_error (line 175) | def test_tile_field_without_file_attr_raises_value_error(self): method test_non_image_bytes_raises_value_error (line 183) | def test_non_image_bytes_raises_value_error(self): method test_invalid_metadata_value_type_raises_value_error (line 197) | def test_invalid_metadata_value_type_raises_value_error(self): FILE: tests/test_prompt_transform.py function _load_prompt_transform_module (line 9) | def _load_prompt_transform_module(): function _linear_prompt (line 55) | def _linear_prompt(): function _collector_only_prompt (line 66) | def _collector_only_prompt(): function _delegate_prompt (line 74) | def _delegate_prompt(): function _apply (line 84) | def _apply(prompt, participant_id, enabled_worker_ids=None, delegate_mas... class PromptIndexTests (line 104) | class PromptIndexTests(unittest.TestCase): method test_nodes_by_class_groups_correctly (line 105) | def test_nodes_by_class_groups_correctly(self): method test_nodes_for_class_unknown_returns_empty (line 115) | def test_nodes_for_class_unknown_returns_empty(self): method test_nodes_without_class_type_are_indexed_under_none (line 119) | def test_nodes_without_class_type_are_indexed_under_none(self): method test_copy_prompt_is_a_deep_copy (line 125) | def test_copy_prompt_is_a_deep_copy(self): method test_has_upstream_direct_connection (line 132) | def test_has_upstream_direct_connection(self): method test_has_upstream_transitive_connection (line 137) | def test_has_upstream_transitive_connection(self): method test_has_upstream_returns_false_when_no_path (line 142) | def test_has_upstream_returns_false_when_no_path(self): method test_has_upstream_result_is_cached (line 147) | def test_has_upstream_result_is_cached(self): method test_has_upstream_does_not_infinite_loop_on_cycle (line 154) | def test_has_upstream_does_not_infinite_loop_on_cycle(self): class FindNodesByClassTests (line 170) | class FindNodesByClassTests(unittest.TestCase): method test_finds_matching_nodes (line 171) | def test_finds_matching_nodes(self): method test_returns_empty_when_no_match (line 179) | def test_returns_empty_when_no_match(self): method test_skips_non_dict_nodes (line 183) | def test_skips_non_dict_nodes(self): class PrunePromptForWorkerTests (line 193) | class PrunePromptForWorkerTests(unittest.TestCase): method test_no_distributed_nodes_returns_prompt_unchanged (line 194) | def test_no_distributed_nodes_returns_prompt_unchanged(self): method test_keeps_collector_and_upstream (line 202) | def test_keeps_collector_and_upstream(self): method test_removes_downstream_of_collector (line 208) | def test_removes_downstream_of_collector(self): method test_injects_preview_image_when_downstream_exists (line 213) | def test_injects_preview_image_when_downstream_exists(self): method test_no_preview_image_when_no_downstream (line 220) | def test_no_preview_image_when_no_downstream(self): method test_unrelated_nodes_are_pruned (line 225) | def test_unrelated_nodes_are_pruned(self): method test_result_is_a_copy_not_same_object (line 234) | def test_result_is_a_copy_not_same_object(self): method test_upscale_node_is_treated_as_distributed (line 242) | def test_upscale_node_is_treated_as_distributed(self): class PrepareDelegateMasterPromptTests (line 258) | class PrepareDelegateMasterPromptTests(unittest.TestCase): method test_keeps_collector_and_downstream (line 259) | def test_keeps_collector_and_downstream(self): method test_removes_dangling_upstream_refs (line 267) | def test_removes_dangling_upstream_refs(self): method test_injects_empty_image_placeholder (line 280) | def test_injects_empty_image_placeholder(self): method test_one_placeholder_per_collector (line 288) | def test_one_placeholder_per_collector(self): method test_result_is_independent_copy (line 299) | def test_result_is_independent_copy(self): class GenerateJobIdMapTests (line 311) | class GenerateJobIdMapTests(unittest.TestCase): method test_maps_collector_nodes (line 312) | def test_maps_collector_nodes(self): method test_maps_upscale_nodes (line 322) | def test_maps_upscale_nodes(self): method test_empty_prompt_returns_empty_map (line 330) | def test_empty_prompt_returns_empty_map(self): method test_stable_ids_across_calls (line 334) | def test_stable_ids_across_calls(self): class ApplyOverridesCollectorTests (line 346) | class ApplyOverridesCollectorTests(unittest.TestCase): method _collector_prompt (line 347) | def _collector_prompt(self): method test_worker_sets_is_worker_true (line 350) | def test_worker_sets_is_worker_true(self): method test_worker_sets_master_url (line 354) | def test_worker_sets_master_url(self): method test_worker_sets_worker_id (line 358) | def test_worker_sets_worker_id(self): method test_worker_sets_delegate_only_false (line 362) | def test_worker_sets_delegate_only_false(self): method test_master_sets_is_worker_false (line 366) | def test_master_sets_is_worker_false(self): method test_master_clears_stale_master_url (line 370) | def test_master_clears_stale_master_url(self): method test_master_clears_stale_worker_id (line 375) | def test_master_clears_stale_worker_id(self): method test_master_with_delegate_master_sets_delegate_only_true (line 380) | def test_master_with_delegate_master_sets_delegate_only_true(self): method test_master_without_delegate_master_sets_delegate_only_false (line 384) | def test_master_without_delegate_master_sets_delegate_only_false(self): method test_enabled_worker_ids_serialized_as_json (line 388) | def test_enabled_worker_ids_serialized_as_json(self): method test_multi_job_id_is_set_from_job_map (line 393) | def test_multi_job_id_is_set_from_job_map(self): class ApplyOverridesSeedTests (line 413) | class ApplyOverridesSeedTests(unittest.TestCase): method _seed_prompt (line 414) | def _seed_prompt(self): method test_worker_sets_is_worker_true (line 417) | def test_worker_sets_is_worker_true(self): method test_worker_id_reflects_index_in_enabled_list (line 421) | def test_worker_id_reflects_index_in_enabled_list(self): method test_master_sets_is_worker_false (line 425) | def test_master_sets_is_worker_false(self): method test_master_sets_empty_worker_id (line 429) | def test_master_sets_empty_worker_id(self): class ApplyOverridesUpscaleTests (line 438) | class ApplyOverridesUpscaleTests(unittest.TestCase): method _upscale_prompt (line 439) | def _upscale_prompt(self): method test_worker_sets_is_worker_true (line 442) | def test_worker_sets_is_worker_true(self): method test_worker_sets_master_url_and_worker_id (line 446) | def test_worker_sets_master_url_and_worker_id(self): method test_master_clears_master_url_and_worker_id (line 451) | def test_master_clears_master_url_and_worker_id(self): method test_collector_downstream_of_upscale_gets_pass_through (line 457) | def test_collector_downstream_of_upscale_gets_pass_through(self): class ApplyOverridesValueTests (line 471) | class ApplyOverridesValueTests(unittest.TestCase): method _value_prompt (line 472) | def _value_prompt(self): method test_worker_sets_is_worker_true (line 475) | def test_worker_sets_is_worker_true(self): method test_worker_id_reflects_index_in_enabled_list (line 479) | def test_worker_id_reflects_index_in_enabled_list(self): method test_master_sets_is_worker_false (line 483) | def test_master_sets_is_worker_false(self): method test_master_sets_empty_worker_id (line 487) | def test_master_sets_empty_worker_id(self): FILE: tests/test_queue_request.py function _load_queue_request_module (line 6) | def _load_queue_request_module(): class QueueRequestPayloadTests (line 19) | class QueueRequestPayloadTests(unittest.TestCase): method _base_payload (line 20) | def _base_payload(self): method test_normalizes_enabled_worker_ids (line 27) | def test_normalizes_enabled_worker_ids(self): method test_supports_legacy_workers_field (line 37) | def test_supports_legacy_workers_field(self): method test_supports_auto_prepare_prompt_fallback (line 46) | def test_supports_auto_prepare_prompt_fallback(self): method test_normalizes_trace_execution_id (line 61) | def test_normalizes_trace_execution_id(self): method test_blank_trace_execution_id_normalizes_to_none (line 69) | def test_blank_trace_execution_id_normalizes_to_none(self): method test_auto_prepare_defaults_true (line 77) | def test_auto_prepare_defaults_true(self): method test_workers_field_must_be_list (line 81) | def test_workers_field_must_be_list(self): method test_trace_execution_id_must_be_string (line 88) | def test_trace_execution_id_must_be_string(self): method test_auto_prepare_false_still_falls_back_to_workflow_prompt (line 94) | def test_auto_prepare_false_still_falls_back_to_workflow_prompt(self): method test_auto_prepare_must_be_boolean (line 105) | def test_auto_prepare_must_be_boolean(self): method test_invalid_delegate_master_type_raises (line 111) | def test_invalid_delegate_master_type_raises(self): method test_invalid_enabled_worker_ids_type_raises (line 117) | def test_invalid_enabled_worker_ids_type_raises(self): method test_invalid_top_level_payload_raises (line 123) | def test_invalid_top_level_payload_raises(self): method test_missing_prompt_raises (line 127) | def test_missing_prompt_raises(self): method test_missing_enabled_worker_ids_raises (line 137) | def test_missing_enabled_worker_ids_raises(self): method test_missing_client_id_raises (line 143) | def test_missing_client_id_raises(self): FILE: tests/test_static_mode.py function _load_static_mode_module (line 11) | def _load_static_mode_module(): class _FakeStaticWorker (line 134) | class _FakeStaticWorker(static_mode.StaticModeMixin): method __init__ (line 135) | def __init__(self): method round_to_multiple (line 142) | def round_to_multiple(self, value): method calculate_tiles (line 145) | def calculate_tiles(self, _width, _height, _tile_width, _tile_height, ... method _poll_job_ready (line 148) | def _poll_job_ready(self, *_args, **_kwargs): method _request_tile_from_master (line 151) | async def _request_tile_from_master(self, *_args, **_kwargs): method _send_heartbeat_to_master (line 155) | async def _send_heartbeat_to_master(self, *_args, **_kwargs): method send_tiles_batch_to_master (line 158) | async def send_tiles_batch_to_master( method _extract_and_process_tile (line 174) | def _extract_and_process_tile(self, upscaled_image, *_args, **_kwargs): method create_tile_mask (line 179) | def create_tile_mask(self, *_args, **_kwargs): method blend_tile (line 183) | def blend_tile(self, base_image, *_args, **_kwargs): function _call_worker_static (line 187) | def _call_worker_static(fake_worker): class StaticModeWorkerFlowTests (line 214) | class StaticModeWorkerFlowTests(unittest.TestCase): method test_worker_static_aborts_when_job_not_ready (line 215) | def test_worker_static_aborts_when_job_not_ready(self): method test_worker_static_requests_tiles_and_flushes_final_batch (line 226) | def test_worker_static_requests_tiles_and_flushes_final_batch(self): method test_flush_empty_final_still_sends_completion_signal (line 241) | def test_flush_empty_final_still_sends_completion_signal(self): FILE: tests/test_worker_process_runtime.py function _load_process_module (line 10) | def _load_process_module(module_filename: str): class ComfyRootDiscoveryTests (line 58) | class ComfyRootDiscoveryTests(unittest.TestCase): method test_prefers_loaded_comfyui_module_path (line 59) | def test_prefers_loaded_comfyui_module_path(self): class LaunchCommandBuilderTests (line 72) | class LaunchCommandBuilderTests(unittest.TestCase): method test_inherits_runtime_layout_args_for_desktop (line 73) | def test_inherits_runtime_layout_args_for_desktop(self): FILE: upscale/conditioning.py function clone_control_chain (line 4) | def clone_control_chain(control, clone_hint=True): function clone_conditioning (line 17) | def clone_conditioning(cond_list, clone_hints=True): FILE: upscale/job_models.py class BaseJobState (line 6) | class BaseJobState: class TileJobState (line 11) | class TileJobState(BaseJobState): class ImageJobState (line 28) | class ImageJobState(BaseJobState): method pending_tasks (line 44) | def pending_tasks(self): method completed_tasks (line 48) | def completed_tasks(self): FILE: upscale/job_state.py class JobStateMixin (line 9) | class JobStateMixin: method _get_job_data (line 10) | async def _get_job_data(self, multi_job_id): method _get_all_completed_tasks (line 16) | async def _get_all_completed_tasks(self, multi_job_id): method _get_next_image_index (line 25) | async def _get_next_image_index(self, multi_job_id): method _get_next_tile_index (line 42) | async def _get_next_tile_index(self, multi_job_id): method _get_total_completed_count (line 59) | async def _get_total_completed_count(self, multi_job_id): method _get_all_completed_images (line 70) | async def _get_all_completed_images(self, multi_job_id): method _get_pending_count (line 79) | async def _get_pending_count(self, multi_job_id): method _drain_worker_results_queue (line 90) | async def _drain_worker_results_queue(self, multi_job_id): method _check_and_requeue_timed_out_workers (line 133) | async def _check_and_requeue_timed_out_workers(self, multi_job_id, bat... FILE: upscale/job_store.py function ensure_tile_jobs_initialized (line 15) | def ensure_tile_jobs_initialized(): function _init_job_queue (line 34) | async def _init_job_queue( function init_dynamic_job (line 83) | async def init_dynamic_job( function init_static_job_batched (line 100) | async def init_static_job_batched( function _drain_results_queue (line 117) | async def _drain_results_queue(multi_job_id): function _get_completed_count (line 155) | async def _get_completed_count(multi_job_id): function _mark_task_completed (line 165) | async def _mark_task_completed(multi_job_id, task_id, result): function _cleanup_job (line 174) | async def _cleanup_job(multi_job_id): FILE: upscale/job_timeout.py function _find_worker_record (line 11) | def _find_worker_record(worker_id): function _check_and_requeue_timed_out_workers (line 17) | async def _check_and_requeue_timed_out_workers(multi_job_id, total_tasks): FILE: upscale/modes/dynamic.py class DynamicModeMixin (line 12) | class DynamicModeMixin: method process_master_dynamic (line 22) | def process_master_dynamic(self, upscaled_image, model, positive, nega... method process_worker_dynamic (line 213) | def process_worker_dynamic(self, upscaled_image, model, positive, nega... FILE: upscale/modes/single_gpu.py class SingleGpuModeMixin (line 7) | class SingleGpuModeMixin: method process_single_gpu (line 8) | def process_single_gpu(self, upscaled_image, model, positive, negative... FILE: upscale/modes/static.py class StaticModeMixin (line 23) | class StaticModeMixin: method _poll_job_ready (line 33) | def _poll_job_ready(self, multi_job_id, master_url, worker_id=None, ma... method _extract_and_process_tile (line 49) | def _extract_and_process_tile( method _flush_tiles_to_master (line 85) | def _flush_tiles_to_master( method _master_process_one_tile (line 122) | def _master_process_one_tile( method _process_worker_static_sync (line 191) | def _process_worker_static_sync(self, upscaled_image, model, positive,... method _async_collect_and_monitor_static (line 316) | async def _async_collect_and_monitor_static(self, multi_job_id, total_... method _process_master_static_sync (line 371) | def _process_master_static_sync(self, upscaled_image, model, positive,... FILE: upscale/payload_parsers.py function _parse_tiles_from_form (line 7) | def _parse_tiles_from_form(data): FILE: upscale/result_collector.py class ResultCollectorMixin (line 12) | class ResultCollectorMixin: method _log_worker_timeout_status (line 22) | def _log_worker_timeout_status(self, job_data, current_time: float, mu... method _async_collect_results (line 36) | async def _async_collect_results(self, multi_job_id, num_workers, mode... method _async_collect_worker_tiles (line 180) | async def _async_collect_worker_tiles(self, multi_job_id, num_workers): method _mark_image_completed (line 184) | async def _mark_image_completed(self, multi_job_id, image_idx, image_p... method _async_collect_dynamic_images (line 194) | async def _async_collect_dynamic_images(self, multi_job_id, remaining_... FILE: upscale/tile_ops.py class TileOpsMixin (line 13) | class TileOpsMixin: method round_to_multiple (line 14) | def round_to_multiple(self, value: int, multiple: int = 8) -> int: method calculate_tiles (line 18) | def calculate_tiles(self, image_width: int, image_height: int, method extract_tile_with_padding (line 34) | def extract_tile_with_padding(self, image: torch.Tensor, x: int, y: int, method extract_batch_tile_with_padding (line 96) | def extract_batch_tile_with_padding(self, images: torch.Tensor, x: int... method process_tile (line 157) | def process_tile(self, tile_tensor: torch.Tensor, model, positive, neg... method process_tiles_batch (line 239) | def process_tiles_batch(self, tile_batch: torch.Tensor, model, positiv... method create_tile_mask (line 289) | def create_tile_mask(self, image_width: int, image_height: int, method blend_tile (line 310) | def blend_tile(self, base_image: Image.Image, tile_image: Image.Image, method _slice_conditioning (line 351) | def _slice_conditioning(self, positive, negative, batch_idx): method _process_and_blend_tile (line 374) | def _process_and_blend_tile(self, tile_idx, tile_pos, upscaled_image, ... method _process_single_tile (line 402) | def _process_single_tile(self, global_idx, num_tiles_per_image, upscal... FILE: upscale/worker_comms.py class WorkerCommsMixin (line 11) | class WorkerCommsMixin: method _send_heartbeat_to_master (line 12) | async def _send_heartbeat_to_master(self, multi_job_id, master_url, wo... method send_tiles_batch_to_master (line 16) | async def send_tiles_batch_to_master(self, processed_tiles, multi_job_... method _send_tiles_completion_signal (line 110) | async def _send_tiles_completion_signal(self, multi_job_id, master_url... method _request_work_item_from_master (line 124) | async def _request_work_item_from_master( method _request_image_from_master (line 171) | async def _request_image_from_master(self, multi_job_id, master_url, w... method _request_tile_from_master (line 180) | async def _request_tile_from_master(self, multi_job_id, master_url, wo... method _send_full_image_to_master (line 190) | async def _send_full_image_to_master(self, image_pil, image_idx, multi... method _send_worker_complete_signal (line 230) | async def _send_worker_complete_signal(self, multi_job_id, master_url,... method _check_job_status (line 246) | async def _check_job_status(self, multi_job_id, master_url): method _async_yield (line 260) | async def _async_yield(self): FILE: utils/async_helpers.py function run_async_in_server_loop (line 13) | def run_async_in_server_loop(coro: Coroutine, timeout: Optional[float] =... function _summarize_node_errors (line 60) | def _summarize_node_errors(node_errors: dict) -> str: class PromptValidationError (line 82) | class PromptValidationError(RuntimeError): method __init__ (line 85) | def __init__(self, error_payload, node_errors=None): function queue_prompt_payload (line 108) | async def queue_prompt_payload( FILE: utils/audio_payload.py function encode_audio_payload (line 16) | def encode_audio_payload(audio_payload): function decode_audio_payload (line 46) | def decode_audio_payload(audio_payload): FILE: utils/cloudflare/binary.py function _get_project_root (line 13) | def _get_project_root(): function _get_cloudflared_dir (line 17) | def _get_cloudflared_dir(): function _get_platform_binary_name (line 21) | def _get_platform_binary_name(): function _get_binary_path (line 41) | def _get_binary_path(bin_dir=None): function _download_cloudflared (line 47) | def _download_cloudflared(): function ensure_binary (line 69) | def ensure_binary() -> str: FILE: utils/cloudflare/process_reader.py class ProcessReader (line 14) | class ProcessReader: method __init__ (line 15) | def __init__(self, log_file=None): method set_log_file (line 25) | def set_log_file(self, log_file): method _append_log (line 28) | def _append_log(self, line): method _reader (line 40) | def _reader(self): method start (line 66) | def start(self, process, loop): method wait_for_url (line 76) | async def wait_for_url(self, timeout): method stop (line 82) | def stop(self): method get_url (line 90) | def get_url(self): method get_last_error (line 93) | def get_last_error(self): method get_recent_logs (line 96) | def get_recent_logs(self): FILE: utils/cloudflare/state.py function _get_tunnel_config (line 7) | def _get_tunnel_config(cfg): function load_tunnel_state (line 14) | def load_tunnel_state(): function persist_tunnel_state (line 28) | def persist_tunnel_state( function clear_tunnel_state (line 56) | def clear_tunnel_state(log_file=None, previous_host=None, master_host=No... function resolve_restore_master_host (line 67) | def resolve_restore_master_host(previous_master_host): FILE: utils/cloudflare/tunnel.py class CloudflareTunnelManager (line 19) | class CloudflareTunnelManager: method __init__ (line 20) | def __init__(self): method base_dir (line 36) | def base_dir(self): method _restore_state (line 39) | def _restore_state(self): method start_tunnel (line 56) | async def start_tunnel(self): method stop_tunnel (line 156) | async def stop_tunnel(self): method get_status (line 190) | def get_status(self): FILE: utils/config.py function _config_path (line 19) | def _config_path(): function get_default_config (line 22) | def get_default_config(): function _merge_with_defaults (line 47) | def _merge_with_defaults(data, defaults): function invalidate_config_cache (line 68) | def invalidate_config_cache(): function load_config (line 75) | def load_config(): function save_config (line 99) | def save_config(config): function config_transaction (line 120) | async def config_transaction(): function ensure_config_exists (line 131) | def ensure_config_exists(): function get_worker_timeout_seconds (line 141) | def get_worker_timeout_seconds(default: int = HEARTBEAT_TIMEOUT) -> int: function is_master_delegate_only (line 160) | def is_master_delegate_only() -> bool: FILE: utils/crop_model_patch.py function crop_model_cond (line 10) | def crop_model_cond(model, crop_regions, init_size, canvas_size, tile_si... class ModelPatchCropper (line 44) | class ModelPatchCropper: method __init__ (line 47) | def __init__(self, patch): method __del__ (line 69) | def __del__(self): method crop (line 74) | def crop(self, crop_regions, canvas_size, latent_crop=True): FILE: utils/exceptions.py class DistributedError (line 4) | class DistributedError(Exception): class WorkerError (line 8) | class WorkerError(DistributedError): method __init__ (line 11) | def __init__(self, message, worker_id=None): class WorkerTimeoutError (line 16) | class WorkerTimeoutError(WorkerError): class WorkerNotAvailableError (line 20) | class WorkerNotAvailableError(WorkerError): class JobQueueError (line 24) | class JobQueueError(DistributedError): class TileCollectionError (line 28) | class TileCollectionError(DistributedError): class ProcessError (line 32) | class ProcessError(DistributedError): method __init__ (line 35) | def __init__(self, message, pid=None, worker_id=None): class TunnelError (line 41) | class TunnelError(DistributedError): FILE: utils/image.py function tensor_to_pil (line 8) | def tensor_to_pil(img_tensor, batch_index=0): function pil_to_tensor (line 12) | def pil_to_tensor(image): function ensure_contiguous (line 20) | def ensure_contiguous(tensor): FILE: utils/logging.py function is_debug_enabled (line 15) | def is_debug_enabled(): function debug_log (line 36) | def debug_log(message): function log (line 41) | def log(message): FILE: utils/network.py function get_client_session (line 14) | async def get_client_session(): function cleanup_client_session (line 28) | async def cleanup_client_session(): function handle_api_error (line 35) | async def handle_api_error(request, error, status=500): function get_server_port (line 46) | def get_server_port(): function get_server_loop (line 51) | def get_server_loop(): function normalize_host (line 57) | def normalize_host(value): function _split_host_and_port (line 69) | def _split_host_and_port(host): function build_worker_url (line 88) | def build_worker_url(worker, endpoint=""): function probe_worker (line 108) | async def probe_worker(worker_url: str, timeout: float = 5.0) -> dict | ... function build_master_url (line 139) | def build_master_url(config=None, prompt_server_instance=None): function build_master_callback_url (line 185) | def build_master_callback_url(worker, config=None, prompt_server_instanc... FILE: utils/process.py function is_process_alive (line 9) | def is_process_alive(pid): function terminate_process (line 24) | def terminate_process(process, timeout=5): function get_python_executable (line 34) | def get_python_executable(): FILE: utils/trace_logger.py function trace_prefix (line 4) | def trace_prefix(trace_execution_id: str) -> str: function trace_debug (line 8) | def trace_debug(trace_execution_id: str, message: str) -> None: function trace_info (line 12) | def trace_info(trace_execution_id: str, message: str) -> None: FILE: utils/usdu_managment.py function _send_heartbeat_to_master (line 28) | async def _send_heartbeat_to_master(multi_job_id, master_url, worker_id): FILE: utils/usdu_utils.py function tensor_to_pil (line 14) | def tensor_to_pil(img_tensor, batch_index=0): function pil_to_tensor (line 20) | def pil_to_tensor(image): function controlnet_hint_to_pil (line 29) | def controlnet_hint_to_pil(tensor, batch_index=0): function pil_to_controlnet_hint (line 33) | def pil_to_controlnet_hint(img): function crop_tensor (line 37) | def crop_tensor(tensor, region): function resize_tensor (line 43) | def resize_tensor(tensor, size, mode="nearest-exact"): function get_crop_region (line 49) | def get_crop_region(mask, pad=0): function fix_crop_region (line 65) | def fix_crop_region(region, image_size): function expand_crop (line 76) | def expand_crop(region, width, height, target_width, target_height): function resize_region (line 115) | def resize_region(region, init_size, resize_size): function pad_image (line 127) | def pad_image(image, left_pad, right_pad, top_pad, bottom_pad, fill=Fals... function pad_image2 (line 169) | def pad_image2(image, left_pad, right_pad, top_pad, bottom_pad, fill=Fal... function pad_tensor (line 206) | def pad_tensor(tensor, left_pad, right_pad, top_pad, bottom_pad, fill=Fa... function resize_and_pad_image (line 242) | def resize_and_pad_image(image, width, height, fill=False, blur=False): function resize_and_pad_tensor (line 269) | def resize_and_pad_tensor(tensor, width, height, fill=False, blur=False): function crop_controlnet (line 297) | def crop_controlnet(cond_dict, region, init_size, canvas_size, tile_size... function region_intersection (line 315) | def region_intersection(region1, region2): function crop_gligen (line 335) | def crop_gligen(cond_dict, region, init_size, canvas_size, tile_size, w_... function crop_area (line 381) | def crop_area(cond_dict, region, init_size, canvas_size, tile_size, w_pa... function crop_mask (line 415) | def crop_mask(cond_dict, region, init_size, canvas_size, tile_size, w_pa... function crop_reference_latents (line 445) | def crop_reference_latents(cond_dict, region, init_size, canvas_size, ti... function crop_cond (line 506) | def crop_cond(cond, region, init_size, canvas_size, tile_size, w_pad=0, ... FILE: web/apiClient.js function createApiClient (line 4) | function createApiClient(baseUrl) { FILE: web/constants.js constant BUTTON_STYLES (line 1) | const BUTTON_STYLES = { constant STATUS_COLORS (line 25) | const STATUS_COLORS = { constant UI_COLORS (line 32) | const UI_COLORS = { constant PULSE_ANIMATION_CSS (line 44) | const PULSE_ANIMATION_CSS = ` constant UI_STYLES (line 132) | const UI_STYLES = { constant TIMEOUTS (line 172) | const TIMEOUTS = { constant ENDPOINTS (line 194) | const ENDPOINTS = { constant NODE_CLASSES (line 225) | const NODE_CLASSES = { function generateUUID (line 233) | function generateUUID() { FILE: web/distributedValue.js constant NODE_CLASS (line 4) | const NODE_CLASS = "DistributedValue"; constant CONVERTED_WIDGET (line 5) | const CONVERTED_WIDGET = "converted-widget"; constant DYNAMIC_DEFAULT_WIDGET (line 6) | const DYNAMIC_DEFAULT_WIDGET = "_dv_default"; constant DYNAMIC_WORKER_WIDGET_PREFIX (line 7) | const DYNAMIC_WORKER_WIDGET_PREFIX = "_dv_worker_"; constant WORKERS_CHANGED_EVENT (line 8) | const WORKERS_CHANGED_EVENT = "distributed:workers-changed"; function filterEnabledWorkers (line 13) | function filterEnabledWorkers(workers) { function fetchWorkers (line 18) | async function fetchWorkers() { function getRawDefaultWidget (line 29) | function getRawDefaultWidget(node) { function getRawWorkerValuesWidget (line 33) | function getRawWorkerValuesWidget(node) { function getDynamicDefaultWidget (line 37) | function getDynamicDefaultWidget(node) { function getDynamicWorkerWidgets (line 41) | function getDynamicWorkerWidgets(node) { function hideWidgetForGood (line 45) | function hideWidgetForGood(node, widget, suffix = "") { function hideRawWidgets (line 66) | function hideRawWidgets(node) { function removeDynamicDefaultWidget (line 71) | function removeDynamicDefaultWidget(node) { function removeDynamicWorkerWidgets (line 78) | function removeDynamicWorkerWidgets(node) { function readWorkerStore (line 87) | function readWorkerStore(node) { function writeWorkerStore (line 98) | function writeWorkerStore(node, store) { function normalizeComboOptions (line 104) | function normalizeComboOptions(options) { function resolveGraphLink (line 111) | function resolveGraphLink(graph, linkId) { function detectTargetType (line 125) | function detectTargetType(node) { function normalizeNumber (line 180) | function normalizeNumber(value, fallback) { function getDefaultInitialValue (line 185) | function getDefaultInitialValue(node, inputType, comboOptions) { function setRawDefaultValue (line 202) | function setRawDefaultValue(node, value) { function serializeWorkerStoreFromWidgets (line 208) | function serializeWorkerStoreFromWidgets(node, inputType, comboOptions) { function updateWorkerStoreTypeMetadata (line 232) | function updateWorkerStoreTypeMetadata(node, inputType, comboOptions) { function createDynamicDefaultWidget (line 243) | function createDynamicDefaultWidget(node, inputType, comboOptions) { function getWorkerInitialValue (line 297) | function getWorkerInitialValue(store, key, workerId, inputType, comboOpt... function createWorkerWidgets (line 319) | function createWorkerWidgets(node, workers, inputType, comboOptions) { function rebuildWidgets (line 384) | function rebuildWidgets(node) { function refreshNodeWorkers (line 413) | function refreshNodeWorkers(node, workers) { function refreshTrackedNodes (line 419) | async function refreshTrackedNodes(workers = null) { function attachWorkersChangedListener (line 426) | function attachWorkersChangedListener() { method nodeCreated (line 444) | async nodeCreated(node) { FILE: web/executionUtils.js function setupInterceptor (line 6) | function setupInterceptor(extension) { function executeParallelDistributed (line 25) | async function executeParallelDistributed(extension, promptWrapper) { function performPreflightCheck (line 108) | async function performPreflightCheck(extension, workers) { FILE: web/image_batch_divider.js constant BATCH_DIVIDER_NODES (line 4) | const BATCH_DIVIDER_NODES = { method nodeCreated (line 11) | async nodeCreated(node) { method nodeBeforeRemove (line 83) | nodeBeforeRemove(node) { FILE: web/main.js constant WORKERS_CHANGED_EVENT (line 16) | const WORKERS_CHANGED_EVENT = "distributed:workers-changed"; class DistributedExtension (line 18) | class DistributedExtension { method constructor (line 19) | constructor() { method log (line 61) | log(message, level = "info") { method injectStyles (line 70) | injectStyles() { method enabledWorkers (line 97) | get enabledWorkers() { method isEnabled (line 101) | get isEnabled() { method isMasterParticipationEnabled (line 105) | isMasterParticipationEnabled() { method isMasterFallbackActive (line 109) | isMasterFallbackActive() { method isMasterParticipating (line 113) | isMasterParticipating() { method updateMasterParticipation (line 117) | async updateMasterParticipation(enabled) { method loadConfig (line 133) | async loadConfig() { method _emitWorkersChanged (line 162) | _emitWorkersChanged() { method _applyMasterHost (line 171) | _applyMasterHost(host) { method _parseHostInput (line 181) | _parseHostInput(value) { method updateTunnelUIElements (line 185) | updateTunnelUIElements(isRunning, isStarting) { method refreshTunnelStatus (line 189) | async refreshTunnelStatus() { method handleTunnelToggle (line 193) | async handleTunnelToggle(button) { method updateWorkerEnabled (line 197) | async updateWorkerEnabled(workerId, enabled) { method _updateSetting (line 229) | async _updateSetting(key, value) { method registerSidebarTab (line 269) | registerSidebarTab() { method onPanelOpen (line 289) | onPanelOpen() { method onPanelClose (line 298) | onPanelClose() { method _applyNodes2Style (line 317) | _applyNodes2Style() { method _parseColorToRgba (line 323) | _parseColorToRgba(colorValue) { method _isPanelLightTheme (line 363) | _isPanelLightTheme() { method _applyThemeToneClass (line 384) | _applyThemeToneClass() { method _startThemeObserver (line 391) | _startThemeObserver() { method _stopThemeObserver (line 411) | _stopThemeObserver() { method _setupNodes2Listener (line 419) | _setupNodes2Listener() { method setupInterceptor (line 431) | setupInterceptor() { method updateWorkerCard (line 435) | updateWorkerCard(workerId, newStatus) { method cleanup (line 442) | cleanup() { method getMasterUrl (line 456) | getMasterUrl() { method detectMasterIP (line 460) | async detectMasterIP() { method _handleInterruptWorkers (line 464) | _handleInterruptWorkers(button) { method _handleClearMemory (line 468) | _handleClearMemory(button) { method setup (line 475) | async setup() { FILE: web/masterDetection.js function detectMasterIP (line 3) | async function detectMasterIP(extension) { FILE: web/sidebar/actionsSection.js function renderActionsSection (line 3) | function renderActionsSection(extension) { FILE: web/sidebar/settingsSection.js function renderSettingsSection (line 3) | function renderSettingsSection(extension) { FILE: web/sidebar/workersSection.js function renderWorkersSection (line 3) | function renderWorkersSection(extension) { FILE: web/sidebarRenderer.js function updateWorkerCard (line 7) | function updateWorkerCard(extension, workerId, newStatus = {}) { function renderSidebarContent (line 36) | async function renderSidebarContent(extension, el) { FILE: web/stateManager.js function createStateManager (line 1) | function createStateManager() { FILE: web/tunnelManager.js function updateTunnelUIElements (line 1) | function updateTunnelUIElements(extension, isRunning, isStarting) { function refreshTunnelStatus (line 58) | async function refreshTunnelStatus(extension) { function handleTunnelToggle (line 75) | async function handleTunnelToggle(extension, button) { FILE: web/ui.js class DistributedUI (line 128) | class DistributedUI { method constructor (line 129) | constructor() { method createStatusDot (line 134) | createStatusDot(id, color = "#666", title = "Status") { method createButton (line 142) | createButton(text, onClick, customStyle = "") { method createButtonGroup (line 151) | createButtonGroup(buttons, style = "") { method createWorkerControls (line 158) | createWorkerControls(workerId, handlers = {}) { method createFormGroup (line 190) | createFormGroup(label, value, id, type = "text", placeholder = "") { method createInfoBox (line 213) | createInfoBox(text) { method addHoverEffect (line 221) | addHoverEffect(element, onHover, onLeave) { method createCard (line 226) | createCard(type = 'worker', options = {}) { method createCardColumn (line 259) | createCardColumn(type = 'checkbox', options = {}) { method createInfoRow (line 279) | createInfoRow(options = {}) { method createWorkerContent (line 286) | createWorkerContent() { method createSettingsForm (line 292) | createSettingsForm(fields = [], options = {}) { method createButtonHelper (line 332) | createButtonHelper(text, onClick, style) { method updateMasterDisplay (line 336) | updateMasterDisplay(extension) { method showToast (line 358) | showToast(app, severity, summary, detail, life = 3000) { method showCloudflareWarning (line 364) | showCloudflareWarning(extension, masterHost) { method updateStatusDot (line 368) | updateStatusDot(workerId, color, title, pulsing = false) { method showLogModal (line 394) | showLogModal(extension, workerId, logData, fetchLog = null) { method createWorkerSettingsForm (line 422) | createWorkerSettingsForm(extension, worker) { method createSettingsToggle (line 426) | createSettingsToggle() { method createCheckboxOrIconColumn (line 446) | createCheckboxOrIconColumn(config, data, extension) { method createStatusDotHelper (line 516) | createStatusDotHelper(config, data, extension) { method createSettingsToggleHelper (line 544) | createSettingsToggleHelper(expandedId, extension) { method createControlsSection (line 561) | createControlsSection(config, data, extension, isRemote) { method createSettingsSection (line 649) | createSettingsSection(config, data, extension) { method createMasterSettingsForm (line 681) | createMasterSettingsForm(extension, data) { method addPlaceholderHover (line 760) | addPlaceholderHover(card, leftColumn, entityType) { method renderEntityCard (line 777) | renderEntityCard(entityType, data, extension) { FILE: web/ui/buttonHelpers.js function createButtonHelper (line 1) | function createButtonHelper(ui, text, onClick, style) { function createCheckboxSetting (line 5) | function createCheckboxSetting(id, label, tooltip, checked, onChange) { function createNumberSetting (line 28) | function createNumberSetting(id, label, tooltip, value, min, step, onCha... FILE: web/ui/cloudflareWarning.js function showCloudflareWarning (line 1) | function showCloudflareWarning(extension, masterHost) { FILE: web/ui/entityCard.js function renderEntityCard (line 4) | function renderEntityCard(ui, cardConfigs, entityType, data, extension) { FILE: web/ui/logModal.js function formatFileSize (line 3) | function formatFileSize(bytes) { function createLogModal (line 9) | function createLogModal() { FILE: web/ui/settingsForm.js function createWorkerSettingsForm (line 4) | function createWorkerSettingsForm(ui, extension, worker) { FILE: web/urlUtils.js function normalizeWorkerUrl (line 1) | function normalizeWorkerUrl(rawUrl) { function parseHostInput (line 24) | function parseHostInput(value) { function buildWorkerUrl (line 43) | function buildWorkerUrl(worker, endpoint = "", windowLocation = window.l... function buildWorkerWebSocketUrl (line 70) | function buildWorkerWebSocketUrl(workerUrl) { function getMasterUrl (line 76) | function getMasterUrl(config, windowLocation = window.location, log = nu... FILE: web/workerLifecycle.js function setStatusDotClass (line 10) | function setStatusDotClass(dot, statusClass) { function setButtonClass (line 26) | function setButtonClass(button, className) { function setButtonVisibility (line 36) | function setButtonVisibility(button, visible) { function checkAllWorkerStatuses (line 44) | async function checkAllWorkerStatuses(extension) { function checkMasterStatus (line 84) | async function checkMasterStatus(extension) { function getWorkerUrl (line 138) | function getWorkerUrl(extension, worker, endpoint = "") { function checkWorkerStatus (line 142) | async function checkWorkerStatus(extension, worker) { function launchWorker (line 207) | async function launchWorker(extension, workerId) { function stopWorker (line 274) | async function stopWorker(extension, workerId) { function clearLaunchingFlag (line 339) | async function clearLaunchingFlag(extension, workerId) { function loadManagedWorkers (line 348) | async function loadManagedWorkers(extension) { function updateWorkerControls (line 372) | function updateWorkerControls(extension, workerId) { function viewWorkerLog (line 439) | async function viewWorkerLog(extension, workerId, isRemote = false) { function refreshLog (line 493) | async function refreshLog(extension, workerId, silent = false) { function startLogAutoRefresh (line 537) | function startLogAutoRefresh(extension, workerId) { function stopLogAutoRefresh (line 547) | function stopLogAutoRefresh(extension) { function toggleWorkerExpanded (line 554) | function toggleWorkerExpanded(extension, workerId) { FILE: web/workerSettings.js constant WORKERS_CHANGED_EVENT (line 6) | const WORKERS_CHANGED_EVENT = "distributed:workers-changed"; function emitWorkersChanged (line 8) | function emitWorkersChanged(extension) { function isRemoteWorker (line 17) | function isRemoteWorker(extension, worker) { function isCloudWorker (line 36) | function isCloudWorker(extension, worker) { function saveWorkerSettings (line 40) | async function saveWorkerSettings(extension, workerId) { function cancelWorkerSettings (line 200) | function cancelWorkerSettings(extension, workerId) { function deleteWorker (line 221) | async function deleteWorker(extension, workerId) { function addNewWorker (line 263) | async function addNewWorker(extension) { FILE: web/workerUtils.js function handleWorkerOperation (line 4) | async function handleWorkerOperation(extension, button, operation, succe... function handleInterruptWorkers (line 73) | async function handleInterruptWorkers(extension, button) { function handleClearMemory (line 82) | async function handleClearMemory(extension, button) { function findNodesByClass (line 90) | function findNodesByClass(apiPrompt, className) { function applyProbeResultToWorkerDot (line 97) | function applyProbeResultToWorkerDot(workerId, probeResult) { FILE: workers/__init__.py function get_worker_manager (line 6) | def get_worker_manager() -> WorkerProcessManager: FILE: workers/detection.py function is_local_worker (line 11) | async def is_local_worker(worker_config): function is_same_physical_host (line 23) | async def is_same_physical_host(worker_config): function get_machine_id (line 49) | def get_machine_id(): function is_docker_environment (line 64) | def is_docker_environment(): function is_runpod_environment (line 70) | def is_runpod_environment(): FILE: workers/process/launch_builder.py class LaunchCommandBuilder (line 10) | class LaunchCommandBuilder: method _extend_arg (line 13) | def _extend_arg(self, cmd, flag, value): method _extend_grouped_args (line 18) | def _extend_grouped_args(self, cmd, flag, values): method _get_runtime_args (line 25) | def _get_runtime_args(self): method _build_runtime_launch_args (line 33) | def _build_runtime_launch_args(self): method _find_windows_terminal (line 69) | def _find_windows_terminal(self): method build_launch_command (line 90) | def build_launch_command(self, worker_config, comfy_root): FILE: workers/process/lifecycle.py class ProcessLifecycle (line 21) | class ProcessLifecycle: method __init__ (line 24) | def __init__(self, manager): method launch_worker (line 27) | def launch_worker(self, worker_config, show_window=False): method stop_worker (line 118) | def stop_worker(self, worker_id): method get_managed_workers (line 165) | def get_managed_workers(self): method cleanup_all (line 182) | def cleanup_all(self): method _is_process_running (line 194) | def _is_process_running(self, pid): method _check_worker_process (line 198) | def _check_worker_process(self, worker_id, proc_info): method _kill_process_tree (line 210) | def _kill_process_tree(self, pid): FILE: workers/process/persistence.py class ProcessPersistence (line 5) | class ProcessPersistence: method __init__ (line 8) | def __init__(self, manager): method load_processes (line 11) | def load_processes(self): method save_processes (line 30) | def save_processes(self): FILE: workers/process/root_discovery.py class ComfyRootDiscovery (line 7) | class ComfyRootDiscovery: method _find_root_from_loaded_modules (line 10) | def _find_root_from_loaded_modules(self): method find_comfy_root (line 25) | def find_comfy_root(self): FILE: workers/process_manager.py class WorkerProcessManager (line 4) | class WorkerProcessManager: method __init__ (line 7) | def __init__(self): method find_comfy_root (line 15) | def find_comfy_root(self): method _find_windows_terminal (line 18) | def _find_windows_terminal(self): method build_launch_command (line 21) | def build_launch_command(self, worker_config, comfy_root): method launch_worker (line 24) | def launch_worker(self, worker_config, show_window=False): method stop_worker (line 27) | def stop_worker(self, worker_id): method get_managed_workers (line 30) | def get_managed_workers(self): method cleanup_all (line 33) | def cleanup_all(self): method load_processes (line 36) | def load_processes(self): method save_processes (line 39) | def save_processes(self): method _is_process_running (line 42) | def _is_process_running(self, pid): method _check_worker_process (line 45) | def _check_worker_process(self, worker_id, proc_info): method _kill_process_tree (line 48) | def _kill_process_tree(self, pid): FILE: workers/startup.py function auto_launch_workers (line 19) | def auto_launch_workers(): function delayed_auto_launch (line 79) | def delayed_auto_launch(): function async_cleanup_and_exit (line 87) | async def async_cleanup_and_exit(signum=None): function register_async_signals (line 114) | def register_async_signals(): function sync_cleanup (line 150) | def sync_cleanup(): FILE: workers/worker_monitor.py function is_process_alive (line 23) | def is_process_alive(pid): function monitor_and_run (line 41) | def monitor_and_run(master_pid, command):