Repository Analysis

Anionex/banana-slides

一个基于nano banana pro🍌的原生AI PPT生成应用,迈向"Vibe PPT"; 支持上传任意模板图片,上传任意素材&智能解析,一句话/大纲/页面描述自动生成PPT,口头修改指定区域、一键导出可编辑ppt - An AI-native slides generator based on nano banana pro🍌

16.1 Moderate AI signal View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of Anionex/banana-slides, a Python project with 15,167 GitHub stars. SynthScan v2.0 examined 119,777 lines of code across 458 source files, recording 1598 pattern matches distributed across 19 syntactic categories. The overall adjusted score of 16.1 places this repository in the Moderate 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).

16.1
Adjusted Score
16.1
Raw Score
100%
Time Factor
2026-07-14
Last Push
15.2K
Stars
Python
Language
119.8K
Lines of Code
458
Files
1.6K
Pattern Hits
2026-07-14
Scan Date
0.04
HC Hit Rate

What These Metrics Mean

Adjusted Score
Primary synthetic code indicator. Raw score normalised per 1,000 lines of code and multiplied by the temporal discount factor. This is the definitive comparative metric — use it to rank repositories by AI authorship density.
Raw Score
The unmodified sum of all severity-weighted, context-multiplied pattern match scores before temporal discounting. Reflects the absolute signal strength independent of when the repository was last active.
Time Factor
The temporal discount multiplier (0–100%) applied to the raw score. Repositories last updated before ChatGPT's launch (Nov 2022) receive a 5% factor. Full signal is only assigned to repositories active in the post-adoption era (Jan 2024+).
Pattern Hits
Total count of individual pattern matches across all files and categories. A high hit count with a low score may indicate a very large codebase with isolated AI snippets; a low count with a high score indicates dense, concentrated AI signatures.
HC Hit Rate
High+Critical pattern hits per file, averaged across the repository. This orthogonal signal catches repositories where a few files are densely packed with high-severity AI tells — a strong indicator even when the normalised score appears moderate due to codebase size.
Lines of Code / Files
Total lines and files analysed. The scanner examines 94 file extensions. These denominators are used to normalise the score, enabling fair comparison between repositories of vastly different sizes.

Score History

This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.

Severity Breakdown

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.

CRITICAL 0HIGH 18MEDIUM 111LOW 1469

Directory Score Breakdown

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.

Pattern Findings

The scanner identified 1598 distinct pattern matches across 19 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.

Hyper-Verbose Identifiers606 hits · 594 pts
SeverityFileLineSnippetContext
LOWTODO_video_narration_fixes.md23def _sanitize_ass_dialogue_text(text: str) -> str:CODE
LOWfrontend/e2e/material-aspect-ratio.spec.ts24 async function openMaterialGeneratorModal(page: Page) {CODE
LOWfrontend/src/api/client.ts14function resolveDesktopBackendPort(): number {CODE
LOWfrontend/src/store/useProjectStore.ts83(function cleanupLegacyTemplateLocalStorageKeys() {CODE
LOWdesktop/main.js125function shouldOpenInExternalBrowser(targetUrl) {CODE
LOWdesktop/update-policy.js23function resolveCurrentBuildTimestamp(buildMeta) {CODE
LOWdesktop/scripts/test-markdown-image-macos.js29function assertSafeOutputDirectory(outputDir) {CODE
LOWdesktop/scripts/prepare-artifacts.js37function copyDirDereferenceSymlinks(src, dest) {CODE
LOWdesktop/scripts/prepare-artifacts.js244async function prepareWindowsFfmpegArtifacts() {CODE
LOWbackend/desktop_bootstrap.py6def repair_desktop_settings_schema(db):CODE
LOWbackend/tests/unit/test_pptx_transitions.py23def test_create_pptx_from_images_adds_selected_transition_effects(tmp_path):CODE
LOWbackend/tests/unit/test_pptx_transitions.py58def test_create_pptx_from_images_maps_page_turn_to_cover(tmp_path):CODE
LOWbackend/tests/unit/test_pptx_transitions.py74def test_create_pptx_from_images_omits_transition_when_disabled(tmp_path):CODE
LOWbackend/tests/unit/test_inferera_domain_defaults.py5def test_config_openai_api_base_defaults_to_inferera(monkeypatch):CODE
LOWbackend/tests/unit/test_inferera_domain_defaults.py16def test_openai_provider_fallbacks_use_inferera(monkeypatch):CODE
LOWbackend/tests/unit/test_lazyllm_vlm_only_model.py53 def test_llm_model_initializes_with_llm_type(self, patch_env):CODE
LOWbackend/tests/unit/test_lazyllm_vlm_only_model.py62 def test_vlm_model_detected_as_vlm_only(self, patch_env):CODE
LOWbackend/tests/unit/test_lazyllm_vlm_only_model.py71 def test_vlm_only_generate_with_image_reuses_client(self, patch_env):CODE
LOWbackend/tests/unit/test_lazyllm_vlm_only_model.py83 def test_normal_model_generate_with_image_creates_vlm_client(self, patch_env):CODE
LOWbackend/tests/unit/test_lazyllm_vlm_only_model.py97 def test_ai_service_init_succeeds_with_vlm_caption_model(self, patch_env):CODE
LOWbackend/tests/unit/test_template_analysis.py71def test_analyze_template_persists_nine_field_schema(client, stub_submit_task, app):CODE
LOWbackend/tests/unit/test_template_analysis.py101def test_analyze_template_handles_not_a_slide(client, stub_submit_task, app):CODE
LOWbackend/tests/unit/test_template_analysis.py116def test_reanalyze_resets_status_to_pending(client, stub_submit_task, app):CODE
LOWbackend/tests/unit/test_openai_image_proxy_compat.py90 def test_standard_images_response(self):CODE
LOWbackend/tests/unit/test_openai_image_proxy_compat.py102 def test_result_is_raw_string_url(self):CODE
LOWbackend/tests/unit/test_openai_image_proxy_compat.py110 def test_result_is_dict_with_data_list(self):CODE
LOWbackend/tests/unit/test_openai_image_proxy_compat.py122 def test_result_is_flat_dict_url(self):CODE
LOWbackend/tests/unit/test_openai_image_proxy_compat.py131 def test_result_data_is_empty_list_falls_through(self):CODE
LOWbackend/tests/unit/test_openai_image_proxy_compat.py138 def test_unsupported_type_raises(self):CODE
LOWbackend/tests/unit/test_material_process.py20def test_blend_region_into_source_changes_only_selected_area():CODE
LOWbackend/tests/unit/test_material_process.py31def test_aspect_ratio_from_size_maps_to_supported_ratio():CODE
LOWbackend/tests/unit/test_material_process.py38def test_process_material_requires_source_for_region_edit(client, sample_project):CODE
LOWbackend/tests/unit/test_material_process.py57def test_process_material_region_edit_enqueues_task(mock_submit_task, mock_get_ai_service, client, sample_project):CODE
LOWbackend/tests/unit/test_api_health.py11 def test_health_check_returns_ok(self, client):CODE
LOWbackend/tests/unit/test_api_health.py20 def test_health_check_response_format(self, client):CODE
LOWbackend/tests/unit/test_cli_run_monitor.py38def test_wait_task_emits_progress_events():CODE
LOWbackend/tests/unit/test_cli_run_monitor.py57def test_run_jobs_writes_state_file(tmp_path: Path, monkeypatch):CODE
LOWbackend/tests/unit/test_cli_run_monitor.py153def test_run_jobs_done_marker_skips_completed_job(tmp_path: Path, monkeypatch):CODE
LOWbackend/tests/unit/test_cli_run_monitor.py237def test_cmd_monitor_reads_snapshot(tmp_path: Path):CODE
LOWbackend/tests/unit/test_cli_run_monitor.py254def test_cmd_monitor_watch_until_completed(monkeypatch):CODE
LOWbackend/tests/unit/test_api_material.py25 def test_upload_material_without_caption(self, client):CODE
LOWbackend/tests/unit/test_api_material.py38 def test_upload_material_with_caption(self, mock_caption, client):CODE
LOWbackend/tests/unit/test_api_material.py53 def test_upload_material_caption_failure_still_succeeds(self, mock_caption, client):CODE
LOWbackend/tests/unit/test_api_material.py67 def test_upload_material_caption_false_param(self, mock_caption, client):CODE
LOWbackend/tests/unit/test_api_material.py79 def test_upload_material_invalid_file_type(self, client):CODE
LOWbackend/tests/unit/test_api_material.py88 def test_upload_material_chinese_filename_uses_content_type_and_uuid_storage(self, client):CODE
LOWbackend/tests/unit/test_api_material.py104 def test_upload_material_spoofed_extension_still_uses_detected_image_format(self, client):CODE
LOWbackend/tests/unit/test_api_material.py118 def test_upload_material_svg_detection_does_not_parse_entities(self, client):CODE
LOWbackend/tests/unit/test_api_material.py138 def test_upload_material_text_mentioning_svg_is_rejected(self, client):STRING
LOWbackend/tests/unit/test_api_material.py149 def test_upload_material_corrupted_image_errors_are_rejected(self, mock_image_open, client):STRING
LOWbackend/tests/unit/test_api_material.py161 def test_upload_material_no_file(self, client):STRING
LOWbackend/tests/unit/test_api_material.py174 def test_caption_returns_empty_on_missing_gemini_key(self, app):STRING
LOWbackend/tests/unit/test_api_material.py193 def test_caption_returns_empty_on_missing_openai_key(self, app):STRING
LOWbackend/tests/unit/test_api_material.py211 def test_caption_returns_empty_on_invalid_file(self, app):STRING
LOWbackend/tests/unit/test_api_material.py221 def test_caption_gemini_success(self, mock_client_class, app):STRING
LOW…nd/tests/unit/test_task_manager_image_prompt_fields.py12def restore_image_prompt_fields(client):CODE
LOW…nd/tests/unit/test_task_manager_image_prompt_fields.py31def test_image_prompt_field_names_fallback_to_default_when_not_set(client):CODE
LOW…nd/tests/unit/test_task_manager_image_prompt_fields.py40def test_append_extra_fields_filters_by_allowlist(client):CODE
LOW…nd/tests/unit/test_task_manager_image_prompt_fields.py55def test_append_extra_fields_respects_empty_allowlist(client):CODE
LOW…nd/tests/unit/test_task_manager_image_prompt_fields.py69def test_append_extra_fields_uses_prefetched_allowlist(monkeypatch):CODE
546 more matches not shown…
Decorative Section Separators97 hits · 327 pts
SeverityFileLineSnippetContext
MEDIUMfrontend/e2e/generation-requirements.spec.ts53// ── Mock tests ──────────────────────────────────────────────────────COMMENT
MEDIUMfrontend/e2e/generation-requirements.spec.ts191// ── Integration tests ───────────────────────────────────────────────COMMENT
MEDIUMfrontend/e2e/lazyllm-global-vendor.spec.ts12// ─── Mock tests ────────────────────────────────────────────────────COMMENT
MEDIUMfrontend/e2e/lazyllm-global-vendor.spec.ts148// ─── Integration tests ─────────────────────────────────────────────COMMENT
MEDIUMfrontend/e2e/history-pagination.spec.ts83// ───────────────── Mock tests ─────────────────COMMENT
MEDIUMfrontend/e2e/history-pagination.spec.ts192// ───────────────── Integration test ─────────────────COMMENT
MEDIUMfrontend/e2e/preset-capsules.spec.ts46// ── Mock tests: Outline presets ──────────────────────────────────────COMMENT
MEDIUMfrontend/e2e/preset-capsules.spec.ts144// ── Mock tests: Description presets ──────────────────────────────────COMMENT
MEDIUMfrontend/e2e/preset-capsules.spec.ts184// ── Integration tests ────────────────────────────────────────────────COMMENT
MEDIUMfrontend/e2e/material-textarea-picker.spec.ts64// ── Mock tests: Upload button dropdown on Home page ──────────────────COMMENT
MEDIUMfrontend/e2e/material-textarea-picker.spec.ts150// ── Mock tests: Upload button dropdown on OutlineEditor ──────────────COMMENT
MEDIUMfrontend/src/components/shared/PresetCapsules.tsx7// ─── i18n ────────────────────────────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/components/shared/PresetCapsules.tsx35// ─── Types ───────────────────────────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/components/shared/PresetCapsules.tsx43// ─── System presets ──────────────────────────────────────────────────────────COMMENT
MEDIUMfrontend/src/components/shared/PresetCapsules.tsx70// ─── Component ───────────────────────────────────────────────────────────────COMMENT
MEDIUMbackend/tests/conftest.py173# =====================================COMMENT
MEDIUMbackend/tests/conftest.py175# =====================================COMMENT
MEDIUMbackend/tests/unit/test_codex_image_retry.py18# ---------------------------------------------------------------------------COMMENT
MEDIUMbackend/tests/unit/test_codex_image_retry.py20# ---------------------------------------------------------------------------COMMENT
MEDIUMbackend/tests/unit/test_codex_image_retry.py52# ---------------------------------------------------------------------------COMMENT
MEDIUMbackend/tests/unit/test_codex_image_retry.py54# ---------------------------------------------------------------------------COMMENT
MEDIUMbackend/tests/unit/test_codex_image_retry.py99# ---------------------------------------------------------------------------COMMENT
MEDIUMbackend/tests/unit/test_codex_image_retry.py101# ---------------------------------------------------------------------------COMMENT
MEDIUMbackend/tests/unit/test_codex_text_retry.py21# ---------------------------------------------------------------------------COMMENT
MEDIUMbackend/tests/unit/test_codex_text_retry.py24# ---------------------------------------------------------------------------COMMENT
MEDIUMbackend/tests/unit/test_codex_text_retry.py51# ---------------------------------------------------------------------------COMMENT
MEDIUMbackend/tests/unit/test_codex_text_retry.py53# ---------------------------------------------------------------------------COMMENT
MEDIUMbackend/tests/unit/test_codex_text_retry.py88# ---------------------------------------------------------------------------COMMENT
MEDIUMbackend/tests/unit/test_codex_text_retry.py90# ---------------------------------------------------------------------------COMMENT
MEDIUMbackend/tests/unit/test_codex_text_retry.py111# ---------------------------------------------------------------------------COMMENT
MEDIUMbackend/tests/unit/test_codex_text_retry.py113# ---------------------------------------------------------------------------COMMENT
MEDIUMbackend/tests/unit/test_codex_text_retry.py170# ---------------------------------------------------------------------------COMMENT
MEDIUMbackend/tests/unit/test_codex_text_retry.py172# ---------------------------------------------------------------------------COMMENT
MEDIUMbackend/tests/unit/test_tts_video_service.py71# ═══════════════════════════════════════════════════════════════════════════════COMMENT
MEDIUMbackend/tests/unit/test_tts_video_service.py73# ═══════════════════════════════════════════════════════════════════════════════COMMENT
MEDIUMbackend/tests/unit/test_tts_video_service.py626# ═══════════════════════════════════════════════════════════════════════════════COMMENT
MEDIUMbackend/tests/unit/test_tts_video_service.py629# ═══════════════════════════════════════════════════════════════════════════════COMMENT
MEDIUMbackend/tests/unit/test_tts_video_service.py24# ═══════════════════════════════════════════════════════════════════════════════COMMENT
MEDIUMbackend/tests/unit/test_tts_video_service.py26# ═══════════════════════════════════════════════════════════════════════════════COMMENT
MEDIUMbackend/controllers/openai_oauth_controller.py223# ---------------------------------------------------------------------------COMMENT
MEDIUMbackend/controllers/openai_oauth_controller.py225# ---------------------------------------------------------------------------COMMENT
MEDIUMbackend/controllers/page_controller.py949# ═══════════════════════════════════════════════════════════════════════════════COMMENT
MEDIUMbackend/controllers/page_controller.py951# ═══════════════════════════════════════════════════════════════════════════════COMMENT
MEDIUMbackend/services/ai_service.py1223 # =========================================================================COMMENT
MEDIUMbackend/services/ai_service.py1225 # =========================================================================COMMENT
MEDIUMbackend/services/tts_video_service.py24# ═══════════════════════════════════════════════════════════════════════════════COMMENT
MEDIUMbackend/services/tts_video_service.py26# ═══════════════════════════════════════════════════════════════════════════════COMMENT
MEDIUMbackend/services/tts_video_service.py233# ═══════════════════════════════════════════════════════════════════════════════COMMENT
MEDIUMbackend/services/tts_video_service.py235# ═══════════════════════════════════════════════════════════════════════════════COMMENT
MEDIUMbackend/services/tts_video_service.py332# ═══════════════════════════════════════════════════════════════════════════════COMMENT
MEDIUMbackend/services/tts_video_service.py334# ═══════════════════════════════════════════════════════════════════════════════COMMENT
MEDIUMbackend/services/tts_video_service.py787# ═══════════════════════════════════════════════════════════════════════════════COMMENT
MEDIUMbackend/services/tts_video_service.py789# ═══════════════════════════════════════════════════════════════════════════════COMMENT
MEDIUMbackend/services/tts_video_service.py1040# ═══════════════════════════════════════════════════════════════════════════════COMMENT
MEDIUMbackend/services/tts_video_service.py1042# ═══════════════════════════════════════════════════════════════════════════════COMMENT
MEDIUMbackend/services/tts_video_service.py1409# ═══════════════════════════════════════════════════════════════════════════════COMMENT
MEDIUMbackend/services/tts_video_service.py1411# ═══════════════════════════════════════════════════════════════════════════════COMMENT
MEDIUMbackend/services/tts_video_service.py1492# ═══════════════════════════════════════════════════════════════════════════════COMMENT
MEDIUMbackend/services/tts_video_service.py1494# ═══════════════════════════════════════════════════════════════════════════════COMMENT
MEDIUMbackend/services/prompts.py24# ═══════════════════════════════════════════════════════════════════════════════COMMENT
37 more matches not shown…
Excessive Try-Catch Wrapping308 hits · 289 pts
SeverityFileLineSnippetContext
LOWbackend/app.py182 except Exception as e:CODE
LOWbackend/app.py396 except Exception as e:CODE
LOWbackend/tests/conftest.py65 except Exception:CODE
LOWbackend/tests/unit/test_desktop_backend_startup.py68 except Exception:CODE
LOWbackend/tests/integration/test_seedream5_real_api.py63 except Exception as e:CODE
LOWbackend/tests/integration/test_seedream5_real_api.py97 except Exception as e:CODE
LOW…kend/tests/integration/test_codex_retry_integration.py28 except Exception:CODE
LOWbackend/tests/integration/test_api_full_flow.py83 except Exception as e:CODE
LOWbackend/tests/integration/test_api_full_flow.py138 except Exception as e:CODE
LOWbackend/tests/integration/test_api_full_flow.py164 except Exception as e:CODE
LOWbackend/utils/latex_utils.py175 except Exception as e:CODE
LOWbackend/utils/latex_utils.py217 except Exception as e:CODE
LOWbackend/utils/pptx_builder.py109 except Exception as e:CODE
LOWbackend/utils/pptx_builder.py137 except Exception as e:CODE
LOWbackend/utils/pptx_builder.py173 except Exception as e:CODE
LOWbackend/utils/pptx_builder.py668 except Exception as e:CODE
LOWbackend/utils/pptx_builder.py724 except Exception as e:CODE
LOWbackend/utils/pptx_builder.py779 except Exception as e:CODE
LOWbackend/utils/pptx_math.py165 except Exception as exc:CODE
LOWbackend/utils/path_utils.py97 except Exception as e:CODE
LOWbackend/utils/mask_utils.py220 except Exception as e:CODE
LOWbackend/utils/mask_utils.py326 except Exception as e:CODE
LOWbackend/models/settings.py313 except Exception:CODE
LOWbackend/models/settings.py316 except Exception:CODE
LOWbackend/controllers/material_controller.py112 except Exception:CODE
LOWbackend/controllers/material_controller.py164 except Exception as e:CODE
LOWbackend/controllers/material_controller.py230 except Exception as e:CODE
LOWbackend/controllers/material_controller.py295 except Exception:CODE
LOWbackend/controllers/material_controller.py498 except Exception as e:CODE
LOWbackend/controllers/material_controller.py504 except Exception as e:CODE
LOWbackend/controllers/material_controller.py644 except Exception:CODE
LOWbackend/controllers/material_controller.py649 except Exception as e:CODE
LOWbackend/controllers/material_controller.py672 except Exception as e:CODE
LOWbackend/controllers/material_controller.py716 except Exception as e:CODE
LOWbackend/controllers/material_controller.py761 except Exception as e:CODE
LOWbackend/controllers/material_controller.py813 except Exception as e:CODE
LOWbackend/controllers/material_controller.py852 except Exception:CODE
LOWbackend/controllers/material_controller.py878 except Exception as e:CODE
LOWbackend/controllers/material_controller.py902 except Exception as e:CODE
LOWbackend/controllers/template_asset_controller.py107 except Exception as exc:CODE
LOWbackend/controllers/template_asset_controller.py230 except Exception as exc:CODE
LOWbackend/controllers/template_asset_controller.py252 except Exception as exc:CODE
LOWbackend/controllers/template_asset_controller.py571 except Exception as exc:CODE
LOWbackend/controllers/file_controller.py49 except Exception as e:CODE
LOWbackend/controllers/file_controller.py85 except Exception as e:CODE
LOWbackend/controllers/file_controller.py118 except Exception as e:CODE
LOWbackend/controllers/file_controller.py150 except Exception as e:CODE
LOWbackend/controllers/file_controller.py175 except Exception:CODE
LOWbackend/controllers/file_controller.py192 except Exception:CODE
LOWbackend/controllers/file_controller.py198 except Exception as e:CODE
LOWbackend/controllers/openai_oauth_controller.py66 except Exception:CODE
LOWbackend/controllers/openai_oauth_controller.py281 except Exception as e:CODE
LOWbackend/controllers/openai_oauth_controller.py311 except Exception as e:CODE
LOWbackend/controllers/openai_oauth_controller.py397 except Exception:CODE
MEDIUMbackend/controllers/openai_oauth_controller.py77def _parse_expires_in(value) -> int:CODE
LOWbackend/controllers/reference_file_controller.py445 except Exception as img_err:CODE
LOWbackend/controllers/reference_file_controller.py453 except Exception as e:CODE
LOWbackend/controllers/reference_file_controller.py108 except Exception as img_err:CODE
LOWbackend/controllers/reference_file_controller.py120 except Exception as e:CODE
LOWbackend/controllers/reference_file_controller.py130 except Exception as db_error:CODE
248 more matches not shown…
Unused Imports186 hits · 176 pts
SeverityFileLineSnippetContext
LOWbackend/config.py5CODE
LOWbackend/config.py6CODE
LOWbackend/tests/unit/test_template_analysis.py7CODE
LOWbackend/tests/unit/test_api_health.py5CODE
LOWbackend/tests/unit/test_cli_run_monitor.py3CODE
LOWbackend/tests/unit/test_api_material.py9CODE
LOWbackend/tests/unit/test_renovation_filename.py11CODE
LOWbackend/tests/unit/test_pdf_image_service.py2CODE
LOWbackend/tests/unit/test_ai_mock.py7CODE
LOWbackend/tests/unit/test_ai_mock.py8CODE
LOWbackend/tests/unit/test_ai_mock.py8CODE
LOWbackend/tests/unit/test_cli_loader.py3CODE
LOWbackend/tests/unit/test_cli_interactive_builder.py3CODE
LOWbackend/tests/unit/test_template_asset_model.py12CODE
LOWbackend/tests/unit/test_template_asset_file_service.py11CODE
LOWbackend/tests/unit/test_api_project.py10CODE
LOWbackend/tests/unit/test_api_project.py196CODE
LOWbackend/tests/unit/test_icon_subject_extraction.py11CODE
LOWbackend/tests/unit/test_cli_plain_help.py3CODE
LOWbackend/tests/unit/test_smart_merge.py2CODE
LOWbackend/tests/unit/test_template_assets_api.py8CODE
LOWbackend/tests/unit/test_cli_resolve.py3CODE
LOWbackend/tests/unit/test_cli_resolve.py5CODE
LOWbackend/tests/unit/test_cli_resolve.py6CODE
LOWbackend/tests/unit/test_cli_resolve.py11CODE
LOWbackend/tests/unit/test_cli_config.py3CODE
LOW…ckend/tests/integration/test_migration_019_backfill.py13CODE
LOW…ckend/tests/integration/test_migration_019_backfill.py14CODE
LOW…ckend/tests/integration/test_migration_019_backfill.py16CODE
LOWbackend/tests/integration/test_full_workflow.py7CODE
LOWbackend/tests/integration/test_full_workflow.py8CODE
LOWbackend/tests/integration/test_seedream5_real_api.py15CODE
LOWbackend/tests/integration/test_api_full_flow.py23CODE
LOWbackend/utils/__init__.py2CODE
LOWbackend/utils/__init__.py2CODE
LOWbackend/utils/__init__.py2CODE
LOWbackend/utils/__init__.py2CODE
LOWbackend/utils/__init__.py2CODE
LOWbackend/utils/__init__.py2CODE
LOWbackend/utils/__init__.py2CODE
LOWbackend/utils/__init__.py11CODE
LOWbackend/utils/__init__.py11CODE
LOWbackend/utils/__init__.py11CODE
LOWbackend/utils/__init__.py12CODE
LOWbackend/utils/__init__.py12CODE
LOWbackend/utils/__init__.py12CODE
LOWbackend/utils/__init__.py13CODE
LOWbackend/utils/__init__.py14CODE
LOWbackend/utils/__init__.py14CODE
LOWbackend/utils/__init__.py14CODE
LOWbackend/utils/pptx_builder.py8CODE
LOWbackend/utils/pptx_builder.py16CODE
LOWbackend/utils/pptx_builder.py16CODE
LOWbackend/utils/page_utils.py4CODE
LOWbackend/models/__init__.py19CODE
LOWbackend/models/__init__.py20CODE
LOWbackend/models/__init__.py21CODE
LOWbackend/models/__init__.py22CODE
LOWbackend/models/__init__.py23CODE
LOWbackend/models/__init__.py24CODE
126 more matches not shown…
Verbosity Indicators57 hits · 100 pts
SeverityFileLineSnippetContext
LOWfrontend/e2e/ui-full-flow.spec.ts674 // Step 2: Click "导出为 PPTX" in the dropdown menuCOMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts680 // Step 3: In the PPTX export settings panel, click "开始导出"COMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts40 // Step 1: Visit homepageCOMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts55 // Step 2: Ensure "一句话生成" tab is selected (it's selected by default)COMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts68 // Step 3: Enter idea and click "Next"COMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts83 // Step 4: Click batch generate outline button on outline editor pageCOMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts124 // Step 5: Wait for outline generation to complete (smart wait)COMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts153 // Step 6: Click "Next" to go to description editor pageCOMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts166 // Step 7: Click batch generate descriptions buttonCOMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts178 // Step 8: Wait for descriptions to generate (smart wait)COMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts193 // Step 9: Test retry single card functionalityCOMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts254 // Step 10: Click "生成图片" to go to image generation pageCOMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts346 // Step 11: Select template (required before generating images)COMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts438 // Step 12: Click batch generate images buttonCOMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts625 // Step 14: Export PPTCOMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts663 // Step 1: Wait for export button to be enabled (it's disabled until all images are generated)COMMENT
LOWfrontend/e2e/ui-full-flow-mocked.spec.ts132 // Step 1: Visit homepageCOMMENT
LOWfrontend/e2e/ui-full-flow-mocked.spec.ts140 // Step 2: Ensure "一句话生成" tab is selected (it's selected by default)COMMENT
LOWfrontend/e2e/ui-full-flow-mocked.spec.ts165 // Step 4: Verify outline editor page loadedCOMMENT
LOWfrontend/e2e/ui-full-flow-mocked.spec.ts172 // Step 5: Click generate outline (mocked)COMMENT
LOWfrontend/e2e/ui-full-flow-mocked.spec.ts183 // Step 6: Verify UI shows outline (mocked data)COMMENT
LOWfrontend/e2e/ui-full-flow-mocked.spec.ts192 // Step 7: Navigate to description editorCOMMENT
LOWfrontend/e2e/ui-full-flow-mocked.spec.ts203 // Step 8: Test description generation UI (mocked)COMMENT
LOWfrontend/e2e/ui-full-flow-mocked.spec.ts213 // Step 9: Navigate to image generationCOMMENT
LOWfrontend/e2e/ui-full-flow-mocked.spec.ts151 // Step 3: Enter idea and click "Next"COMMENT
LOWfrontend/e2e/ui-full-flow-mocked.spec.ts224 // Step 10: Test image generation UI (mocked)COMMENT
LOWfrontend/e2e/ui-full-flow-mocked.spec.ts236 // Step 11: Test export UICOMMENT
LOWbackend/tests/integration/test_api_full_flow.py188 # Step 1: Create projectCOMMENT
LOWbackend/tests/integration/test_api_full_flow.py227 # Step 2: Generate outlineCOMMENT
LOWbackend/tests/integration/test_api_full_flow.py240 # Step 3: Wait for outline completionCOMMENT
LOWbackend/tests/integration/test_api_full_flow.py253 # Step 4: Generate descriptionsCOMMENT
LOWbackend/tests/integration/test_api_full_flow.py273 # Step 5: Generate imagesCOMMENT
LOWbackend/tests/integration/test_api_full_flow.py310 # Step 6: Export PPTCOMMENT
LOWbackend/tests/integration/test_api_full_flow.py325 # Step 7: Verify PPT can be downloadedCOMMENT
LOWbackend/controllers/project_controller.py686 # Step 1: Parse description to outlineCOMMENT
LOWbackend/controllers/project_controller.py691 # Step 2: Split description into page descriptionsCOMMENT
LOWbackend/controllers/project_controller.py696 # Step 3: Flatten outline to pagesCOMMENT
LOWbackend/controllers/project_controller.py706 # Step 4: Delete existing pages (using ORM session to trigger cascades)COMMENT
LOWbackend/controllers/project_controller.py711 # Step 5: Create pages with both outline and descriptionCOMMENT
LOWbackend/controllers/page_controller.py902 # Step 2: AI extract structured contentCOMMENT
LOWbackend/controllers/page_controller.py906 # Step 3: Optional layout captionCOMMENT
LOWbackend/controllers/page_controller.py921 # Step 4: Update page in databaseCOMMENT
LOWbackend/controllers/page_controller.py881 # Step 1: Parse page PDF → markdownCOMMENT
LOWbackend/services/export_service.py1211 # Step 3: 合并结果COMMENT
LOWbackend/services/export_service.py1071 # Step 1: 收集所有文本元素COMMENT
LOWbackend/services/export_service.py1091 # Step 2: 并行执行两种识别COMMENT
LOWbackend/services/task_manager.py1874 # Step 1: 准备工作COMMENT
LOWbackend/services/task_manager.py1903 # Step 2: 创建文字属性提取器COMMENT
LOWbackend/services/task_manager.py1908 # Step 3: 调用导出方法(使用项目的导出设置)COMMENT
LOWbackend/services/task_manager.py1555 # Step 1: Split PDF into per-page PDFsCOMMENT
LOWbackend/services/task_manager.py1929 # Step 4: 标记任务完成COMMENT
LOWbackend/services/file_parser_service.py187 # Step 1: Get upload URLCOMMENT
LOWbackend/services/file_parser_service.py195 # Step 2: Upload fileCOMMENT
LOWbackend/services/file_parser_service.py203 # Step 3: Poll for parsing resultCOMMENT
LOWbackend/services/file_parser_service.py211 # Step 4: Enhance markdown with image captionsCOMMENT
LOWbackend/services/image_editability/inpaint_providers.py377 # Step 1: 百度图像修复 - 精确去除文字COMMENT
LOWbackend/services/image_editability/inpaint_providers.py393 # Step 2: 生成式画质提升(可选)COMMENT
Structural Annotation Overuse57 hits · 99 pts
SeverityFileLineSnippetContext
LOWfrontend/e2e/ui-full-flow.spec.ts674 // Step 2: Click "导出为 PPTX" in the dropdown menuCOMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts680 // Step 3: In the PPTX export settings panel, click "开始导出"COMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts40 // Step 1: Visit homepageCOMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts55 // Step 2: Ensure "一句话生成" tab is selected (it's selected by default)COMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts68 // Step 3: Enter idea and click "Next"COMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts83 // Step 4: Click batch generate outline button on outline editor pageCOMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts124 // Step 5: Wait for outline generation to complete (smart wait)COMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts153 // Step 6: Click "Next" to go to description editor pageCOMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts166 // Step 7: Click batch generate descriptions buttonCOMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts178 // Step 8: Wait for descriptions to generate (smart wait)COMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts193 // Step 9: Test retry single card functionalityCOMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts254 // Step 10: Click "生成图片" to go to image generation pageCOMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts346 // Step 11: Select template (required before generating images)COMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts438 // Step 12: Click batch generate images buttonCOMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts625 // Step 14: Export PPTCOMMENT
LOWfrontend/e2e/ui-full-flow.spec.ts663 // Step 1: Wait for export button to be enabled (it's disabled until all images are generated)COMMENT
LOWfrontend/e2e/ui-full-flow-mocked.spec.ts132 // Step 1: Visit homepageCOMMENT
LOWfrontend/e2e/ui-full-flow-mocked.spec.ts140 // Step 2: Ensure "一句话生成" tab is selected (it's selected by default)COMMENT
LOWfrontend/e2e/ui-full-flow-mocked.spec.ts165 // Step 4: Verify outline editor page loadedCOMMENT
LOWfrontend/e2e/ui-full-flow-mocked.spec.ts172 // Step 5: Click generate outline (mocked)COMMENT
LOWfrontend/e2e/ui-full-flow-mocked.spec.ts183 // Step 6: Verify UI shows outline (mocked data)COMMENT
LOWfrontend/e2e/ui-full-flow-mocked.spec.ts192 // Step 7: Navigate to description editorCOMMENT
LOWfrontend/e2e/ui-full-flow-mocked.spec.ts203 // Step 8: Test description generation UI (mocked)COMMENT
LOWfrontend/e2e/ui-full-flow-mocked.spec.ts213 // Step 9: Navigate to image generationCOMMENT
LOWfrontend/e2e/ui-full-flow-mocked.spec.ts151 // Step 3: Enter idea and click "Next"COMMENT
LOWfrontend/e2e/ui-full-flow-mocked.spec.ts224 // Step 10: Test image generation UI (mocked)COMMENT
LOWfrontend/e2e/ui-full-flow-mocked.spec.ts236 // Step 11: Test export UICOMMENT
LOWbackend/tests/integration/test_api_full_flow.py188 # Step 1: Create projectCOMMENT
LOWbackend/tests/integration/test_api_full_flow.py227 # Step 2: Generate outlineCOMMENT
LOWbackend/tests/integration/test_api_full_flow.py240 # Step 3: Wait for outline completionCOMMENT
LOWbackend/tests/integration/test_api_full_flow.py253 # Step 4: Generate descriptionsCOMMENT
LOWbackend/tests/integration/test_api_full_flow.py273 # Step 5: Generate imagesCOMMENT
LOWbackend/tests/integration/test_api_full_flow.py310 # Step 6: Export PPTCOMMENT
LOWbackend/tests/integration/test_api_full_flow.py325 # Step 7: Verify PPT can be downloadedCOMMENT
LOWbackend/controllers/project_controller.py686 # Step 1: Parse description to outlineCOMMENT
LOWbackend/controllers/project_controller.py691 # Step 2: Split description into page descriptionsCOMMENT
LOWbackend/controllers/project_controller.py696 # Step 3: Flatten outline to pagesCOMMENT
LOWbackend/controllers/project_controller.py706 # Step 4: Delete existing pages (using ORM session to trigger cascades)COMMENT
LOWbackend/controllers/project_controller.py711 # Step 5: Create pages with both outline and descriptionCOMMENT
LOWbackend/controllers/page_controller.py902 # Step 2: AI extract structured contentCOMMENT
LOWbackend/controllers/page_controller.py906 # Step 3: Optional layout captionCOMMENT
LOWbackend/controllers/page_controller.py921 # Step 4: Update page in databaseCOMMENT
LOWbackend/controllers/page_controller.py881 # Step 1: Parse page PDF → markdownCOMMENT
LOWbackend/services/export_service.py1211 # Step 3: 合并结果COMMENT
LOWbackend/services/export_service.py1071 # Step 1: 收集所有文本元素COMMENT
LOWbackend/services/export_service.py1091 # Step 2: 并行执行两种识别COMMENT
LOWbackend/services/task_manager.py1874 # Step 1: 准备工作COMMENT
LOWbackend/services/task_manager.py1903 # Step 2: 创建文字属性提取器COMMENT
LOWbackend/services/task_manager.py1908 # Step 3: 调用导出方法(使用项目的导出设置)COMMENT
LOWbackend/services/task_manager.py1555 # Step 1: Split PDF into per-page PDFsCOMMENT
LOWbackend/services/task_manager.py1929 # Step 4: 标记任务完成COMMENT
LOWbackend/services/file_parser_service.py187 # Step 1: Get upload URLCOMMENT
LOWbackend/services/file_parser_service.py195 # Step 2: Upload fileCOMMENT
LOWbackend/services/file_parser_service.py203 # Step 3: Poll for parsing resultCOMMENT
LOWbackend/services/file_parser_service.py211 # Step 4: Enhance markdown with image captionsCOMMENT
LOWbackend/services/image_editability/inpaint_providers.py377 # Step 1: 百度图像修复 - 精确去除文字COMMENT
LOWbackend/services/image_editability/inpaint_providers.py393 # Step 2: 生成式画质提升(可选)COMMENT
Deep Nesting123 hits · 90 pts
SeverityFileLineSnippetContext
LOWbackend/desktop_bootstrap.py6CODE
LOWbackend/app.py62CODE
LOWbackend/app.py266CODE
LOWbackend/tests/unit/test_api_project.py237CODE
LOWbackend/tests/unit/test_api_settings_provider.py86CODE
LOWbackend/tests/unit/test_api_settings_provider.py104CODE
LOWbackend/tests/unit/test_api_settings_provider.py351CODE
LOWbackend/tests/integration/test_api_full_flow.py42CODE
LOWbackend/tests/integration/test_api_full_flow.py94CODE
LOWbackend/utils/pptx_builder.py256CODE
LOWbackend/utils/pptx_builder.py703CODE
LOWbackend/utils/pptx_math.py309CODE
LOWbackend/utils/path_utils.py26CODE
LOWbackend/utils/path_utils.py142CODE
LOWbackend/utils/mask_utils.py59CODE
LOWbackend/utils/mask_utils.py109CODE
LOWbackend/utils/mask_utils.py274CODE
LOWbackend/controllers/material_controller.py44CODE
LOWbackend/controllers/material_controller.py380CODE
LOWbackend/controllers/material_controller.py510CODE
LOWbackend/controllers/material_controller.py819CODE
LOWbackend/controllers/file_controller.py155CODE
LOWbackend/controllers/openai_oauth_controller.py51CODE
LOWbackend/controllers/reference_file_controller.py41CODE
LOWbackend/controllers/reference_file_controller.py135CODE
LOWbackend/controllers/reference_file_controller.py300CODE
LOWbackend/controllers/reference_file_controller.py394CODE
LOWbackend/controllers/export_controller.py301CODE
LOWbackend/controllers/project_controller.py302CODE
LOWbackend/controllers/project_controller.py428CODE
LOWbackend/controllers/project_controller.py520CODE
LOWbackend/controllers/project_controller.py851CODE
LOWbackend/controllers/project_controller.py1238CODE
LOWbackend/controllers/project_controller.py1362CODE
LOWbackend/controllers/project_controller.py543CODE
LOWbackend/controllers/project_controller.py875CODE
LOWbackend/controllers/page_controller.py325CODE
LOWbackend/controllers/page_controller.py413CODE
LOWbackend/controllers/page_controller.py592CODE
LOWbackend/controllers/page_controller.py832CODE
LOWbackend/controllers/page_controller.py1081CODE
LOWbackend/controllers/settings_controller.py59CODE
LOWbackend/controllers/settings_controller.py220CODE
LOWbackend/controllers/settings_controller.py495CODE
LOWbackend/controllers/settings_controller.py569CODE
LOWbackend/controllers/settings_controller.py670CODE
LOWbackend/controllers/settings_controller.py854CODE
LOWbackend/controllers/settings_controller.py1121CODE
LOWbackend/controllers/settings_controller.py1187CODE
LOWbackend/controllers/settings_controller.py1293CODE
LOWbackend/services/ai_service.py346CODE
LOWbackend/services/ai_service.py393CODE
LOWbackend/services/ai_service.py927CODE
LOWbackend/services/ai_service.py450CODE
LOWbackend/services/update_check_service.py177CODE
LOWbackend/services/update_check_service.py217CODE
LOWbackend/services/inpainting_service.py87CODE
LOWbackend/services/tts_video_service.py375CODE
LOWbackend/services/tts_video_service.py824CODE
LOWbackend/services/tts_video_service.py1054CODE
63 more matches not shown…
Modern Structural Boilerplate66 hits · 67 pts
SeverityFileLineSnippetContext
LOWbackend/utils/latex_utils.py13logger = logging.getLogger(__name__)CODE
LOWbackend/utils/__init__.py16__all__ = [CODE
LOWbackend/utils/pptx_builder.py20logger = logging.getLogger(__name__)CODE
LOWbackend/utils/pptx_builder.py163 def _set_core_properties(prs: Presentation) -> None:CODE
LOWbackend/utils/pptx_math.py18logger = logging.getLogger(__name__)CODE
LOWbackend/utils/path_utils.py9logger = logging.getLogger(__name__)CODE
LOWbackend/utils/mask_utils.py9logger = logging.getLogger(__name__)CODE
LOWbackend/models/project_template_asset.py70 def set_analysis(self, data) -> None:CODE
LOWbackend/models/__init__.py30__all__ = ['db', 'Project', 'Page', 'Task', 'UserTemplate', 'PageImageVersion', 'Material', 'ReferenceFile', 'Settings',CODE
LOWbackend/controllers/material_controller.py26logger = logging.getLogger(__name__)CODE
LOWbackend/controllers/template_asset_controller.py27logger = logging.getLogger(__name__)CODE
LOWbackend/controllers/openai_oauth_controller.py26logger = logging.getLogger(__name__)CODE
LOWbackend/controllers/reference_file_controller.py21logger = logging.getLogger(__name__)CODE
LOWbackend/controllers/__init__.py15__all__ = ['project_bp', 'style_bp', 'page_bp', 'template_bp',CODE
LOWbackend/controllers/export_controller.py23logger = logging.getLogger(__name__)CODE
LOWbackend/controllers/project_controller.py34logger = logging.getLogger(__name__)CODE
LOWbackend/controllers/page_controller.py23logger = logging.getLogger(__name__)CODE
LOWbackend/controllers/template_controller.py11logger = logging.getLogger(__name__)CODE
LOWbackend/controllers/settings_controller.py26logger = logging.getLogger(__name__)CODE
LOWbackend/services/ai_service.py38logger = logging.getLogger(__name__)CODE
LOWbackend/services/pdf_service.py9logger = logging.getLogger(__name__)CODE
LOWbackend/services/inpainting_service.py23logger = logging.getLogger(__name__)CODE
LOWbackend/services/__init__.py6__all__ = ['AIService', 'ProjectContext', 'FileService', 'ExportService']CODE
LOWbackend/services/tts_video_service.py22logger = logging.getLogger(__name__)CODE
LOWbackend/services/prompts.py21logger = logging.getLogger(__name__)CODE
LOWbackend/services/ai_service_manager.py28logger = logging.getLogger(__name__)CODE
LOWbackend/services/export_service.py29logger = logging.getLogger(__name__)CODE
LOWbackend/services/task_manager.py24logger = logging.getLogger(__name__)CODE
LOWbackend/services/task_manager.py2358def _set_task_processing(task_id: str) -> None:CODE
LOWbackend/services/pdf_image_service.py13logger = logging.getLogger(__name__)CODE
LOWbackend/services/file_parser_service.py19logger = logging.getLogger(__name__)CODE
LOWbackend/services/material_import_service.py19logger = logging.getLogger(__name__)CODE
LOWbackend/services/image_editability/service.py31logger = logging.getLogger(__name__)CODE
LOW…ervices/image_editability/text_attribute_extractors.py17logger = logging.getLogger(__name__)CODE
LOWbackend/services/image_editability/extractors.py23logger = logging.getLogger(__name__)CODE
LOWbackend/services/image_editability/inpaint_providers.py21logger = logging.getLogger(__name__)CODE
LOWbackend/services/image_editability/__init__.py90__all__ = [CODE
LOWbackend/services/image_editability/factories.py25logger = logging.getLogger(__name__)CODE
LOWbackend/services/image_editability/hybrid_extractor.py24logger = logging.getLogger(__name__)CODE
LOWbackend/services/image_editability/helpers.py15logger = logging.getLogger(__name__)CODE
LOWbackend/services/ai_providers/genai_client.py8logger = logging.getLogger(__name__)CODE
LOWbackend/services/ai_providers/__init__.py27logger = logging.getLogger(__name__)CODE
LOWbackend/services/ai_providers/__init__.py29__all__ = [CODE
LOW…/services/ai_providers/ocr/baidu_table_ocr_provider.py16logger = logging.getLogger(__name__)CODE
LOW…rvices/ai_providers/ocr/baidu_accurate_ocr_provider.py16logger = logging.getLogger(__name__)CODE
LOWbackend/services/ai_providers/ocr/__init__.py12__all__ = [CODE
LOW…s/ai_providers/image/volcengine_inpainting_provider.py15logger = logging.getLogger(__name__)CODE
LOWbackend/services/ai_providers/image/codex_provider.py25logger = logging.getLogger(__name__)CODE
LOWbackend/services/ai_providers/image/__init__.py12__all__ = [CODE
LOW…vices/ai_providers/image/gemini_inpainting_provider.py13logger = logging.getLogger(__name__)CODE
LOWbackend/services/ai_providers/image/openai_provider.py23logger = logging.getLogger(__name__)CODE
LOWbackend/services/ai_providers/image/genai_provider.py19logger = logging.getLogger(__name__)CODE
LOW…kend/services/ai_providers/image/anthropic_provider.py18logger = logging.getLogger(__name__)CODE
LOW…rvices/ai_providers/image/baidu_inpainting_provider.py16logger = logging.getLogger(__name__)CODE
LOWbackend/services/ai_providers/image/lazyllm_provider.py27logger = logging.getLogger(__name__)CODE
LOW…vices/ai_providers/image/rmbg_segmentation_provider.py18logger = logging.getLogger(__name__)CODE
LOWbackend/services/ai_providers/text/codex_provider.py19logger = logging.getLogger(__name__)CODE
LOWbackend/services/ai_providers/text/__init__.py9__all__ = ['TextProvider', 'GenAITextProvider', 'OpenAITextProvider', 'AnthropicTextProvider', 'LazyLLMTextProvider', 'CCODE
LOWbackend/services/ai_providers/text/openai_provider.py11logger = logging.getLogger(__name__)CODE
LOWbackend/services/ai_providers/text/genai_provider.py17logger = logging.getLogger(__name__)CODE
6 more matches not shown…
Redundant / Tautological Comments33 hits · 56 pts
SeverityFileLineSnippetContext
LOWbackend/run.sh10# Check if .env existsCOMMENT
LOWbackend/run.sh18# Check if virtual environment existsCOMMENT
LOWbackend/tests/integration/test_seedream5_real_api.py13# Check if lazyllm is availableCOMMENT
LOWbackend/tests/integration/test_seedream5_real_api.py66 # Check if it's the guidance_scale errorCOMMENT
LOWbackend/utils/pptx_builder.py192 # Check if dimensions exceed python-pptx limits and scale down if neededCOMMENT
LOWbackend/utils/pptx_builder.py335 # Check if it fitsCOMMENT
LOWbackend/utils/pptx_builder.py382 # Check if we have colored segments (multi-color text)COMMENT
LOWbackend/utils/pptx_builder.py652 # Check if image existsCOMMENT
LOWbackend/controllers/file_controller.py35 # Check if directory existsCOMMENT
LOWbackend/controllers/file_controller.py39 # Check if file existsCOMMENT
LOWbackend/controllers/file_controller.py106 # Check if directory existsCOMMENT
LOWbackend/controllers/file_controller.py110 # Check if file existsCOMMENT
LOWbackend/controllers/file_controller.py138 # Check if directory existsCOMMENT
LOWbackend/controllers/file_controller.py142 # Check if file existsCOMMENT
LOWbackend/controllers/file_controller.py171 # Check if the path is trying to escape the root directoryCOMMENT
LOWbackend/controllers/reference_file_controller.py147 # Check if file is in requestCOMMENT
LOWbackend/controllers/export_controller.py421 # Check if pages have generated imagesCOMMENT
LOWbackend/controllers/project_controller.py1270 # Check if pages have descriptions (允许没有描述,从空开始)COMMENT
LOWbackend/controllers/page_controller.py349 # Check if already generatedCOMMENT
LOWbackend/controllers/page_controller.py438 # Check if already generatedCOMMENT
LOWbackend/controllers/template_controller.py32 # Check if file is in requestCOMMENT
LOWbackend/controllers/template_controller.py125 # Check if file is in requestCOMMENT
LOWbackend/controllers/settings_controller.py739 # Check if reasoning configuration changed (requires AIService cache clear)COMMENT
LOWbackend/services/export_service.py711 # Check if this is a table with子元素 (cells from Baidu OCR)COMMENT
LOWbackend/services/export_service.py737 # Check if this is a table with HTML data (legacy)COMMENT
LOWbackend/services/task_manager.py276 # Check if task raised an exceptionCOMMENT
LOWbackend/services/file_parser_service.py172 # Check if it's a plain text file that doesn't need MinerU parsingCOMMENT
LOWbackend/services/file_parser_service.py179 # Check if it's a spreadsheet file (xlsx, csv) - use markitdownCOMMENT
LOWbackend/services/file_parser_service.py241 # Read file contentCOMMENT
LOWbackend/services/file_parser_service.py249 # Check if content has markdown imagesCOMMENT
LOWscripts/setup-env-from-secrets.sh56 # Check if this configuration item exists in .env fileCOMMENT
LOWscripts/test_docker_environment.sh255# Check if project still existsCOMMENT
LOWscripts/run-local-ci.sh147 # Check if Docker is runningCOMMENT
Docstring Block Structure8 hits · 40 pts
SeverityFileLineSnippetContext
HIGHbackend/services/ai_service.py210 生成并解析JSON,如果解析失败则重新生成 Args: prompt: 生成提示词 thinking_budget: 思考预算(会根据 enSTRING
HIGHbackend/services/ai_service.py242 带图片输入的JSON生成,如果解析失败则重新生成(最多重试3次) Args: prompt: 生成提示词 image_path: 图片文件路STRING
HIGHbackend/services/ai_service.py930 Generate image using configured image provider Based on gemini_genai.py gen_image() ArSTRING
HIGHbackend/services/image_editability/service.py92 将图片转换为可编辑结构(递归) 线程安全:此方法可以被多个线程并行调用 Args: image_path: 图片路径 STRING
HIGHbackend/services/image_editability/factories.py313 创建基于生成式大模型的Inpaint提供者 使用生成式大模型(如Gemini图片编辑)通过自然语言指令移除图片中的文字和图标。 适用于不需要精确bbox的场景,大模型自动理STRING
HIGHbackend/services/image_editability/factories.py506 从默认参数创建配置 默认配置(推荐用于导出PPTX): - 元素提取:混合提取器(MinerU版面分析 + 百度高精度OCR) - 背景生成:混合InpaiSTRING
HIGHbackend/services/image_editability/factories.py702 创建基于Caption Model的文字属性提取器 使用视觉语言模型(如Gemini)分析文字区域图像, 通过生成JSON的方式获取字体颜色、是否粗体、是否斜体等属性。 STRING
HIGHbackend/services/image_editability/factories.py730 创建文字属性提取器注册表 支持动态注册新元素类型,不限于预定义类型。 Args: caption_extractor: CaptiSTRING
Magic Placeholder Names7 hits · 30 pts
SeverityFileLineSnippetContext
HIGHREADME.md257GOOGLE_API_KEY=your-api-key-hereCODE
HIGHREADME.md262OPENAI_API_KEY=your-api-key-hereCODE
HIGHREADME_EN.md260GOOGLE_API_KEY=your-api-key-hereCODE
HIGHREADME_EN.md267OPENAI_API_KEY=your-api-key-hereCODE
HIGHbackend/controllers/settings_controller.py227 "api_key": "your-api-key",STRING
HIGHscripts/setup-env-from-secrets.sh76 sed -i '/^GOOGLE_API_KEY=/s/your-api-key-here/mock-api-key/' "$ENV_FILE"CODE
HIGHv0_demo/lazyllm_genai.py22 export BANANA_QWEN_API_KEY = "your-api-key"STRING
Fake / Example Data21 hits · 19 pts
SeverityFileLineSnippetContext
LOWfrontend/e2e/settings-backfill.spec.ts67 const placeholder = await apiKeyInput.getAttribute('placeholder')CODE
LOWfrontend/e2e/settings-backfill.spec.ts116 const placeholder = await apiKeyInput.getAttribute('placeholder')CODE
LOW…nd/e2e/settings-per-model-provider-integration.spec.ts63 const placeholder = await apiKeyInput.getAttribute('placeholder')CODE
LOWfrontend/e2e/file-preview-scrollbar.spec.ts12const LONG_MARKDOWN = '# Test Document\n\n' + 'Lorem ipsum dolor sit amet. '.repeat(200) +CODE
LOWfrontend/e2e/file-preview-scrollbar.spec.ts12const LONG_MARKDOWN = '# Test Document\n\n' + 'Lorem ipsum dolor sit amet. '.repeat(200) +CODE
LOWfrontend/e2e/per-model-startup-creds.spec.ts100 const placeholder = await apiKeyInput.getAttribute('placeholder')CODE
LOWfrontend/e2e/openai-oauth.spec.ts76 json: { success: true, data: { ...base, openai_oauth_connected: true, openai_oauth_account_id: 'user@exampleCODE
LOWfrontend/e2e/openai-oauth.spec.ts387 json: { success: true, data: { ...base, openai_oauth_connected: true, openai_oauth_account_id: 'user@exampleCODE
LOWfrontend/e2e/openai-oauth.spec.ts432 json: { success: true, data: { message: 'Connected', account_id: 'user@example.com' } },CODE
LOWfrontend/e2e/openai-oauth.spec.ts439 json: { success: true, data: { connected: true, account_id: 'user@example.com' } },CODE
LOWfrontend/e2e/openai-oauth.spec.ts462 json: { success: true, data: { ...base, openai_oauth_connected: true, openai_oauth_account_id: 'user@exampleCODE
LOWfrontend/src/components/shared/AccessCodeGuard.tsx103 placeholder={t('placeholder')}CODE
LOWbackend/tests/unit/test_api_material.py215 app.config['GOOGLE_API_KEY'] = 'fake-key'STRING
LOWbackend/tests/unit/test_api_settings_provider.py497 settings.openai_oauth_account_id = 'user@example.com'CODE
LOWbackend/tests/unit/test_api_settings_provider.py385 settings.openai_oauth_account_id = 'user@example.com'CODE
LOWbackend/tests/unit/test_api_settings_provider.py451 settings.openai_oauth_account_id = 'user@example.com'CODE
LOWbackend/tests/unit/test_api_settings_provider.py524 assert settings.openai_oauth_account_id == 'user@example.com'CODE
LOWbackend/tests/unit/test_api_settings_provider.py542 settings.openai_oauth_account_id = 'user@example.com'CODE
LOWbackend/tests/unit/test_api_settings_provider.py574 assert settings.openai_oauth_account_id == 'user@example.com'CODE
LOWbackend/tests/unit/test_api_settings_provider.py592 settings.openai_oauth_account_id = 'user@example.com'CODE
LOWbackend/tests/unit/test_api_settings_provider.py617 assert settings.openai_oauth_account_id == 'user@example.com'CODE
Self-Referential Comments5 hits · 14 pts
SeverityFileLineSnippetContext
MEDIUMbackend/tests/unit/test_api_material.py180 # Create a temp imageSTRING
MEDIUMbackend/tests/integration/test_api_full_flow.py210 # Create a simple test template imageCOMMENT
MEDIUMbackend/controllers/page_controller.py700 # Create a temporary directory in the project's upload folderCOMMENT
MEDIUMscripts/test_docker_environment.sh236# Create a projectCOMMENT
MEDIUMv0_demo/lazyllm_genai.py196 # Create a test image if it doesn't existCOMMENT
AI Structural Patterns18 hits · 14 pts
SeverityFileLineSnippetContext
LOWbackend/utils/latex_utils.py158CODE
LOWbackend/services/tts_video_service.py824CODE
LOWbackend/services/tts_video_service.py941CODE
LOWbackend/services/tts_video_service.py1497CODE
LOWbackend/services/export_service.py1249CODE
LOWbackend/services/task_manager.py703CODE
LOWbackend/services/task_manager.py1329CODE
LOWbackend/services/task_manager.py2007CODE
LOWbackend/services/file_parser_service.py97CODE
LOWbackend/services/image_editability/factories.py494CODE
LOWbackend/services/image_editability/data_models.py106CODE
LOW…rvices/ai_providers/ocr/baidu_accurate_ocr_provider.py82CODE
LOWcli/banana_cli/config.py91CODE
LOWcli/banana_cli/commands/exports.py93CODE
LOWcli/banana_cli/commands/workflows.py149CODE
LOWcli/banana_cli/commands/projects.py44CODE
LOWcli/banana_cli/commands/projects.py73CODE
LOWv0_demo/lazyllm_genai.py66CODE
Cross-Language Confusion2 hits · 10 pts
SeverityFileLineSnippetContext
HIGHbackend/models/material.py16 project_id = db.Column(db.String(36), db.ForeignKey('projects.id'), nullable=True) # Can be null, for global materiCODE
HIGHbackend/services/prompts.py15684. **When unsure**: prefer `status=undecided` (template_asset_id=null) over guessing. confidence<0.5 should be undecidedCODE
Synthetic Comment Markers1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHbackend/models/material.py20 caption = db.Column(db.String(500), nullable=True) # AI-generated image descriptionCODE
AI Slop Vocabulary1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUMbackend/services/ai_providers/image/openai_provider.py161 # Build comprehensive extra_body that works with multiple providersCOMMENT
Example Usage Blocks1 hit · 2 pts
SeverityFileLineSnippetContext
LOWscripts/setup-env-from-secrets.sh5# Usage:COMMENT
Over-Commented Block1 hit · 1 pts
SeverityFileLineSnippetContext
LOW.github/workflows/docker-publish.yml321 # VERSION: ${{ inputs.version }}COMMENT