Desktop app to generate 3D models from images or prompt using local AI — runs entirely on your GPU
This report summarizes scanner evidence for lightningpixel/modly, a TypeScript project with 8,123 GitHub stars. SynthScan examined 59,169 lines of code across 264 source files, recording 674 pattern matches distributed across 14 syntactic categories. The legacy adjusted pattern signal is 19.7 (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? 425 finding(s).
Are imports declared and package/API names verified? 40 finding(s).
Are wrappers, guards, and repeated structures necessary? 580 finding(s).
Which changes need focused human review? 674 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 674 distinct pattern matches across 14 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⚡ | tools/modly-cli/test_agent.py | 255 | def test_main_converts_unexpected_exceptions_to_json(self) -> None: | CODE |
| LOW⚡ | tools/modly-cli/test_agent.py | 265 | def test_main_converts_argparse_errors_to_json(self) -> None: | CODE |
| LOW⚡ | tools/modly-cli/test_agent.py | 272 | def test_generate_from_workflow_downloads_direct_asset_without_modly_health(self) -> None: | CODE |
| LOW⚡ | tools/modly-cli/test_agent.py | 404 | def test_patch_positive_cliptextencode(self) -> None: | CODE |
| LOW⚡ | tools/modly-cli/test_agent.py | 413 | def test_patch_raises_when_no_text_input(self) -> None: | CODE |
| LOW⚡ | tools/modly-cli/test_agent.py | 420 | def test_patch_fallback_to_prompt_key(self) -> None: | CODE |
| LOW⚡ | tools/modly-cli/test_agent.py | 428 | def test_patch_seed_noise_seed(self) -> None: | CODE |
| LOW⚡ | tools/modly-cli/test_agent.py | 435 | def test_rejects_editor_format(self) -> None: | CODE |
| LOW⚡ | tools/modly-cli/test_agent.py | 445 | def test_deep_copy_no_mutation(self) -> None: | CODE |
| LOW⚡ | tools/modly-cli/test_agent.py | 452 | def test_default_api_dir_checks_all_windows_localappdata_candidates(self) -> None: | CODE |
| LOW | tools/modly-cli/test_agent.py | 24 | def test_compact_json_is_one_line(self) -> None: | CODE |
| LOW | tools/modly-cli/test_agent.py | 32 | def test_status_combines_health_and_model(self) -> None: | CODE |
| LOW | tools/modly-cli/test_agent.py | 52 | def test_params_auto_uses_validated_active_model_id(self) -> None: | CODE |
| LOW | tools/modly-cli/test_agent.py | 79 | def test_explicit_model_id_must_exist_in_model_all(self) -> None: | CODE |
| LOW | tools/modly-cli/test_agent.py | 91 | def test_export_downloads_workspace_path(self) -> None: | CODE |
| LOW | tools/modly-cli/test_agent.py | 101 | def test_export_rejects_unsafe_workspace_paths(self) -> None: | CODE |
| LOW | tools/modly-cli/test_agent.py | 117 | def test_workspace_relative_path_rejects_unsafe_server_output(self) -> None: | CODE |
| LOW | tools/modly-cli/test_agent.py | 130 | def test_workflow_workspace_path_rejects_unsafe_scene_candidate_path(self) -> None: | CODE |
| LOW | tools/modly-cli/test_agent.py | 136 | def test_generate_uses_workflow_run_and_recovery_metadata(self) -> None: | CODE |
| LOW | tools/modly-cli/test_agent.py | 193 | def test_workflow_run_status_and_cancel_use_canonical_endpoints(self) -> None: | CODE |
| LOW | tools/modly-cli/test_agent.py | 217 | def test_capability_and_process_fail_closed_when_contract_is_absent(self) -> None: | CODE |
| LOW | tools/modly-cli/test_agent.py | 233 | def test_process_run_start_uses_recovery_meta_with_custom_base_url(self) -> None: | CODE |
| LOW | tools/modly-cli/test_agent.py | 313 | def test_generate_from_workflow_falls_back_to_modly_for_image_only_outputs(self) -> None: | CODE |
| LOW | tools/modly-cli/test_agent.py | 354 | def test_generate_from_workflow_fails_when_history_has_no_supported_output(self) -> None: | CODE |
| LOW | tools/modly-cli/test_agent.py | 362 | def test_batch_processes_images_sequentially(self) -> None: | CODE |
| LOW | tools/modly-cli/test_agent.py | 382 | def test_batch_accepts_manifest_json(self) -> None: | CODE |
| LOW | tools/modly-cli/test_agent.py | 465 | def test_load_modly_settings_checks_all_windows_appdata_candidates(self) -> None: | CODE |
| LOW | tools/modly-cli/test_agent.py | 477 | def test_malformed_timeout_environment_does_not_break_module_import(self) -> None: | CODE |
| LOW | tools/modly-cli/test_agent.py | 486 | def test_resolve_serve_config_explicit_paths(self) -> None: | CODE |
| LOW | tools/modly-cli/test_agent.py | 512 | def test_canonical_dev_experimental_and_legacy_subcommands_parse(self) -> None: | CODE |
| LOW | tools/modly-cli/test_agent.py | 536 | def test_hidden_aliases_are_not_documented_as_canonical(self) -> None: | CODE |
| LOW | tools/modly-cli/agent.py | 141 | def _is_windows_drive_component(component: str) -> bool: | CODE |
| LOW | tools/modly-cli/agent.py | 229 | def _request_supported_contract(method: str, url: str, *, timeout: float, data: bytes | None = None, headers: dict[str, | CODE |
| LOW | tools/modly-cli/agent.py | 621 | def _download_comfy_image_output(args: argparse.Namespace, comfy: dict[str, Any]) -> dict[str, Any]: | CODE |
| LOW | tools/modly-cli/agent.py | 659 | def cmd_generate_from_workflow(args: argparse.Namespace) -> int: | CODE |
| LOW | tools/modly-cli/agent.py | 696 | def _canonical_generation_params(args: argparse.Namespace) -> dict[str, Any]: | CODE |
| LOW | tools/modly-cli/agent.py | 811 | def _ensure_no_external_texture_process(args: argparse.Namespace) -> None: | CODE |
| LOW | api/routers/optimize.py | 245 | def _convert_gaussian_ply_to_splat(ply_path: Path, out_path: str) -> None: | CODE |
| LOW | api/routers/model.py | 586 | def _resolve_direct_download_url(url: str, headers: dict[str, str]) -> str: | CODE |
| LOW⚡ | api/routers/agent.py | 461 | async def _unload_llm_after_workflow(request: AgentChatRequest, actions_done: list[ActionDone]) -> None: | CODE |
| LOW | api/uv_unwrapper/uv_unwrapper/unwrap.py | 14 | def _box_assign_vertex_to_cube_face( | CODE |
| LOW | api/uv_unwrapper/uv_unwrapper/unwrap.py | 123 | def _assign_faces_uv_to_atlas_index( | CODE |
| LOW | api/uv_unwrapper/uv_unwrapper/unwrap.py | 149 | def _find_slice_offset_and_scale( | CODE |
| LOW | api/uv_unwrapper/uv_unwrapper/unwrap.py | 279 | def _rotate_uv_slices_consistent_space( | CODE |
| LOW | api/uv_unwrapper/uv_unwrapper/unwrap.py | 477 | def _distribute_individual_uvs_in_atlas( | CODE |
| LOW | api/uv_unwrapper/uv_unwrapper/unwrap.py | 537 | def _align_mesh_with_main_axis( | CODE |
| LOW | api/tests/test_model_router.py | 100 | def test_lists_every_source_before_sequential_download_with_monotonic_progress(self) -> None: | CODE |
| LOW | api/tests/test_model_router.py | 140 | def test_pause_cancel_and_resume_reuse_one_model_control(self) -> None: | CODE |
| LOW | api/tests/test_model_router.py | 181 | def test_shared_target_downloads_under_extension_reserved_root(self) -> None: | CODE |
| LOW | api/tests/test_model_router.py | 204 | def test_rejects_a_check_filtered_out_of_the_source_plan(self) -> None: | CODE |
| LOW | api/tests/test_model_router.py | 218 | def test_download_uses_live_storage_after_settings_update(self): | CODE |
| LOW | api/tests/test_model_router.py | 240 | def test_removal_unload_requires_confirmed_process_stop(self): | CODE |
| LOW⚡ | api/tests/test_model_router.py | 252 | def test_removal_rejects_direct_generator_that_remains_loaded(self): | CODE |
| LOW⚡ | api/tests/test_model_router.py | 262 | def test_composite_model_unload_route_uses_path_converter(self) -> None: | CODE |
| LOW⚡ | api/tests/test_model_router.py | 269 | def test_status_and_switch_do_not_block_the_event_loop_while_lifecycle_is_contended(self) -> None: | CODE |
| LOW | api/tests/test_agent_workflow_unload.py | 69 | def test_llm_unloaded_on_the_normal_return_after_a_workflow(self) -> None: | CODE |
| LOW | api/tests/test_agent_workflow_unload.py | 78 | def test_slot_is_released_before_the_unload(self) -> None: | CODE |
| LOW⚡ | api/tests/test_agent_workflow_unload.py | 96 | def test_no_unload_when_no_workflow_was_dispatched(self) -> None: | CODE |
| LOW⚡ | api/tests/test_agent_workflow_unload.py | 101 | def test_a_single_system_message_leads_the_conversation(self) -> None: | CODE |
| LOW⚡ | api/tests/test_agent_workflow_unload.py | 111 | def test_tool_result_answers_its_call_id(self) -> None: | CODE |
| 311 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | scripts/download-python-embed.js | 28 | // ── Helpers ─────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/download-python-embed.js | 75 | // ── Main ────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | .github/workflows/release.yml | 12 | # ─── Create a single release ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | .github/workflows/release.yml | 29 | # ─── Windows build ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | .github/workflows/release.yml | 67 | # ─── macOS build (arm64) ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | .github/workflows/release.yml | 109 | # ─── Linux build ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | api/routers/optimize.py | 206 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | api/routers/optimize.py | 217 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | api/routers/llm.py | 55 | # ─── Catalog / status ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | api/routers/llm.py | 133 | # ─── Chat completion through the managed server ─────────────────────────────── | COMMENT |
| MEDIUM | api/routers/llm.py | 198 | # ─── GGUF download (SSE) ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | api/routers/llm.py | 377 | # ─── Engine (llama-server binary) install (SSE) ─────────────────────────────── | COMMENT |
| MEDIUM | api/services/llm_server.py | 271 | # ─── Binary bootstrap ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | api/services/llm_server.py | 464 | # ─── Orphan prevention ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | api/services/llm_server.py | 578 | # ─── Managed server ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/main/extension-path-guard.ts | 52 | // ─── Internal (non-extension) dir names inside extensionsDir ───────────────── | COMMENT |
| MEDIUM | electron/main/gpu-detect.ts | 32 | // ─── ROCm wheel sources ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/main/gpu-detect.ts | 81 | // ─── Pure parsing helpers ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/main/gpu-detect.ts | 252 | // ─── Detection ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/main/ipc-handlers.ts | 97 | // ─── Run an extension's setup.py directly (no FastAPI needed) ───────────────── | COMMENT |
| MEDIUM | electron/main/ipc-handlers.ts | 2199 | // ── Workflows ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/main/python-setup.ts | 32 | // ─── Environment ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/main/python-setup.ts | 51 | // ─── Path helpers ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/main/python-setup.ts | 78 | // ─── Setup state ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/main/python-setup.ts | 155 | // ─── AppImage: stable Python runtime ───────────────────────────────────────── | COMMENT |
| MEDIUM | electron/main/python-setup.ts | 188 | // ─── Setup steps ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/main/python-setup.ts | 273 | // ─── Unix dev helper ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/main/python-setup.ts | 294 | // ─── Public orchestrator ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/main/process-runner.ts | 7 | // ─── Worker code for JS process extensions ──────────────────────────────────── | COMMENT |
| MEDIUM | electron/main/process-runner.ts | 48 | // ─── Types ──────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/main/process-runner.ts | 73 | // ─── JS ProcessRunner (Worker thread) ──────────────────────────────────────── | COMMENT |
| MEDIUM | electron/main/process-runner.ts | 189 | // ─── Python ProcessRunner (subprocess, one process per run) ─────────────────── | COMMENT |
| MEDIUM | electron/main/process-runner.ts | 305 | // ─── Helper: find Python executable for an extension ───────────────────────── | COMMENT |
| MEDIUM | electron/main/process-runner.ts | 318 | // ─── Registry (one runner per extension id, reused across calls) ────────────── | COMMENT |
| MEDIUM | src/areas/settings/SettingsPage.tsx | 93 | // ─── Page shell ─────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/areas/settings/components/AgentSection.tsx | 14 | // ─── Helpers ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/areas/settings/components/AgentSection.tsx | 120 | // ─── Component ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/areas/settings/components/StorageSection.tsx | 4 | // ─── MoveFolderModal ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/areas/settings/components/StorageSection.tsx | 72 | // ─── StorageSection ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/areas/setup/FirstRunSetup.tsx | 4 | // ─── Logo (shared) ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/areas/setup/FirstRunSetup.tsx | 37 | // ─── Panels ───────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/areas/setup/FirstRunSetup.tsx | 236 | // ─── Main component ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/areas/workflows/workflowRunStore.ts | 13 | // ─── Types ──────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/areas/workflows/workflowRunStore.ts | 57 | // ─── For Each iterator (image / text / mesh) ─────────────────────────────────── | COMMENT |
| MEDIUM | src/areas/workflows/workflowRunStore.ts | 155 | // ─── Topological sort (DFS preorder, branch-first) ─────────────────────────── | COMMENT |
| MEDIUM | src/areas/workflows/workflowRunStore.ts | 187 | // ─── While container geometry ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/areas/workflows/workflowRunStore.ts | 219 | // ─── Branch identification ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/areas/workflows/workflowRunStore.ts | 264 | // ─── For Each iterator execution ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/areas/workflows/workflowRunStore.ts | 292 | // ─── Per-node execution ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/areas/workflows/workflowRunStore.ts | 514 | // ─── Wait dependency helpers ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/areas/workflows/workflowRunStore.ts | 554 | // ─── Store ──────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/areas/workflows/workflowRunStore.ts | 674 | // ── For Each iterators → resolve their folders up front ──────────────────── | COMMENT |
| MEDIUM | src/areas/workflows/workflowRunStore.ts | 694 | // ── Loop table ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/areas/workflows/WorkflowsPage.tsx | 38 | // ─── Constants ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/areas/workflows/WorkflowsPage.tsx | 64 | // ─── IO badge ───────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/areas/workflows/WorkflowsPage.tsx | 82 | // ─── Helpers ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/areas/workflows/WorkflowsPage.tsx | 95 | // ─── Extensions panel ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/areas/workflows/WorkflowsPage.tsx | 334 | // ─── Page ─── toggle button icon ───────────────────────────────────────────── | COMMENT |
| MEDIUM | src/areas/workflows/WorkflowsPage.tsx | 346 | // ─── Node palette (Space to open) ──────────────────────────────────────────── | COMMENT |
| MEDIUM | src/areas/workflows/WorkflowsPage.tsx | 555 | // ─── Help modal ─────────────────────────────────────────────────────────────── | COMMENT |
| 70 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH⚡ | electron/main/setup-launcher.ts | 34 | return True | CODE |
| HIGH⚡ | electron/main/setup-launcher.ts | 37 | return False | CODE |
| HIGH⚡ | electron/main/setup-launcher.ts | 41 | return False | CODE |
| HIGH⚡ | electron/main/setup-launcher.ts | 84 | return False | CODE |
| HIGH⚡ | electron/main/setup-launcher.ts | 90 | return True | CODE |
| HIGH⚡ | electron/main/setup-launcher.ts | 92 | return True | CODE |
| HIGH⚡ | electron/main/setup-launcher.ts | 93 | return False | CODE |
| HIGH⚡ | electron/main/setup-launcher.ts | 103 | print("[Modly setup compat] Removed --no-cache-dir so pip reuses the shared wheel cache.", file=sys.stderr) | CODE |
| HIGH | electron/main/setup-launcher.ts | 70 | print("[Modly setup compat] Removed CUDA-only PyTorch index on macOS; pip will use macOS wheels.", file=sys.stde | CODE |
| HIGH | electron/main/setup-launcher.ts | 123 | return False | CODE |
| HIGH | electron/main/setup-launcher.ts | 125 | return True | CODE |
| HIGH | electron/main/setup-launcher.ts | 147 | return False | CODE |
| HIGH | electron/main/setup-launcher.ts | 159 | return True | CODE |
| HIGH | electron/main/setup-launcher.ts | 160 | return False | CODE |
| HIGH | electron/main/setup-launcher.ts | 182 | elif _is_pytorch_index(value): | CODE |
| HIGH | electron/main/setup-launcher.ts | 184 | elif text != "--extra-index-url": | CODE |
| HIGH | electron/main/setup-launcher.ts | 201 | elif _is_pytorch_index(value): | CODE |
| HIGH | electron/main/setup-launcher.ts | 203 | elif flag != "--extra-index-url": | CODE |
| HIGH | electron/main/setup-launcher.ts | 232 | print("[Modly setup compat] Redirected PyTorch to ROCm wheels: " + " ".join(injected), file=sys.stderr) | CODE |
| HIGH | electron/main/setup-launcher.ts | 250 | elif "args" in kwargs: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | api/routers/generation.py | 215 | except Exception: | CODE |
| HIGH | api/routers/model.py | 108 | except Exception: | CODE |
| HIGH | api/routers/model.py | 618 | except (TypeError, ValueError): | CODE |
| HIGH | api/routers/agent.py | 470 | except Exception: | CODE |
| HIGH | api/routers/agent.py | 482 | except (ValueError, AttributeError): | CODE |
| HIGH | api/services/extension_process.py | 108 | except ImportError: | CODE |
| HIGH | api/services/extension_process.py | 301 | except Exception: | CODE |
| HIGH | api/services/extension_process.py | 340 | except Exception: | CODE |
| HIGH | api/services/extension_process.py | 355 | except Exception: | CODE |
| HIGH | api/services/stdio_utf8.py | 22 | except (ValueError, OSError): | CODE |
| HIGH | api/services/generator_registry.py | 387 | except FileNotFoundError: | CODE |
| HIGH | api/services/generator_registry.py | 776 | except Exception: | CODE |
| HIGH | api/services/generator_registry.py | 187 | except OSError: | CODE |
| HIGH | api/services/llm_server.py | 537 | except Exception: | CODE |
| HIGH | api/services/llm_server.py | 574 | except Exception: | CODE |
| HIGH | api/services/llm_server.py | 739 | except Exception: | CODE |
| HIGH | api/services/llm_server.py | 527 | except Exception: | CODE |
| HIGH | api/services/llm_server.py | 720 | except Exception: | CODE |
| HIGH | api/services/generators/base.py | 129 | except ImportError: | CODE |
| HIGH | api/services/generators/base.py | 140 | except Exception: | CODE |
| HIGH | src/areas/workflows/nodes/mesh-remesher/processor.py | 111 | except Exception: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/modly-cli/agent.py | 1354 | except Exception as exc: | CODE |
| LOW | docs/running-on-jetson.md | 187 | except Exception: | CODE |
| LOW | api/runner.py | 116 | except Exception: | CODE |
| LOW | api/runner.py | 131 | except Exception: | CODE |
| LOW | api/runner.py | 203 | except Exception: | CODE |
| LOW | api/runner.py | 283 | except Exception as exc: | CODE |
| LOW | api/runner.py | 314 | except Exception: | CODE |
| LOW | api/mcp_server.py | 161 | except Exception as e: | CODE |
| LOW | api/routers/optimize.py | 341 | except Exception as err: # noqa: BLE001 — surface a clean error, never 500-crash | CODE |
| LOW | api/routers/optimize.py | 402 | except Exception as err: # noqa: BLE001 | CODE |
| LOW | api/routers/generation.py | 215 | except Exception: | CODE |
| LOW | api/routers/generation.py | 378 | except Exception as exc: | CODE |
| LOW | api/routers/llm.py | 160 | except Exception as e: | CODE |
| LOW | api/routers/llm.py | 335 | except Exception as exc: | CODE |
| LOW | api/routers/llm.py | 412 | except Exception as exc: | CODE |
| MEDIUM | api/routers/llm.py | 363 | def stream(): | CODE |
| LOW | api/routers/model.py | 108 | except Exception: | CODE |
| LOW | api/routers/model.py | 292 | except Exception as exc: | CODE |
| LOW | api/routers/model.py | 333 | except Exception: | CODE |
| LOW | api/routers/model.py | 344 | except Exception: | CODE |
| LOW | api/routers/model.py | 452 | except Exception as exc: | CODE |
| LOW | api/routers/agent.py | 378 | except Exception as e: | STRING |
| LOW⚡ | api/routers/agent.py | 457 | except Exception: | CODE |
| LOW⚡ | api/routers/agent.py | 470 | except Exception: | CODE |
| LOW | api/routers/agent.py | 566 | except Exception as e: | CODE |
| LOW | api/tests/test_export_router.py | 19 | except Exception: # noqa: BLE001 | CODE |
| LOW | api/services/extension_process.py | 301 | except Exception: | CODE |
| LOW | api/services/extension_process.py | 340 | except Exception: | CODE |
| LOW | api/services/extension_process.py | 355 | except Exception: | CODE |
| LOW | api/services/extension_process.py | 453 | except Exception as exc: | CODE |
| LOW | api/services/generator_registry.py | 432 | except Exception as exc: | CODE |
| LOW | api/services/generator_registry.py | 650 | except Exception as exc: | CODE |
| LOW | api/services/generator_registry.py | 736 | except Exception as exc: | CODE |
| LOW | api/services/generator_registry.py | 776 | except Exception: | CODE |
| MEDIUM | api/services/llm_server.py | 52 | def load_config() -> dict: | CODE |
| MEDIUM | api/services/llm_server.py | 531 | def _linux_preexec(): | CODE |
| LOW⚡ | api/services/llm_server.py | 527 | except Exception: | CODE |
| LOW⚡ | api/services/llm_server.py | 537 | except Exception: | CODE |
| LOW⚡ | api/services/llm_server.py | 547 | except Exception: | CODE |
| LOW | api/services/llm_server.py | 55 | except Exception: | CODE |
| LOW | api/services/llm_server.py | 77 | except Exception: | CODE |
| LOW | api/services/llm_server.py | 289 | except Exception: | CODE |
| LOW | api/services/llm_server.py | 516 | except Exception: | CODE |
| LOW | api/services/llm_server.py | 574 | except Exception: | CODE |
| LOW | api/services/llm_server.py | 720 | except Exception: | CODE |
| LOW | api/services/llm_server.py | 739 | except Exception: | CODE |
| LOW | api/services/llm_server.py | 869 | except Exception: | CODE |
| LOW | api/services/generators/base.py | 140 | except Exception: | CODE |
| LOW | api/services/mesh_ops/processor.py | 65 | except Exception as exc: | CODE |
| LOW | api/services/mesh_ops/operations.py | 162 | except Exception as exc: | CODE |
| LOW | api/services/mesh_ops/operations.py | 166 | except Exception as exc: | CODE |
| LOW | api/services/mesh_ops/operations.py | 177 | except Exception as exc: | CODE |
| LOW | src/areas/workflows/nodes/mesh-remesher/processor.py | 111 | except Exception: | CODE |
| LOW | src/areas/workflows/nodes/mesh-remesher/processor.py | 129 | except Exception as exc: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/modly-cli/test_agent.py | 101 | CODE | |
| LOW | tools/modly-cli/agent.py | 88 | CODE | |
| LOW | tools/modly-cli/agent.py | 242 | CODE | |
| LOW | tools/modly-cli/agent.py | 453 | CODE | |
| LOW | tools/modly-cli/agent.py | 501 | CODE | |
| LOW | tools/modly-cli/agent.py | 981 | CODE | |
| LOW | tools/modly-cli/agent.py | 1018 | CODE | |
| LOW | api/runner.py | 197 | CODE | |
| LOW | api/mcp_server.py | 167 | CODE | |
| LOW | api/routers/optimize.py | 245 | CODE | |
| LOW | api/routers/llm.py | 260 | CODE | |
| LOW | api/routers/model.py | 148 | CODE | |
| LOW | api/routers/model.py | 302 | CODE | |
| LOW | api/routers/model.py | 462 | CODE | |
| LOW | api/routers/model.py | 178 | CODE | |
| LOW | api/routers/model.py | 356 | CODE | |
| LOW | api/routers/agent.py | 262 | CODE | |
| LOW | api/services/model_sources.py | 351 | CODE | |
| LOW | api/services/model_sources.py | 388 | CODE | |
| LOW | api/services/scene_input.py | 55 | CODE | |
| LOW | api/services/extension_process.py | 213 | CODE | |
| LOW | api/services/extension_process.py | 317 | CODE | |
| LOW | api/services/generator_registry.py | 274 | CODE | |
| LOW | api/services/generator_registry.py | 395 | CODE | |
| LOW | api/services/generator_registry.py | 146 | CODE | |
| LOW | api/services/generator_registry.py | 178 | CODE | |
| LOW | api/services/generator_registry.py | 680 | CODE | |
| LOW | api/services/generator_registry.py | 756 | CODE | |
| LOW | api/services/generator_registry.py | 811 | CODE | |
| LOW | api/services/generator_registry.py | 997 | CODE | |
| LOW | api/services/llm_server.py | 341 | CODE | |
| LOW | api/services/llm_server.py | 394 | CODE | |
| LOW | api/services/llm_server.py | 541 | CODE | |
| LOW | api/services/llm_server.py | 710 | CODE | |
| LOW | api/services/llm_server.py | 1018 | CODE | |
| LOW | api/services/mesh_ops/operations.py | 334 | CODE | |
| LOW | src/areas/workflows/nodes/mesh-remesher/processor.py | 36 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/modly-cli/test_agent.py | 3 | CODE | |
| LOW | tools/modly-cli/agent.py | 8 | CODE | |
| LOW | api/routers/optimize.py | 8 | CODE | |
| LOW | api/routers/optimize.py | 8 | CODE | |
| LOW | api/uv_unwrapper/setup.py | 5 | CODE | |
| LOW | api/uv_unwrapper/uv_unwrapper/__init__.py | 1 | CODE | |
| LOW | api/uv_unwrapper/uv_unwrapper/__init__.py | 3 | CODE | |
| LOW | api/uv_unwrapper/uv_unwrapper/__init__.py | 4 | CODE | |
| LOW | api/texture_baker/texture_baker/__init__.py | 1 | CODE | |
| LOW | api/texture_baker/texture_baker/__init__.py | 3 | CODE | |
| LOW | api/texture_baker/texture_baker/__init__.py | 4 | CODE | |
| LOW | api/services/model_sources.py | 3 | CODE | |
| LOW | api/services/generators/__init__.py | 3 | CODE | |
| LOW | api/services/generators/__init__.py | 3 | CODE | |
| LOW | api/services/mesh_ops/__init__.py | 5 | CODE | |
| LOW | api/services/mesh_ops/__init__.py | 5 | CODE | |
| LOW | api/services/mesh_ops/__init__.py | 5 | CODE | |
| LOW | api/services/mesh_ops/__init__.py | 5 | CODE | |
| LOW | api/services/mesh_ops/__init__.py | 5 | CODE | |
| LOW | api/services/mesh_ops/__init__.py | 5 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/after-pack.js | 1 | // @ts-check | COMMENT |
| LOW | api/routers/optimize.py | 201 | COMMENT | |
| LOW | api/routers/export.py | 21 | # GLB is deliberately excluded — OrcaSlicer cannot import glTF/GLB, so a .glb | COMMENT |
| LOW | api/uv_unwrapper/uv_unwrapper/csrc/bvh.h | 1 | #pragma once | COMMENT |
| LOW | api/uv_unwrapper/uv_unwrapper/csrc/unwrapper.cpp | 1 | #include "bvh.h" | COMMENT |
| LOW | api/texture_baker/texture_baker/csrc/baker.cpp | 1 | #include <ATen/ATen.h> | COMMENT |
| LOW | api/texture_baker/texture_baker/csrc/baker.h | 1 | #pragma once | COMMENT |
| LOW | src/areas/workflows/nodeBehaviors.ts | 1 | import type { WFNode, WFEdge } from '@shared/types/electron.d' | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | api/routers/optimize.py | 288 | # splats. Centre x/z on the robust 1–99 percentile box and scale to fit so | COMMENT |
| MEDIUM | api/routers/optimize.py | 300 | # flips the splat 180° about Z (3DGS is Y-down), negating Y so the robust | COMMENT |
| MEDIUM | src/areas/generate/components/SplatViewer.tsx | 213 | gpuAcceleratedSort: false, // CPU sort — most robust across GPUs/Electron | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | src/areas/generate/components/Viewer3D.tsx | 332 | // Ensure vertex normals exist — AI-generated meshes often skip this | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | api/uv_unwrapper/uv_unwrapper/__init__.py | 6 | __all__ = ["Unwrapper"] | CODE |
| LOW | api/services/generator_registry.py | 970 | def update_paths(self, models_dir: Optional[Path], workspace_dir: Optional[Path]) -> None: | CODE |
| LOW | api/services/generators/__init__.py | 5 | __all__ = ["BaseGenerator", "smooth_progress"] | CODE |
| LOW | api/services/mesh_ops/__init__.py | 17 | __all__ = [ | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | api/uv_unwrapper/uv_unwrapper/csrc/unwrapper.cpp | 55 | // Step 1: Detect intersections in parallel | COMMENT |
| LOW | api/uv_unwrapper/uv_unwrapper/csrc/unwrapper.cpp | 90 | // Step 2: Process unique intersections | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | api/uv_unwrapper/uv_unwrapper/csrc/unwrapper.cpp | 55 | // Step 1: Detect intersections in parallel | COMMENT |
| LOW | api/uv_unwrapper/uv_unwrapper/csrc/unwrapper.cpp | 90 | // Step 2: Process unique intersections | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | api/routers/generation.py | 295 | # Check if the model needs to be loaded BEFORE calling the generator | COMMENT |