Desktop app to generate 3D models from images or prompt using local AI — runs entirely on your GPU
This report presents the forensic synthetic code analysis of lightningpixel/modly, a TypeScript project with 7,312 GitHub stars. SynthScan v2.0 examined 44,747 lines of code across 204 source files, recording 384 pattern matches distributed across 13 syntactic categories. The overall adjusted score of 14.9 places this repository in the Low AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
Longitudinal tracking requires multiple scan runs. Once this repository is re-scanned after new commits land, this chart will visualise how the synthetic code signal evolves over time — enabling you to detect whether AI authorship is growing, stabilising, or being actively corrected by human engineers.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 384 distinct pattern matches across 13 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. 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 diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| 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 | 125 | # ── Textured path: OBJ intermediate to preserve UV coordinates ────── | COMMENT |
| MEDIUM | api/routers/optimize.py | 163 | # ── Geometry-only path: PLY (fast, no texture to worry about) ──────── | COMMENT |
| MEDIUM | api/routers/optimize.py | 282 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | api/routers/optimize.py | 293 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | electron/main/extension-path-guard.ts | 52 | // ─── Internal (non-extension) dir names inside extensionsDir ───────────────── | COMMENT |
| MEDIUM | electron/main/ipc-handlers.ts | 63 | // ─── GPU detect (best-effort, no Python required) ───────────────────────────── | COMMENT |
| MEDIUM | electron/main/ipc-handlers.ts | 111 | // ─── Run an extension's setup.py directly (no FastAPI needed) ───────────────── | COMMENT |
| MEDIUM | electron/main/ipc-handlers.ts | 1821 | // ── Workflows ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/main/python-setup.ts | 31 | // ─── Environment ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/main/python-setup.ts | 50 | // ─── Path helpers ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/main/python-setup.ts | 77 | // ─── Setup state ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/main/python-setup.ts | 154 | // ─── AppImage: stable Python runtime ───────────────────────────────────────── | COMMENT |
| MEDIUM | electron/main/python-setup.ts | 187 | // ─── Setup steps ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/main/python-setup.ts | 272 | // ─── Unix dev helper ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/main/python-setup.ts | 293 | // ─── Public orchestrator ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/main/process-runner.ts | 6 | // ─── Worker code for JS process extensions ──────────────────────────────────── | COMMENT |
| MEDIUM | electron/main/process-runner.ts | 47 | // ─── Types ──────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | electron/main/process-runner.ts | 72 | // ─── JS ProcessRunner (Worker thread) ──────────────────────────────────────── | COMMENT |
| MEDIUM | electron/main/process-runner.ts | 156 | // ─── Python ProcessRunner (subprocess, one process per run) ─────────────────── | COMMENT |
| MEDIUM | electron/main/process-runner.ts | 257 | // ─── Helper: find Python executable for an extension ───────────────────────── | COMMENT |
| MEDIUM | electron/main/process-runner.ts | 270 | // ─── 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 | 5 | // ─── Helpers ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/areas/settings/components/AgentSection.tsx | 26 | // ─── 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 | 10 | // ─── Types ──────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/areas/workflows/workflowRunStore.ts | 54 | // ─── For Each iterator (image / text / mesh) ─────────────────────────────────── | COMMENT |
| MEDIUM | src/areas/workflows/workflowRunStore.ts | 144 | // ─── Topological sort (DFS preorder, branch-first) ─────────────────────────── | COMMENT |
| MEDIUM | src/areas/workflows/workflowRunStore.ts | 176 | // ─── While container geometry ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/areas/workflows/workflowRunStore.ts | 208 | // ─── Branch identification ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/areas/workflows/workflowRunStore.ts | 253 | // ─── For Each iterator execution ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/areas/workflows/workflowRunStore.ts | 281 | // ─── Per-node execution ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/areas/workflows/workflowRunStore.ts | 490 | // ─── Wait dependency helpers ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/areas/workflows/workflowRunStore.ts | 530 | // ─── Store ──────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/areas/workflows/workflowRunStore.ts | 650 | // ── For Each iterators → resolve their folders up front ──────────────────── | COMMENT |
| MEDIUM | src/areas/workflows/workflowRunStore.ts | 670 | // ── Loop table ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/areas/workflows/WorkflowsPage.tsx | 36 | // ─── Constants ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/areas/workflows/WorkflowsPage.tsx | 62 | // ─── IO badge ───────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/areas/workflows/WorkflowsPage.tsx | 79 | // ─── Helpers ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/areas/workflows/WorkflowsPage.tsx | 92 | // ─── Extensions panel ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/areas/workflows/WorkflowsPage.tsx | 329 | // ─── Page ─── toggle button icon ───────────────────────────────────────────── | COMMENT |
| MEDIUM | src/areas/workflows/WorkflowsPage.tsx | 341 | // ─── Node palette (Space to open) ──────────────────────────────────────────── | COMMENT |
| MEDIUM | src/areas/workflows/WorkflowsPage.tsx | 548 | // ─── Help modal ─────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/areas/workflows/WorkflowsPage.tsx | 697 | // ─── Connection type helpers ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/areas/workflows/WorkflowsPage.tsx | 723 | // ─── Workflow canvas (inner, requires ReactFlowProvider) ────────────────────── | COMMENT |
| MEDIUM | src/areas/workflows/WorkflowsPage.tsx | 758 | // ─── Undo / Redo ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/areas/workflows/WorkflowsPage.tsx | 1362 | // ─── Mini graph preview ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/areas/workflows/WorkflowsPage.tsx | 1474 | // ─── Page ───────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/areas/workflows/nodeBehaviors.ts | 3 | // ─── Node behaviors registry ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/areas/workflows/nodeBehaviors.ts | 36 | // ─── Helpers ────────────────────────────────────────────────────────────────── | COMMENT |
| 59 more matches not shown… | ||||
| 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 | 321 | def _convert_gaussian_ply_to_splat(ply_path: Path, out_path: str) -> None: | CODE |
| LOW | api/routers/model.py | 400 | def _resolve_direct_download_url(url: str, headers: dict[str, str]) -> str: | 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_generator_registry.py | 428 | def test_wrong_capability_token_cannot_bypass_pending_state(self) -> None: | CODE |
| LOW⚡ | api/tests/test_generator_registry.py | 437 | def test_capability_id_and_sidecar_path_must_match(self) -> None: | CODE |
| LOW⚡ | api/tests/test_generator_registry.py | 446 | def test_capability_destination_folder_must_match(self) -> None: | CODE |
| LOW⚡ | api/tests/test_generator_registry.py | 455 | def test_authorization_rejects_duplicate_folder_declaring_same_manifest_id(self) -> None: | CODE |
| LOW | api/tests/test_generator_registry.py | 74 | def _write_registration_capability( | CODE |
| LOW | api/tests/test_generator_registry.py | 103 | def _make_loadable_pending_extension(self, extension_id: str) -> dict[str, str]: | CODE |
| LOW | api/tests/test_generator_registry.py | 120 | def test_legacy_generator_supports_eager_and_lazy_sibling_imports(self) -> None: | CODE |
| LOW | api/tests/test_generator_registry.py | 158 | def test_reload_preserves_legacy_path_owned_by_the_host(self) -> None: | CODE |
| LOW | api/tests/test_generator_registry.py | 184 | def test_reload_stops_subprocess_runtime_instead_of_only_unloading_model(self) -> None: | CODE |
| LOW | api/tests/test_generator_registry.py | 198 | def test_reload_evicts_owned_helper_modules_and_reads_updated_source(self) -> None: | CODE |
| LOW | api/tests/test_generator_registry.py | 236 | def test_legacy_extensions_with_same_helper_name_remain_isolated(self) -> None: | CODE |
| LOW | api/tests/test_generator_registry.py | 271 | def test_setup_script_without_platform_venv_surfaces_repair_error_per_node(self) -> None: | CODE |
| LOW | api/tests/test_generator_registry.py | 291 | def test_discovery_failures_remain_visible_under_actionable_keys(self) -> None: | CODE |
| LOW | api/tests/test_generator_registry.py | 334 | def test_incomplete_model_install_is_reported_for_each_node(self) -> None: | CODE |
| LOW | api/tests/test_generator_registry.py | 346 | def test_pending_registration_is_not_loaded_when_startup_restore_cannot_finish(self) -> None: | CODE |
| 111 more matches not shown… | ||||
| 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 | 103 | except Exception: | CODE |
| LOW | api/runner.py | 124 | except Exception: | CODE |
| LOW | api/runner.py | 178 | except Exception as exc: | CODE |
| LOW | api/runner.py | 205 | except Exception: | CODE |
| LOW | api/mcp_server.py | 161 | except Exception as e: | CODE |
| LOW | api/routers/optimize.py | 417 | except Exception as err: # noqa: BLE001 — surface a clean error, never 500-crash | CODE |
| LOW | api/routers/optimize.py | 475 | except Exception as err: # noqa: BLE001 | CODE |
| LOW | api/routers/generation.py | 162 | except Exception: | CODE |
| LOW | api/routers/generation.py | 238 | except Exception as exc: | CODE |
| LOW | api/routers/workflow_runs.py | 125 | except Exception: | CODE |
| LOW | api/routers/model.py | 95 | except Exception: | CODE |
| LOW | api/routers/model.py | 152 | except Exception: | CODE |
| LOW | api/routers/model.py | 163 | except Exception: | CODE |
| LOW | api/routers/model.py | 271 | except Exception as exc: | CODE |
| LOW | api/routers/extensions.py | 88 | except Exception: | CODE |
| LOW | api/routers/agent.py | 369 | except Exception as e: | STRING |
| LOW | api/routers/agent.py | 419 | except Exception: | CODE |
| LOW | api/routers/agent.py | 513 | except Exception: | CODE |
| LOW | api/services/extension_process.py | 283 | except Exception: | CODE |
| LOW | api/services/extension_process.py | 320 | except Exception: | CODE |
| LOW | api/services/extension_process.py | 335 | except Exception: | CODE |
| LOW | api/services/extension_process.py | 391 | except Exception as exc: | CODE |
| LOW | api/services/generator_registry.py | 409 | except Exception as exc: | CODE |
| LOW | api/services/generator_registry.py | 560 | except Exception as exc: | CODE |
| LOW | api/services/generator_registry.py | 629 | except Exception as exc: | CODE |
| LOW | api/services/generator_registry.py | 668 | except Exception: | CODE |
| LOW | api/services/generators/base.py | 136 | except Exception: | CODE |
| LOW | src/areas/workflows/nodes/mesh-repair/processor.py | 112 | except Exception as e: | CODE |
| LOW | src/areas/workflows/nodes/mesh-repair/processor.py | 116 | except Exception as e: | CODE |
| LOW | src/areas/workflows/nodes/mesh-repair/processor.py | 127 | except Exception as e: | CODE |
| LOW | src/areas/workflows/nodes/mesh-repair/processor.py | 151 | except Exception as exc: | CODE |
| LOW | src/areas/workflows/nodes/mesh-smoother/processor.py | 122 | 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 | 118 | CODE | |
| LOW | api/mcp_server.py | 167 | CODE | |
| LOW | api/routers/optimize.py | 321 | CODE | |
| LOW | api/routers/model.py | 126 | CODE | |
| LOW | api/routers/model.py | 281 | CODE | |
| LOW | api/routers/model.py | 175 | CODE | |
| LOW | api/routers/agent.py | 254 | CODE | |
| LOW | api/services/extension_process.py | 195 | CODE | |
| LOW | api/services/extension_process.py | 287 | CODE | |
| LOW | api/services/generator_registry.py | 251 | CODE | |
| LOW | api/services/generator_registry.py | 372 | CODE | |
| LOW | api/services/generator_registry.py | 123 | CODE | |
| LOW | api/services/generator_registry.py | 155 | CODE | |
| LOW | api/services/generator_registry.py | 585 | CODE | |
| LOW | src/areas/workflows/nodes/mesh-remesher/processor.py | 36 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | electron/main/ipc-handlers.ts | 158 | return False | CODE |
| HIGH | electron/main/ipc-handlers.ts | 187 | print("[Modly setup compat] Removed CUDA-only PyTorch index on macOS; pip will use macOS wheels.", file=sys.stde | CODE |
| HIGH | electron/main/ipc-handlers.ts | 193 | return False | CODE |
| HIGH | electron/main/ipc-handlers.ts | 204 | print("[Modly setup compat] Removed --no-cache-dir so pip reuses the shared wheel cache.", file=sys.stderr) | 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 | 18 | CODE | |
| LOW | api/routers/optimize.py | 18 | 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/generators/__init__.py | 3 | CODE | |
| LOW | api/services/generators/__init__.py | 3 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | api/routers/optimize.py | 364 | # splats. Centre x/z on the robust 1–99 percentile box and scale to fit so | COMMENT |
| MEDIUM | api/routers/optimize.py | 376 | # 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 | 278 | // Ensure vertex normals exist — AI-generated meshes often skip this | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/after-pack.js | 1 | // @ts-check | COMMENT |
| LOW | api/routers/optimize.py | 281 | 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 |
|---|---|---|---|---|
| LOW | api/uv_unwrapper/uv_unwrapper/__init__.py | 6 | __all__ = ["Unwrapper"] | CODE |
| LOW | api/services/generator_registry.py | 784 | 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 |
| 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 | 183 | # Check if the model needs to be loaded BEFORE calling get_active(), | COMMENT |