Streamlined interface for generating images with AI in Krita. Inpaint and outpaint with optional text prompt, no tweaking required.
This report summarizes scanner evidence for Acly/krita-ai-diffusion, a Python project with 10,690 GitHub stars. SynthScan examined 69,284 lines of code across 177 source files, recording 976 pattern matches distributed across 12 syntactic categories. The legacy adjusted pattern signal is 19.0 (Elevated pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 664 finding(s).
Are imports declared and package/API names verified? 68 finding(s).
Are wrappers, guards, and repeated structures necessary? 386 finding(s).
Which changes need focused human review? 976 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 976 distinct pattern matches across 12 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_workflow.py | 1281 | (output_dir / "meta.json").write_text(json.dumps(meta, indent=4)) | COMMENT |
| LOW | tests/test_workflow.py | 1301 | # "target": [ | COMMENT |
| LOW | tests/test_workflow.py | 1321 | # "negative": "<redacted>", | COMMENT |
| LOW | tests/test_workflow.py | 1341 | # }, | COMMENT |
| LOW | tests/test_workflow.py | 1361 | # lineart = Image.create(Extent(3000, 2000)) | COMMENT |
| LOW | scripts/docker/requirements.txt | 1 | # This file was autogenerated by uv via the following command: | COMMENT |
| LOW | scripts/docker/requirements.txt | 21 | aiosignal==1.4.0 | COMMENT |
| LOW | scripts/docker/requirements.txt | 41 | argostranslate==1.11.0 | COMMENT |
| LOW | scripts/docker/requirements.txt | 61 | certifi==2026.7.22 | COMMENT |
| LOW | scripts/docker/requirements.txt | 81 | # huggingface-hub | COMMENT |
| LOW | scripts/docker/requirements.txt | 101 | # via comfyui-workflow-templates | COMMENT |
| LOW | scripts/docker/requirements.txt | 121 | ctranslate2==4.8.1 | COMMENT |
| LOW | scripts/docker/requirements.txt | 141 | # spandrel | COMMENT |
| LOW | scripts/docker/requirements.txt | 161 | # aiohttp | COMMENT |
| LOW | scripts/docker/requirements.txt | 181 | gitpython==3.1.59 | COMMENT |
| LOW | scripts/docker/requirements.txt | 201 | # weasel | COMMENT |
| LOW | scripts/docker/requirements.txt | 221 | # -r ComfyUI/custom_nodes/comfyui_controlnet_aux/requirements.txt | COMMENT |
| LOW | scripts/docker/requirements.txt | 241 | kornia==0.8.3 | COMMENT |
| LOW | scripts/docker/requirements.txt | 261 | markupsafe==3.0.3 | COMMENT |
| LOW | scripts/docker/requirements.txt | 281 | # via sympy | COMMENT |
| LOW | scripts/docker/requirements.txt | 301 | # -r ComfyUI/custom_nodes/comfyui_controlnet_aux/requirements.txt | COMMENT |
| LOW | scripts/docker/requirements.txt | 321 | # opencv-python-headless | COMMENT |
| LOW | scripts/docker/requirements.txt | 341 | # nvidia-cusolver | COMMENT |
| LOW | scripts/docker/requirements.txt | 361 | # nvidia-cusolver | COMMENT |
| LOW | scripts/docker/requirements.txt | 381 | # via | COMMENT |
| LOW | scripts/docker/requirements.txt | 401 | # onnxruntime | COMMENT |
| LOW | scripts/docker/requirements.txt | 421 | platformdirs==4.11.3 | COMMENT |
| LOW | scripts/docker/requirements.txt | 441 | # -r ComfyUI/requirements.txt | COMMENT |
| LOW | scripts/docker/requirements.txt | 461 | # via | COMMENT |
| LOW | scripts/docker/requirements.txt | 481 | # via pydantic-settings | COMMENT |
| LOW | scripts/docker/requirements.txt | 501 | regex==2026.7.19 | COMMENT |
| LOW | scripts/docker/requirements.txt | 521 | # referencing | COMMENT |
| LOW | scripts/docker/requirements.txt | 541 | # via | COMMENT |
| LOW | scripts/docker/requirements.txt | 581 | # via spacy | COMMENT |
| LOW | scripts/docker/requirements.txt | 601 | # albucore | COMMENT |
| LOW | scripts/docker/requirements.txt | 621 | # via | COMMENT |
| LOW | scripts/docker/requirements.txt | 641 | torchaudio==2.11.0 | COMMENT |
| LOW | scripts/docker/requirements.txt | 661 | # huggingface-hub | COMMENT |
| LOW | scripts/docker/requirements.txt | 681 | # spacy | COMMENT |
| LOW | scripts/docker/requirements.txt | 701 | typing-inspection==0.4.4 | COMMENT |
| LOW | scripts/docker/requirements.txt | 721 | # via ftfy | COMMENT |
| LOW | scripts/docker/requirements.txt | 741 | yarl==1.24.5 | COMMENT |
| LOW | ai_diffusion/ui/interval_slider.py | 1 | # From https://github.com/biolab/orange3 | COMMENT |
| LOW | ai_diffusion/backend/requirements/macos-mps.txt | 1 | # This file was autogenerated by uv via the following command: | COMMENT |
| LOW | ai_diffusion/backend/requirements/macos-mps.txt | 21 | # via albumentations | COMMENT |
| LOW | ai_diffusion/backend/requirements/macos-mps.txt | 41 | attrs==26.1.0 | COMMENT |
| LOW | ai_diffusion/backend/requirements/macos-mps.txt | 61 | # requests | COMMENT |
| LOW | ai_diffusion/backend/requirements/macos-mps.txt | 81 | # from https://pypi.org/simple | COMMENT |
| LOW | ai_diffusion/backend/requirements/macos-mps.txt | 101 | # via | COMMENT |
| LOW | ai_diffusion/backend/requirements/macos-mps.txt | 121 | flatbuffers==25.12.19 | COMMENT |
| LOW | ai_diffusion/backend/requirements/macos-mps.txt | 141 | # from https://pypi.org/simple | COMMENT |
| LOW | ai_diffusion/backend/requirements/macos-mps.txt | 161 | # from https://pypi.org/simple | COMMENT |
| LOW | ai_diffusion/backend/requirements/macos-mps.txt | 181 | iopath==0.1.10 | COMMENT |
| LOW | ai_diffusion/backend/requirements/macos-mps.txt | 201 | # via kornia | COMMENT |
| LOW | ai_diffusion/backend/requirements/macos-mps.txt | 221 | # via markdown-it-py | COMMENT |
| LOW | ai_diffusion/backend/requirements/macos-mps.txt | 241 | # thinc | COMMENT |
| LOW | ai_diffusion/backend/requirements/macos-mps.txt | 261 | # imageio | COMMENT |
| LOW | ai_diffusion/backend/requirements/macos-mps.txt | 281 | # from https://pypi.org/simple | COMMENT |
| LOW | ai_diffusion/backend/requirements/macos-mps.txt | 301 | # argostranslate | COMMENT |
| LOW | ai_diffusion/backend/requirements/macos-mps.txt | 321 | # torchvision | COMMENT |
| 375 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | tests/test_model.py | 118 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_model.py | 120 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_model.py | 130 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_model.py | 132 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_model.py | 302 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_model.py | 304 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_model.py | 440 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_model.py | 442 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_model.py | 593 | # ── document setup: two paint layers ────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_model.py | 598 | # ── region setup: each region linked to one layer ───────────────── | COMMENT |
| MEDIUM⚡ | tests/test_model.py | 605 | # ── build a job with two JobRegions, one per document layer ─────── | COMMENT |
| MEDIUM⚡ | tests/test_model.py | 612 | # ── apply with replace behavior ─────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_model.py | 673 | # ── regions ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_model.py | 680 | # ── job ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_model.py | 688 | # ── apply ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_model.py | 696 | # ── check: layer1 placed into a new group ───────────────────────── | COMMENT |
| MEDIUM | tests/test_model.py | 32 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_model.py | 34 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_model.py | 487 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_model.py | 489 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_model.py | 502 | # ── first call: a brand-new layer should be created ─────────────── | COMMENT |
| MEDIUM | tests/test_model.py | 650 | # ── document setup ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_model.py | 717 | # ── check: old layers hidden, new result layers visible ─────────── | COMMENT |
| MEDIUM | tests/test_layer.py | 12 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_layer.py | 14 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_layer.py | 33 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_layer.py | 35 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_layer.py | 178 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_layer.py | 180 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_layer.py | 258 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_layer.py | 260 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_connection.py | 15 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_connection.py | 17 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_connection.py | 29 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_connection.py | 31 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_persistence.py | 25 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_persistence.py | 27 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_persistence.py | 52 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_persistence.py | 54 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_persistence.py | 76 | # ── model 1: set several tracked properties ────────────────────── | COMMENT |
| MEDIUM | tests/test_persistence.py | 92 | # ── model 2: fresh doc, load recently used ──────────────────────── | COMMENT |
| MEDIUM | tests/test_persistence.py | 112 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_persistence.py | 114 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_persistence.py | 148 | # ── restore from the same krita_doc ────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_persistence.py | 175 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_persistence.py | 177 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_persistence.py | 207 | # ── restore ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/mock/krita.py | 16 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/mock/krita.py | 18 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/mock/krita.py | 37 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/mock/krita.py | 39 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/mock/krita.py | 60 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/mock/krita.py | 62 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/mock/krita.py | 83 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/mock/krita.py | 85 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/mock/krita.py | 98 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/mock/krita.py | 100 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/mock/krita.py | 116 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/mock/krita.py | 118 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/mock/krita.py | 131 | # --------------------------------------------------------------------------- | COMMENT |
| 30 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH⚡ | tests/test_model.py | 315 | client.push(ClientMessage(ClientEvent.queued, job.id)) | CODE |
| HIGH⚡ | tests/test_model.py | 319 | client.push(ClientMessage(ClientEvent.progress, job.id, progress=0.5)) | CODE |
| HIGH⚡ | tests/test_model.py | 326 | client.push(ClientMessage(ClientEvent.finished, job.id, images=result_images)) | CODE |
| HIGH⚡ | tests/test_model.py | 340 | client.push(ClientMessage(ClientEvent.queued, job.id)) | CODE |
| HIGH⚡ | tests/test_model.py | 343 | client.push(ClientMessage(ClientEvent.upload, job.id, progress=0.3)) | CODE |
| HIGH⚡ | tests/test_model.py | 349 | client.push(ClientMessage(ClientEvent.progress, job.id, progress=0.6)) | CODE |
| HIGH⚡ | tests/test_model.py | 353 | client.push(ClientMessage(ClientEvent.interrupted, job.id)) | CODE |
| HIGH⚡ | tests/test_model.py | 366 | client.push(ClientMessage(ClientEvent.queued, job.id)) | CODE |
| HIGH⚡ | tests/test_model.py | 369 | client.push( | CODE |
| HIGH⚡ | tests/test_model.py | 389 | client.push(ClientMessage(ClientEvent.queued, job.id)) | CODE |
| HIGH⚡ | tests/test_model.py | 392 | client.push(ClientMessage(ClientEvent.progress, job.id, progress=0.5)) | CODE |
| HIGH⚡ | tests/test_model.py | 396 | client.push(ClientMessage(ClientEvent.error, job.id, error="CUDA out of memory")) | CODE |
| HIGH⚡ | tests/test_model.py | 411 | client.push(ClientMessage(ClientEvent.queued, job1.id)) | CODE |
| HIGH⚡ | tests/test_model.py | 413 | client.push(ClientMessage(ClientEvent.progress, job1.id, progress=0.4)) | CODE |
| HIGH⚡ | tests/test_model.py | 418 | client.push(ClientMessage(ClientEvent.disconnected, "")) | CODE |
| HIGH⚡ | tests/test_model.py | 419 | client.push(ClientMessage(ClientEvent.connected, "")) | CODE |
| HIGH⚡ | tests/test_model.py | 426 | client.push(ClientMessage(ClientEvent.queued, job2.id)) | CODE |
| HIGH⚡ | tests/test_model.py | 428 | client.push(ClientMessage(ClientEvent.progress, job2.id, progress=0.7)) | CODE |
| HIGH⚡ | tests/test_model.py | 432 | client.push(ClientMessage(ClientEvent.finished, job2.id, images=result_images)) | CODE |
| HIGH | scripts/benchmark_html.py | 647 | const rightColIdx = rightSelect ? (parseInt(rightSelect) + 1) : null; | CODE |
| HIGH | scripts/benchmark_html.py | 652 | if (rightColIdx && rightColIdx < cells.length) { | CODE |
| HIGH | ai_diffusion/settings.py | 181 | ServerMode.undefined, | CODE |
| HIGH | ai_diffusion/ui/settings.py | 560 | self._server_mode.setVisible(mode is not ServerMode.undefined) | CODE |
| HIGH | ai_diffusion/model/properties.py | 186 | return value.toString() | CODE |
| HIGH | ai_diffusion/model/region.py | 58 | new_ids_string = ",".join(id.toString() for id in ids) | CODE |
| HIGH | ai_diffusion/model/root.py | 127 | elif settings.server_mode in [ServerMode.undefined, ServerMode.external]: | CODE |
| HIGH | ai_diffusion/model/root.py | 143 | or settings.server_mode not in [ServerMode.undefined, ServerMode.external] | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | install.py | 24 | print("Error: Unsupported operating system:", sys.platform, file=sys.stderr) | CODE |
| MEDIUM | install.py | 28 | print("Error: Krita pykrita folder does not exist:", pykrita, file=sys.stderr) | CODE |
| MEDIUM | install.py | 40 | print("Error: Existing file or folder at", link, file=sys.stderr) | CODE |
| LOW | tests/conftest.py | 250 | except Exception: | CODE |
| LOW | tests/test_server.py | 265 | except Exception: | CODE |
| LOW | tests/test_server.py | 285 | except Exception: | CODE |
| LOW | tests/test_text.py | 158 | except Exception as e: | CODE |
| LOW | tests/test_text.py | 163 | except Exception as e: | CODE |
| LOW | scripts/download_models.py | 169 | except Exception as e: | CODE |
| MEDIUM | scripts/download_models.py | 170 | print(f"Error downloading {model.name} (attempt {attempt}): {e}") | CODE |
| LOW | scripts/images.py | 121 | except Exception as e: | CODE |
| LOW | scripts/images.py | 189 | except Exception as e: | CODE |
| LOW | scripts/images.py | 216 | except Exception as e: | CODE |
| MEDIUM | scripts/images.py | 217 | print(f"Error: {e}", file=sys.stderr) | CODE |
| LOW | scripts/file_server.py | 76 | except Exception as e: | CODE |
| LOW | scripts/benchmark_html.py | 33 | except Exception as e: | CODE |
| LOW | scripts/benchmark_html.py | 111 | except Exception as e: | CODE |
| MEDIUM | scripts/benchmark_html.py | 112 | print(f"Error loading meta.json from {benchmark_dir}: {e}") | CODE |
| LOW | scripts/benchmark_html.py | 144 | except Exception: | CODE |
| LOW | scripts/benchmark_html.py | 582 | except Exception as e: | STRING |
| MEDIUM⚡ | scripts/benchmark_html.py | 707 | print(f"Error: Directory not found: {bench_dir}") | STRING |
| MEDIUM⚡ | scripts/benchmark_html.py | 710 | print(f"Error: Not a directory: {bench_dir}") | STRING |
| MEDIUM⚡ | scripts/benchmark_html.py | 715 | print("Error: At least one benchmark directory is required") | STRING |
| LOW | scripts/benchmark_html.py | 727 | except Exception as e: | STRING |
| MEDIUM | scripts/benchmark_html.py | 728 | print(f"Error: {e}") | STRING |
| LOW | ai_diffusion/files.py | 185 | except Exception as e: | CODE |
| LOW | ai_diffusion/persistence.py | 54 | except Exception as e: | CODE |
| LOW | ai_diffusion/persistence.py | 71 | except Exception as e: | CODE |
| LOW | ai_diffusion/persistence.py | 131 | except Exception as e: | CODE |
| LOW | ai_diffusion/persistence.py | 141 | except Exception as e: | CODE |
| LOW | ai_diffusion/persistence.py | 382 | except Exception as e: | CODE |
| MEDIUM | ai_diffusion/persistence.py | 51 | def from_settings(): | CODE |
| MEDIUM | ai_diffusion/persistence.py | 137 | def __del__(self): | CODE |
| LOW | ai_diffusion/style.py | 396 | except Exception as e: | CODE |
| LOW | ai_diffusion/util.py | 48 | except Exception: | CODE |
| LOW | ai_diffusion/util.py | 67 | except Exception: | CODE |
| LOW | ai_diffusion/platform_tools.py | 57 | except Exception: # noqa | CODE |
| LOW | ai_diffusion/platform_tools.py | 87 | except Exception as e: | CODE |
| LOW | ai_diffusion/eventloop.py | 47 | except Exception: # noqa | CODE |
| LOW | ai_diffusion/localization.py | 20 | except Exception as e: | CODE |
| LOW | ai_diffusion/localization.py | 45 | except Exception as e: | CODE |
| LOW | ai_diffusion/localization.py | 60 | except Exception as e: | CODE |
| LOW | ai_diffusion/localization.py | 72 | except Exception as e: | CODE |
| LOW | ai_diffusion/localization.py | 78 | except Exception as e: | CODE |
| LOW | ai_diffusion/document.py | 357 | except Exception: | CODE |
| LOW | ai_diffusion/settings.py | 561 | except Exception as e: | CODE |
| LOW | ai_diffusion/settings.py | 579 | except Exception as e: | CODE |
| LOW | ai_diffusion/layer.py | 455 | except Exception as e: | CODE |
| MEDIUM | ai_diffusion/layer.py | 442 | def active(self): | CODE |
| LOW | ai_diffusion/image.py | 535 | except Exception as e: | CODE |
| LOW | ai_diffusion/ui/server.py | 960 | except Exception: | CODE |
| LOW | ai_diffusion/ui/server.py | 1013 | except Exception as e: | CODE |
| LOW | ai_diffusion/ui/server.py | 1026 | except Exception as e: | CODE |
| LOW | ai_diffusion/ui/server.py | 1052 | except Exception as e: | CODE |
| LOW | ai_diffusion/ui/server.py | 1065 | except Exception as e: | CODE |
| LOW | ai_diffusion/ui/server.py | 1143 | except Exception as e: | CODE |
| LOW | ai_diffusion/ui/server.py | 1174 | except Exception as e: | CODE |
| LOW | ai_diffusion/ui/server.py | 1203 | except Exception as e: | CODE |
| LOW | ai_diffusion/ui/server.py | 1216 | except Exception: | CODE |
| MEDIUM | ai_diffusion/ui/server.py | 1031 | def _install(self): | CODE |
| 72 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_resolution.py | 39 | def test_scaled_extent_no_scaling(): | CODE |
| LOW⚡ | tests/test_resolution.py | 53 | def test_scaled_extent_upscale(): | CODE |
| LOW⚡ | tests/test_resolution.py | 63 | def test_scaled_extent_upscale_small(): | CODE |
| LOW⚡ | tests/test_resolution.py | 72 | def test_scaled_extent_downscale(): | CODE |
| LOW | tests/test_resolution.py | 98 | def test_compute_checkpoint_resolution(extent: Extent, preferred: int, expected): | CODE |
| LOW | tests/test_resolution.py | 152 | def test_prepare_highres_inpaint(): | CODE |
| LOW | tests/test_resolution.py | 230 | def test_prepare_no_downscale(input: Extent): | CODE |
| LOW | tests/test_resolution.py | 253 | def test_prepare_max_pixel_count(input, sd_ver, expected_initial, expected_desired): | CODE |
| LOW | tests/test_resolution.py | 276 | def test_prepare_resolution_multiplier(input, multiplier, expected_initial, expected_desired): | CODE |
| LOW | tests/test_resolution.py | 287 | def test_prepare_resolution_multiplier_inputs(multiplier): | CODE |
| LOW | tests/test_resolution.py | 306 | def test_prepare_resolution_multiplier_max(multiplier, expected): | CODE |
| LOW | tests/test_resources.py | 40 | def test_same_name_same_model(): | CODE |
| LOW⚡ | tests/test_model.py | 308 | async def test_job_queued_progress_finished(workflows_dir: Path): | CODE |
| LOW⚡ | tests/test_model.py | 333 | async def test_job_queued_upload_progress_interrupted(workflows_dir: Path): | CODE |
| LOW⚡ | tests/test_model.py | 359 | async def test_job_payment_required(workflows_dir: Path): | CODE |
| LOW⚡ | tests/test_model.py | 382 | async def test_job_queued_progress_error(workflows_dir: Path): | CODE |
| LOW⚡ | tests/test_model.py | 403 | async def test_job_disconnect_reconnect(workflows_dir: Path): | CODE |
| LOW⚡ | tests/test_model.py | 586 | async def test_apply_region_replace(workflows_dir: Path): | CODE |
| LOW | tests/conftest.py | 41 | def pytest_collection_modifyitems(session, config, items: list[pytest.Item]): | CODE |
| LOW | tests/test_comfy_workflow.py | 33 | def test_inputs_required_and_merged(info: ComfyObjectInfo): | CODE |
| LOW | tests/test_comfy_workflow.py | 49 | def test_params_defaults_for_various_types(info: ComfyObjectInfo): | CODE |
| LOW | tests/test_comfy_workflow.py | 63 | def test_options_for_combo_types(info: ComfyObjectInfo): | CODE |
| LOW | tests/test_comfy_workflow.py | 107 | def test_defaults_legacy_combo(info: ComfyObjectInfo): | CODE |
| LOW | tests/test_layer.py | 69 | def test_active_layer_changes(): | CODE |
| LOW | tests/test_layer.py | 87 | def test_layer_removal_and_active_change_together(): | CODE |
| LOW | tests/test_layer.py | 114 | def test_layer_moved_to_different_parent(): | CODE |
| LOW⚡ | tests/test_layer.py | 183 | def test_active_already_observed(): | CODE |
| LOW | tests/test_layer.py | 203 | def test_active_in_tree_but_manager_stale(): | CODE |
| LOW | tests/test_layer.py | 225 | def test_active_not_in_tree_falls_back_to_last_active(): | CODE |
| LOW⚡ | tests/test_connection.py | 35 | async def test_connect_success_and_disconnect(): | CODE |
| LOW | tests/test_connection.py | 60 | async def test_connect_network_error(): | CODE |
| LOW | tests/test_connection.py | 80 | async def test_connect_missing_resources(): | CODE |
| LOW | tests/test_connection.py | 100 | async def test_listen_messages_and_reconnect(): | CODE |
| LOW | tests/test_image.py | 23 | def test_extent_scale_pixel_count(): | CODE |
| LOW | tests/test_image.py | 115 | def test_write_ai_generated_xmp(tmp_path, format, workflow_kind, source_type): | CODE |
| LOW | tests/test_image.py | 129 | def test_image_from_packed_bytes(): | CODE |
| LOW | tests/test_image.py | 142 | def test_image_compress_speed(): | CODE |
| LOW | tests/test_image.py | 226 | def test_image_collection_each(): | CODE |
| LOW | tests/test_image.py | 232 | def test_image_collection_map(): | CODE |
| LOW | tests/test_image.py | 338 | def test_mask_to_image_offset(): | CODE |
| LOW | tests/test_image.py | 350 | def test_mask_to_image_no_extent(): | CODE |
| LOW | tests/test_image.py | 383 | def test_save_png_w_itxt_valid(tmp_path): | CODE |
| LOW | tests/test_image.py | 412 | def test_save_png_w_itxt_invalid(tmp_path): | CODE |
| LOW | tests/test_image.py | 424 | def test_save_png_with_metadata(tmp_path): | CODE |
| LOW | tests/test_image.py | 437 | def test_read_png_text_preserves_newlines(tmp_path): | CODE |
| LOW | tests/test_workflow.py | 234 | def test_anima_lllite_control_workflow(): | CODE |
| LOW | tests/test_workflow.py | 370 | def test_prepare_prompt_layers(arch: Arch): | CODE |
| LOW | tests/test_workflow.py | 402 | def test_prepare_prompt_instructions(): | CODE |
| LOW | tests/test_workflow.py | 420 | def test_prepare_prompt_inpaint(arch): | CODE |
| LOW | tests/test_workflow.py | 513 | def test_inpaint_odd_resolution(qtapp, client): | CODE |
| LOW | tests/test_workflow.py | 528 | def test_inpaint_area_conditioning(qtapp, client): | CODE |
| LOW | tests/test_workflow.py | 543 | def test_inpaint_remove_object(qtapp, client): | CODE |
| LOW | tests/test_workflow.py | 616 | def test_differential_diffusion(qtapp, client): | CODE |
| LOW | tests/test_workflow.py | 826 | def test_control_canny_downscale(qtapp, client): | CODE |
| LOW | tests/test_workflow.py | 835 | def test_create_control_image(qtapp, client: Client, mode): | CODE |
| LOW | tests/test_workflow.py | 854 | def test_create_open_pose_vector(qtapp, client: Client): | CODE |
| LOW | tests/test_workflow.py | 918 | def test_style_composition_sdxl(qtapp, client): | CODE |
| LOW | tests/test_workflow.py | 1071 | def test_fill_control_max_pixels(qtapp, client): | CODE |
| LOW | tests/test_workflow.py | 1093 | def test_outpaint_resolution_multiplier(qtapp, client): | CODE |
| LOW | tests/test_server.py | 248 | def test_rename_extracted_folder(scenario): | CODE |
| 80 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/conftest.py | 167 | except asyncio.CancelledError: | CODE |
| HIGH | scripts/download_models.py | 43 | except ImportError: | CODE |
| HIGH | scripts/design.py | 144 | except RuntimeError: | CODE |
| HIGH | scripts/design.py | 148 | except RuntimeError: | CODE |
| HIGH | scripts/design.py | 249 | except RuntimeError: | CODE |
| HIGH | scripts/design.py | 253 | except RuntimeError: | CODE |
| HIGH | scripts/design.py | 258 | except RuntimeError: | CODE |
| HIGH | scripts/design.py | 265 | except RuntimeError: | CODE |
| HIGH | ai_diffusion/style.py | 167 | except KeyError: | CODE |
| HIGH | ai_diffusion/platform_tools.py | 57 | except Exception: # noqa | CODE |
| HIGH | ai_diffusion/eventloop.py | 47 | except Exception: # noqa | CODE |
| HIGH | ai_diffusion/extension.py | 34 | except ImportError: | CODE |
| HIGH | ai_diffusion/pose.py | 134 | except ValueError: | CODE |
| HIGH | ai_diffusion/backend/server.py | 519 | except asyncio.CancelledError: | CODE |
| HIGH | ai_diffusion/backend/server.py | 534 | except asyncio.CancelledError: | CODE |
| HIGH | ai_diffusion/backend/cloud_client.py | 176 | except asyncio.CancelledError: | CODE |
| HIGH | ai_diffusion/backend/cloud_client.py | 313 | except asyncio.CancelledError: | CODE |
| HIGH | ai_diffusion/backend/network.py | 58 | except Exception: # noqa | CODE |
| HIGH | ai_diffusion/backend/comfy_client.py | 299 | except asyncio.CancelledError: | CODE |
| HIGH | ai_diffusion/backend/comfy_client.py | 441 | except asyncio.CancelledError: | CODE |
| HIGH | ai_diffusion/model/connection.py | 207 | except asyncio.CancelledError: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/conftest.py | 41 | CODE | |
| LOW | tests/conftest.py | 42 | CODE | |
| LOW | tests/test_service.py | 165 | CODE | |
| LOW | tests/test_workflow.py | 745 | CODE | |
| LOW | tests/test_server.py | 270 | CODE | |
| LOW | tests/test_client.py | 67 | CODE | |
| LOW | scripts/download_models.py | 178 | CODE | |
| LOW | scripts/download_models.py | 245 | CODE | |
| LOW | scripts/benchmark_html.py | 148 | CODE | |
| LOW | ai_diffusion/persistence.py | 361 | CODE | |
| LOW | ai_diffusion/style.py | 156 | CODE | |
| LOW | ai_diffusion/pose.py | 215 | CODE | |
| LOW | ai_diffusion/text.py | 159 | CODE | |
| LOW | ai_diffusion/text.py | 229 | CODE | |
| LOW | ai_diffusion/settings.py | 103 | CODE | |
| LOW | ai_diffusion/settings.py | 541 | CODE | |
| LOW | ai_diffusion/layer.py | 241 | CODE | |
| LOW | ai_diffusion/image.py | 496 | CODE | |
| LOW | ai_diffusion/ui/diffusion.py | 317 | CODE | |
| LOW | ai_diffusion/ui/server.py | 160 | CODE | |
| LOW | ai_diffusion/ui/server.py | 470 | CODE | |
| LOW | ai_diffusion/ui/server.py | 989 | CODE | |
| LOW | ai_diffusion/ui/server.py | 1210 | CODE | |
| LOW | ai_diffusion/ui/widget.py | 442 | CODE | |
| LOW | ai_diffusion/ui/generation.py | 256 | CODE | |
| LOW | ai_diffusion/ui/generation.py | 288 | CODE | |
| LOW | ai_diffusion/ui/generation.py | 953 | CODE | |
| LOW | ai_diffusion/ui/generation.py | 993 | CODE | |
| LOW | ai_diffusion/ui/theme.py | 56 | CODE | |
| LOW | ai_diffusion/ui/style.py | 834 | CODE | |
| LOW | ai_diffusion/ui/style.py | 932 | CODE | |
| LOW | ai_diffusion/ui/region.py | 279 | CODE | |
| LOW | ai_diffusion/ui/upscale.py | 250 | CODE | |
| LOW | ai_diffusion/ui/actions.py | 5 | CODE | |
| LOW | ai_diffusion/ui/settings.py | 590 | CODE | |
| LOW | ai_diffusion/ui/settings.py | 620 | CODE | |
| LOW | ai_diffusion/ui/settings_widgets.py | 309 | CODE | |
| LOW | ai_diffusion/ui/autocomplete.py | 160 | CODE | |
| LOW | ai_diffusion/backend/server.py | 834 | CODE | |
| LOW | ai_diffusion/backend/server.py | 870 | CODE | |
| LOW | ai_diffusion/backend/server.py | 340 | CODE | |
| LOW | ai_diffusion/backend/server.py | 640 | CODE | |
| LOW | ai_diffusion/backend/cloud_client.py | 228 | CODE | |
| LOW | ai_diffusion/backend/api.py | 351 | CODE | |
| LOW | ai_diffusion/backend/network.py | 377 | CODE | |
| LOW | ai_diffusion/backend/network.py | 44 | CODE | |
| LOW | ai_diffusion/backend/network.py | 223 | CODE | |
| LOW | ai_diffusion/backend/resources.py | 693 | CODE | |
| LOW | ai_diffusion/backend/workflow.py | 457 | CODE | |
| LOW | ai_diffusion/backend/workflow.py | 605 | CODE | |
| LOW | ai_diffusion/backend/workflow.py | 903 | CODE | |
| LOW | ai_diffusion/backend/workflow.py | 945 | CODE | |
| LOW | ai_diffusion/backend/workflow.py | 1247 | CODE | |
| LOW | ai_diffusion/backend/workflow.py | 1634 | CODE | |
| LOW | ai_diffusion/backend/workflow.py | 1777 | CODE | |
| LOW | ai_diffusion/backend/workflow.py | 1867 | CODE | |
| LOW | ai_diffusion/backend/workflow.py | 1969 | CODE | |
| LOW | ai_diffusion/backend/workflow.py | 260 | CODE | |
| LOW | ai_diffusion/backend/comfy_client.py | 899 | CODE | |
| LOW | ai_diffusion/backend/comfy_client.py | 350 | CODE | |
| 18 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_model.py | 4 | CODE | |
| LOW | tests/test_layer.py | 3 | CODE | |
| LOW | tests/test_connection.py | 3 | CODE | |
| LOW | tests/test_persistence.py | 4 | CODE | |
| LOW | tests/mock/krita.py | 7 | CODE | |
| LOW | tests/mock/client.py | 3 | CODE | |
| LOW | ai_diffusion/persistence.py | 1 | CODE | |
| LOW | ai_diffusion/style.py | 1 | CODE | |
| LOW | ai_diffusion/__init__.py | 24 | CODE | |
| LOW | ai_diffusion/text.py | 1 | CODE | |
| LOW | ai_diffusion/document.py | 1 | CODE | |
| LOW | ai_diffusion/settings.py | 1 | CODE | |
| LOW | ai_diffusion/layer.py | 1 | CODE | |
| LOW | ai_diffusion/image.py | 1 | CODE | |
| LOW | ai_diffusion/ui/diffusion.py | 1 | CODE | |
| LOW | ai_diffusion/ui/server.py | 1 | CODE | |
| LOW | ai_diffusion/ui/widget.py | 1 | CODE | |
| LOW | ai_diffusion/ui/generation.py | 1 | CODE | |
| LOW | ai_diffusion/ui/theme.py | 1 | CODE | |
| LOW | ai_diffusion/ui/style.py | 1 | CODE | |
| LOW | ai_diffusion/ui/region.py | 1 | CODE | |
| LOW | ai_diffusion/ui/control.py | 1 | CODE | |
| LOW | ai_diffusion/ui/animation.py | 1 | CODE | |
| LOW | ai_diffusion/ui/live.py | 1 | CODE | |
| LOW | ai_diffusion/ui/settings.py | 1 | CODE | |
| LOW | ai_diffusion/ui/settings_widgets.py | 1 | CODE | |
| LOW | ai_diffusion/backend/server.py | 1 | CODE | |
| LOW | ai_diffusion/backend/client.py | 1 | CODE | |
| LOW | ai_diffusion/backend/network.py | 1 | CODE | |
| LOW | ai_diffusion/backend/resources.py | 1 | CODE | |
| LOW | ai_diffusion/backend/workflow.py | 1 | CODE | |
| LOW | ai_diffusion/backend/comfy_client.py | 1 | CODE | |
| LOW | ai_diffusion/backend/resolution.py | 1 | CODE | |
| LOW | ai_diffusion/backend/comfy_workflow.py | 1 | CODE | |
| LOW | ai_diffusion/model/custom_workflow.py | 46 | CODE | |
| LOW | ai_diffusion/model/region.py | 1 | CODE | |
| LOW | ai_diffusion/model/control.py | 1 | CODE | |
| LOW | ai_diffusion/model/model.py | 1 | CODE | |
| LOW | ai_diffusion/model/jobs.py | 1 | CODE | |
| LOW | ai_diffusion/model/connection.py | 1 | CODE | |
| LOW | ai_diffusion/model/root.py | 1 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/conftest.py | 24 | # Create the Qt application instance at module level, before any test module is | COMMENT |
| MEDIUM | tests/test_image.py | 384 | # Create a minimal valid PNG file | COMMENT |
| MEDIUM | tests/test_image.py | 425 | # Create a simple image | COMMENT |
| MEDIUM | tests/test_updates.py | 51 | # Create an existing installation | COMMENT |
| MEDIUM | tests/test_updates.py | 70 | # Create a new plugin version | COMMENT |
| MEDIUM | scripts/benchmark_html.py | 180 | # Create a column for each architecture | COMMENT |
| MEDIUM | ai_diffusion/backend/workflow.py | 714 | # Create a separate embedding for each face ID (though more than 1 is questionable) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/images.py | 163 | # Check if this file already exists in manifest with same SHA256 | COMMENT |
| LOW | ai_diffusion/image.py | 303 | # Check if the qt6-image-formats package is installed, which adds WEBP support | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/download_models.py | 53 | CODE | |
| LOW | ai_diffusion/backend/workflow.py | 1634 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/design.py | 272 | def _update_image(self) -> None: | CODE |