Repository Analysis

Anionex/banana-slides

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

14.9 Low AI signal View on GitHub
14.9
Adjusted Score
14.9
Raw Score
100%
Time Factor
2026-05-30
Last Push
14,773
Stars
Python
Language
93,130
Lines of Code
356
Files
1110
Pattern Hits
2026-05-31
Scan Date

Score History

Severity Breakdown

CRITICAL 0HIGH 17MEDIUM 104LOW 989

Pattern Findings

1110 matches across 16 categories. Click a row to expand file-level details.

Hyper-Verbose Identifiers342 hits · 330 pts
SeverityFileLineSnippet
LOWTODO_video_narration_fixes.md23def _sanitize_ass_dialogue_text(text: str) -> str:
LOWfrontend/e2e/material-aspect-ratio.spec.ts24 async function openMaterialGeneratorModal(page: Page) {
LOWbackend/tests/unit/test_lazyllm_vlm_only_model.py53 def test_llm_model_initializes_with_llm_type(self, patch_env):
LOWbackend/tests/unit/test_lazyllm_vlm_only_model.py62 def test_vlm_model_detected_as_vlm_only(self, patch_env):
LOWbackend/tests/unit/test_lazyllm_vlm_only_model.py71 def test_vlm_only_generate_with_image_reuses_client(self, patch_env):
LOWbackend/tests/unit/test_lazyllm_vlm_only_model.py83 def test_normal_model_generate_with_image_creates_vlm_client(self, patch_env):
LOWbackend/tests/unit/test_lazyllm_vlm_only_model.py97 def test_ai_service_init_succeeds_with_vlm_caption_model(self, patch_env):
LOWbackend/tests/unit/test_openai_image_proxy_compat.py90 def test_standard_images_response(self):
LOWbackend/tests/unit/test_openai_image_proxy_compat.py102 def test_result_is_raw_string_url(self):
LOWbackend/tests/unit/test_openai_image_proxy_compat.py110 def test_result_is_dict_with_data_list(self):
LOWbackend/tests/unit/test_openai_image_proxy_compat.py122 def test_result_is_flat_dict_url(self):
LOWbackend/tests/unit/test_openai_image_proxy_compat.py131 def test_result_data_is_empty_list_falls_through(self):
LOWbackend/tests/unit/test_openai_image_proxy_compat.py138 def test_unsupported_type_raises(self):
LOWbackend/tests/unit/test_material_process.py20def test_blend_region_into_source_changes_only_selected_area():
LOWbackend/tests/unit/test_material_process.py31def test_aspect_ratio_from_size_maps_to_supported_ratio():
LOWbackend/tests/unit/test_material_process.py38def test_process_material_requires_source_for_region_edit(client, sample_project):
LOWbackend/tests/unit/test_material_process.py57def test_process_material_region_edit_enqueues_task(mock_submit_task, mock_get_ai_service, client, sample_project):
LOWbackend/tests/unit/test_api_health.py11 def test_health_check_returns_ok(self, client):
LOWbackend/tests/unit/test_api_health.py20 def test_health_check_response_format(self, client):
LOWbackend/tests/unit/test_cli_run_monitor.py38def test_wait_task_emits_progress_events():
LOWbackend/tests/unit/test_cli_run_monitor.py57def test_run_jobs_writes_state_file(tmp_path: Path, monkeypatch):
LOWbackend/tests/unit/test_cli_run_monitor.py153def test_run_jobs_done_marker_skips_completed_job(tmp_path: Path, monkeypatch):
LOWbackend/tests/unit/test_cli_run_monitor.py237def test_cmd_monitor_reads_snapshot(tmp_path: Path):
LOWbackend/tests/unit/test_cli_run_monitor.py254def test_cmd_monitor_watch_until_completed(monkeypatch):
LOWbackend/tests/unit/test_api_material.py25 def test_upload_material_without_caption(self, client):
LOWbackend/tests/unit/test_api_material.py38 def test_upload_material_with_caption(self, mock_caption, client):
LOWbackend/tests/unit/test_api_material.py53 def test_upload_material_caption_failure_still_succeeds(self, mock_caption, client):
LOWbackend/tests/unit/test_api_material.py67 def test_upload_material_caption_false_param(self, mock_caption, client):
LOWbackend/tests/unit/test_api_material.py79 def test_upload_material_invalid_file_type(self, client):
LOWbackend/tests/unit/test_api_material.py88 def test_upload_material_chinese_filename_uses_content_type_and_uuid_storage(self, client):
LOWbackend/tests/unit/test_api_material.py104 def test_upload_material_spoofed_extension_still_uses_detected_image_format(self, client):
LOWbackend/tests/unit/test_api_material.py118 def test_upload_material_svg_detection_does_not_parse_entities(self, client):
LOWbackend/tests/unit/test_api_material.py138 def test_upload_material_text_mentioning_svg_is_rejected(self, client):
LOWbackend/tests/unit/test_api_material.py149 def test_upload_material_corrupted_image_errors_are_rejected(self, mock_image_open, client):
LOWbackend/tests/unit/test_api_material.py161 def test_upload_material_no_file(self, client):
LOWbackend/tests/unit/test_api_material.py174 def test_caption_returns_empty_on_missing_gemini_key(self, app):
LOWbackend/tests/unit/test_api_material.py193 def test_caption_returns_empty_on_missing_openai_key(self, app):
LOWbackend/tests/unit/test_api_material.py211 def test_caption_returns_empty_on_invalid_file(self, app):
LOWbackend/tests/unit/test_api_material.py221 def test_caption_gemini_success(self, mock_client_class, app):
LOWbackend/tests/unit/test_app_factory.py4def test_create_app_respects_database_url_env(monkeypatch, tmp_path):
LOWbackend/tests/unit/test_lazyllm_seedream5_patch.py132 def test_conditional_removal_based_on_runtime_model(self, mock_lazyllm):
LOWbackend/tests/unit/test_renovation_filename.py94 def test_chinese_filename_saved_as_original_pdf(self, client, app):
LOWbackend/tests/unit/test_renovation_filename.py121 def test_task_manager_can_discover_pdf(self, client, app):
LOWbackend/tests/unit/test_renovation_filename.py146 def test_ascii_filename_also_works(self, client, app):
LOWbackend/tests/unit/test_ai_mock.py14 def test_ai_service_is_mocked(self, mock_ai_service):
LOWbackend/tests/unit/test_ai_mock.py26 def test_description_generation_mocked(self, mock_ai_service):
LOWbackend/tests/unit/test_ai_mock.py35 def test_image_generation_mocked(self, mock_ai_service):
LOWbackend/tests/unit/test_lazyllm_image_content_type.py54 def test_fallback_on_content_type_error(self):
LOWbackend/tests/unit/test_lazyllm_image_content_type.py80 def test_untrusted_host_is_not_fetched(self):
LOWbackend/tests/unit/test_lazyllm_image_content_type.py96 def test_non_content_type_error_is_reraised(self):
LOWbackend/tests/unit/test_lazyllm_image_content_type.py121 def test_ssrf_bypass_attempts_are_rejected(self, malicious_url):
LOWbackend/tests/unit/test_lazyllm_image_content_type.py156 def test_allowlisted_urls_accepted(self, url):
LOWbackend/tests/unit/test_lazyllm_image_content_type.py159 def test_reported_ssrf_bypass_regression(self):
LOWbackend/tests/unit/test_lazyllm_image_content_type.py203 def test_attack_payloads_rejected(self, url):
LOWbackend/tests/unit/test_cli_loader.py51def test_load_csv_jobs_with_options_json(tmp_path: Path):
LOWbackend/tests/unit/test_cli_interactive_builder.py23def test_interactive_generate_two_jobs(tmp_path: Path):
LOWbackend/tests/unit/test_cli_interactive_builder.py86def test_interactive_generate_decline_overwrite(tmp_path: Path):
LOWbackend/tests/unit/test_file_parser_service.py21def test_generate_single_caption_uses_provider_factory():
LOWbackend/tests/unit/test_file_parser_service.py47def test_can_generate_captions_returns_false_when_factory_fails():
LOWbackend/tests/unit/test_file_parser_service.py60def test_can_generate_captions_returns_true_when_factory_succeeds():
282 more matches not shown…
Decorative Section Separators91 hits · 294 pts
SeverityFileLineSnippet
MEDIUMfrontend/e2e/generation-requirements.spec.ts53// ── Mock tests ──────────────────────────────────────────────────────
MEDIUMfrontend/e2e/generation-requirements.spec.ts191// ── Integration tests ───────────────────────────────────────────────
MEDIUMfrontend/e2e/lazyllm-global-vendor.spec.ts12// ─── Mock tests ────────────────────────────────────────────────────
MEDIUMfrontend/e2e/lazyllm-global-vendor.spec.ts148// ─── Integration tests ─────────────────────────────────────────────
MEDIUMfrontend/e2e/history-pagination.spec.ts83// ───────────────── Mock tests ─────────────────
MEDIUMfrontend/e2e/history-pagination.spec.ts192// ───────────────── Integration test ─────────────────
MEDIUMfrontend/e2e/preset-capsules.spec.ts46// ── Mock tests: Outline presets ──────────────────────────────────────
MEDIUMfrontend/e2e/preset-capsules.spec.ts144// ── Mock tests: Description presets ──────────────────────────────────
MEDIUMfrontend/e2e/preset-capsules.spec.ts184// ── Integration tests ────────────────────────────────────────────────
MEDIUMfrontend/e2e/material-textarea-picker.spec.ts64// ── Mock tests: Upload button dropdown on Home page ──────────────────
MEDIUMfrontend/e2e/material-textarea-picker.spec.ts150// ── Mock tests: Upload button dropdown on OutlineEditor ──────────────
MEDIUMfrontend/src/components/shared/PresetCapsules.tsx7// ─── i18n ────────────────────────────────────────────────────────────────────
MEDIUMfrontend/src/components/shared/PresetCapsules.tsx35// ─── Types ───────────────────────────────────────────────────────────────────
MEDIUMfrontend/src/components/shared/PresetCapsules.tsx43// ─── System presets ──────────────────────────────────────────────────────────
MEDIUMfrontend/src/components/shared/PresetCapsules.tsx70// ─── Component ───────────────────────────────────────────────────────────────
MEDIUMbackend/tests/conftest.py163# =====================================
MEDIUMbackend/tests/conftest.py165# =====================================
MEDIUMbackend/tests/unit/test_codex_image_retry.py18# ---------------------------------------------------------------------------
MEDIUMbackend/tests/unit/test_codex_image_retry.py20# ---------------------------------------------------------------------------
MEDIUMbackend/tests/unit/test_codex_image_retry.py52# ---------------------------------------------------------------------------
MEDIUMbackend/tests/unit/test_codex_image_retry.py54# ---------------------------------------------------------------------------
MEDIUMbackend/tests/unit/test_codex_image_retry.py99# ---------------------------------------------------------------------------
MEDIUMbackend/tests/unit/test_codex_image_retry.py101# ---------------------------------------------------------------------------
MEDIUMbackend/tests/unit/test_codex_text_retry.py21# ---------------------------------------------------------------------------
MEDIUMbackend/tests/unit/test_codex_text_retry.py24# ---------------------------------------------------------------------------
MEDIUMbackend/tests/unit/test_codex_text_retry.py51# ---------------------------------------------------------------------------
MEDIUMbackend/tests/unit/test_codex_text_retry.py53# ---------------------------------------------------------------------------
MEDIUMbackend/tests/unit/test_codex_text_retry.py88# ---------------------------------------------------------------------------
MEDIUMbackend/tests/unit/test_codex_text_retry.py90# ---------------------------------------------------------------------------
MEDIUMbackend/tests/unit/test_codex_text_retry.py111# ---------------------------------------------------------------------------
MEDIUMbackend/tests/unit/test_codex_text_retry.py113# ---------------------------------------------------------------------------
MEDIUMbackend/tests/unit/test_codex_text_retry.py170# ---------------------------------------------------------------------------
MEDIUMbackend/tests/unit/test_codex_text_retry.py172# ---------------------------------------------------------------------------
MEDIUMbackend/tests/unit/test_tts_video_service.py69# ═══════════════════════════════════════════════════════════════════════════════
MEDIUMbackend/tests/unit/test_tts_video_service.py71# ═══════════════════════════════════════════════════════════════════════════════
MEDIUMbackend/tests/unit/test_tts_video_service.py561# ═══════════════════════════════════════════════════════════════════════════════
MEDIUMbackend/tests/unit/test_tts_video_service.py564# ═══════════════════════════════════════════════════════════════════════════════
MEDIUMbackend/tests/unit/test_tts_video_service.py23# ═══════════════════════════════════════════════════════════════════════════════
MEDIUMbackend/tests/unit/test_tts_video_service.py25# ═══════════════════════════════════════════════════════════════════════════════
MEDIUMbackend/controllers/openai_oauth_controller.py214# ---------------------------------------------------------------------------
MEDIUMbackend/controllers/openai_oauth_controller.py216# ---------------------------------------------------------------------------
MEDIUMbackend/controllers/page_controller.py859# ═══════════════════════════════════════════════════════════════════════════════
MEDIUMbackend/controllers/page_controller.py861# ═══════════════════════════════════════════════════════════════════════════════
MEDIUMbackend/services/tts_video_service.py233# ═══════════════════════════════════════════════════════════════════════════════
MEDIUMbackend/services/tts_video_service.py235# ═══════════════════════════════════════════════════════════════════════════════
MEDIUMbackend/services/tts_video_service.py24# ═══════════════════════════════════════════════════════════════════════════════
MEDIUMbackend/services/tts_video_service.py26# ═══════════════════════════════════════════════════════════════════════════════
MEDIUMbackend/services/tts_video_service.py323# ═══════════════════════════════════════════════════════════════════════════════
MEDIUMbackend/services/tts_video_service.py325# ═══════════════════════════════════════════════════════════════════════════════
MEDIUMbackend/services/tts_video_service.py778# ═══════════════════════════════════════════════════════════════════════════════
MEDIUMbackend/services/tts_video_service.py780# ═══════════════════════════════════════════════════════════════════════════════
MEDIUMbackend/services/tts_video_service.py1031# ═══════════════════════════════════════════════════════════════════════════════
MEDIUMbackend/services/tts_video_service.py1033# ═══════════════════════════════════════════════════════════════════════════════
MEDIUMbackend/services/tts_video_service.py1400# ═══════════════════════════════════════════════════════════════════════════════
MEDIUMbackend/services/tts_video_service.py1402# ═══════════════════════════════════════════════════════════════════════════════
MEDIUMbackend/services/tts_video_service.py1483# ═══════════════════════════════════════════════════════════════════════════════
MEDIUMbackend/services/tts_video_service.py1485# ═══════════════════════════════════════════════════════════════════════════════
MEDIUMbackend/services/prompts.py275# ═══════════════════════════════════════════════════════════════════════════════
MEDIUMbackend/services/prompts.py277# ═══════════════════════════════════════════════════════════════════════════════
MEDIUMbackend/services/prompts.py24# ═══════════════════════════════════════════════════════════════════════════════
31 more matches not shown…
Excessive Try-Catch Wrapping273 hits · 263 pts
SeverityFileLineSnippet
LOWbackend/app.py324 except Exception as e:
LOWbackend/tests/conftest.py63 except Exception:
LOWbackend/tests/integration/test_seedream5_real_api.py63 except Exception as e:
LOWbackend/tests/integration/test_seedream5_real_api.py97 except Exception as e:
LOW…kend/tests/integration/test_codex_retry_integration.py28 except Exception:
LOWbackend/tests/integration/test_api_full_flow.py79 except Exception as e:
LOWbackend/tests/integration/test_api_full_flow.py134 except Exception as e:
LOWbackend/tests/integration/test_api_full_flow.py160 except Exception as e:
LOWbackend/utils/latex_utils.py174 except Exception as e:
LOWbackend/utils/latex_utils.py216 except Exception as e:
LOWbackend/utils/pptx_builder.py103 except Exception as e:
LOWbackend/utils/pptx_builder.py131 except Exception as e:
LOWbackend/utils/pptx_builder.py167 except Exception as e:
LOWbackend/utils/pptx_builder.py536 except Exception as e:
LOWbackend/utils/pptx_builder.py592 except Exception as e:
LOWbackend/utils/pptx_builder.py647 except Exception as e:
LOWbackend/utils/path_utils.py41 except Exception as e:
LOWbackend/utils/mask_utils.py220 except Exception as e:
LOWbackend/utils/mask_utils.py326 except Exception as e:
LOWbackend/models/settings.py216 except Exception:
LOWbackend/controllers/material_controller.py112 except Exception:
LOWbackend/controllers/material_controller.py164 except Exception as e:
LOWbackend/controllers/material_controller.py230 except Exception as e:
LOWbackend/controllers/material_controller.py295 except Exception:
LOWbackend/controllers/material_controller.py498 except Exception as e:
LOWbackend/controllers/material_controller.py504 except Exception as e:
LOWbackend/controllers/material_controller.py644 except Exception:
LOWbackend/controllers/material_controller.py649 except Exception as e:
LOWbackend/controllers/material_controller.py672 except Exception as e:
LOWbackend/controllers/material_controller.py716 except Exception as e:
LOWbackend/controllers/material_controller.py761 except Exception as e:
LOWbackend/controllers/material_controller.py813 except Exception as e:
LOWbackend/controllers/material_controller.py852 except Exception:
LOWbackend/controllers/material_controller.py878 except Exception as e:
LOWbackend/controllers/material_controller.py902 except Exception as e:
LOWbackend/controllers/file_controller.py47 except Exception as e:
LOWbackend/controllers/file_controller.py80 except Exception as e:
LOWbackend/controllers/file_controller.py112 except Exception as e:
LOWbackend/controllers/file_controller.py137 except Exception:
LOWbackend/controllers/file_controller.py154 except Exception:
LOWbackend/controllers/file_controller.py160 except Exception as e:
LOWbackend/controllers/openai_oauth_controller.py190 except Exception as e:
LOWbackend/controllers/openai_oauth_controller.py268 except Exception as e:
LOWbackend/controllers/openai_oauth_controller.py329 except Exception:
LOWbackend/controllers/reference_file_controller.py93 except Exception as e:
LOWbackend/controllers/reference_file_controller.py102 except Exception as db_error:
LOWbackend/controllers/reference_file_controller.py137 except Exception:
LOWbackend/controllers/reference_file_controller.py209 except Exception as e:
LOWbackend/controllers/reference_file_controller.py230 except Exception as e:
LOWbackend/controllers/reference_file_controller.py255 except Exception as e:
LOWbackend/controllers/reference_file_controller.py266 except Exception as e:
LOWbackend/controllers/reference_file_controller.py304 except Exception as e:
LOWbackend/controllers/reference_file_controller.py360 except Exception as e:
LOWbackend/controllers/reference_file_controller.py403 except Exception as e:
LOWbackend/controllers/reference_file_controller.py433 except Exception as e:
LOWbackend/controllers/export_controller.py74 except Exception as e:
LOWbackend/controllers/export_controller.py151 except Exception as e:
LOWbackend/controllers/export_controller.py225 except Exception as e:
LOWbackend/controllers/export_controller.py293 except Exception as e:
LOWbackend/controllers/export_controller.py435 except Exception as e:
213 more matches not shown…
Unused Imports177 hits · 168 pts
SeverityFileLineSnippet
LOWbackend/config.py5
LOWbackend/config.py6
LOWbackend/tests/unit/test_api_health.py5
LOWbackend/tests/unit/test_cli_run_monitor.py3
LOWbackend/tests/unit/test_api_material.py9
LOWbackend/tests/unit/test_renovation_filename.py11
LOWbackend/tests/unit/test_ai_mock.py7
LOWbackend/tests/unit/test_ai_mock.py8
LOWbackend/tests/unit/test_ai_mock.py8
LOWbackend/tests/unit/test_cli_loader.py3
LOWbackend/tests/unit/test_cli_interactive_builder.py3
LOWbackend/tests/unit/test_api_project.py10
LOWbackend/tests/unit/test_api_project.py90
LOWbackend/tests/unit/test_icon_subject_extraction.py11
LOWbackend/tests/unit/test_cli_plain_help.py3
LOWbackend/tests/unit/test_smart_merge.py2
LOWbackend/tests/unit/test_cli_resolve.py3
LOWbackend/tests/unit/test_cli_resolve.py5
LOWbackend/tests/unit/test_cli_resolve.py6
LOWbackend/tests/unit/test_cli_resolve.py11
LOWbackend/tests/unit/test_cli_config.py3
LOWbackend/tests/integration/test_full_workflow.py7
LOWbackend/tests/integration/test_full_workflow.py8
LOWbackend/tests/integration/test_seedream5_real_api.py15
LOWbackend/tests/integration/test_api_full_flow.py23
LOWbackend/utils/__init__.py2
LOWbackend/utils/__init__.py2
LOWbackend/utils/__init__.py2
LOWbackend/utils/__init__.py2
LOWbackend/utils/__init__.py2
LOWbackend/utils/__init__.py2
LOWbackend/utils/__init__.py2
LOWbackend/utils/__init__.py11
LOWbackend/utils/__init__.py11
LOWbackend/utils/__init__.py11
LOWbackend/utils/__init__.py12
LOWbackend/utils/__init__.py12
LOWbackend/utils/__init__.py12
LOWbackend/utils/__init__.py13
LOWbackend/utils/__init__.py14
LOWbackend/utils/__init__.py14
LOWbackend/utils/__init__.py14
LOWbackend/utils/response.py5
LOWbackend/utils/response.py5
LOWbackend/utils/pptx_builder.py8
LOWbackend/utils/pptx_builder.py14
LOWbackend/utils/pptx_builder.py14
LOWbackend/utils/page_utils.py4
LOWbackend/models/__init__.py19
LOWbackend/models/__init__.py20
LOWbackend/models/__init__.py21
LOWbackend/models/__init__.py22
LOWbackend/models/__init__.py23
LOWbackend/models/__init__.py24
LOWbackend/models/__init__.py25
LOWbackend/models/__init__.py26
LOWbackend/models/__init__.py27
LOWbackend/controllers/openai_oauth_controller.py11
LOWbackend/controllers/openai_oauth_controller.py16
LOWbackend/controllers/__init__.py2
117 more matches not shown…
Verbosity Indicators56 hits · 91 pts
SeverityFileLineSnippet
LOWfrontend/e2e/ui-full-flow.spec.ts40 // Step 1: Visit homepage
LOWfrontend/e2e/ui-full-flow.spec.ts55 // Step 2: Ensure "一句话生成" tab is selected (it's selected by default)
LOWfrontend/e2e/ui-full-flow.spec.ts68 // Step 3: Enter idea and click "Next"
LOWfrontend/e2e/ui-full-flow.spec.ts83 // Step 4: Click batch generate outline button on outline editor page
LOWfrontend/e2e/ui-full-flow.spec.ts124 // Step 5: Wait for outline generation to complete (smart wait)
LOWfrontend/e2e/ui-full-flow.spec.ts153 // Step 6: Click "Next" to go to description editor page
LOWfrontend/e2e/ui-full-flow.spec.ts166 // Step 7: Click batch generate descriptions button
LOWfrontend/e2e/ui-full-flow.spec.ts178 // Step 8: Wait for descriptions to generate (smart wait)
LOWfrontend/e2e/ui-full-flow.spec.ts193 // Step 9: Test retry single card functionality
LOWfrontend/e2e/ui-full-flow.spec.ts254 // Step 10: Click "生成图片" to go to image generation page
LOWfrontend/e2e/ui-full-flow.spec.ts346 // Step 11: Select template (required before generating images)
LOWfrontend/e2e/ui-full-flow.spec.ts438 // Step 12: Click batch generate images button
LOWfrontend/e2e/ui-full-flow.spec.ts625 // Step 14: Export PPT
LOWfrontend/e2e/ui-full-flow.spec.ts632 // Step 1: Wait for export button to be enabled (it's disabled until all images are generated)
LOWfrontend/e2e/ui-full-flow.spec.ts643 // Step 2: Click "导出为 PPTX" in the dropdown menu
LOWfrontend/e2e/ui-full-flow-mocked.spec.ts132 // Step 1: Visit homepage
LOWfrontend/e2e/ui-full-flow-mocked.spec.ts140 // Step 2: Ensure "一句话生成" tab is selected (it's selected by default)
LOWfrontend/e2e/ui-full-flow-mocked.spec.ts151 // Step 3: Enter idea and click "Next"
LOWfrontend/e2e/ui-full-flow-mocked.spec.ts165 // Step 4: Verify outline editor page loaded
LOWfrontend/e2e/ui-full-flow-mocked.spec.ts172 // Step 5: Click generate outline (mocked)
LOWfrontend/e2e/ui-full-flow-mocked.spec.ts183 // Step 6: Verify UI shows outline (mocked data)
LOWfrontend/e2e/ui-full-flow-mocked.spec.ts192 // Step 7: Navigate to description editor
LOWfrontend/e2e/ui-full-flow-mocked.spec.ts203 // Step 8: Test description generation UI (mocked)
LOWfrontend/e2e/ui-full-flow-mocked.spec.ts213 // Step 9: Navigate to image generation
LOWfrontend/e2e/ui-full-flow-mocked.spec.ts224 // Step 10: Test image generation UI (mocked)
LOWfrontend/e2e/ui-full-flow-mocked.spec.ts236 // Step 11: Test export UI
LOWbackend/tests/integration/test_api_full_flow.py184 # Step 1: Create project
LOWbackend/tests/integration/test_api_full_flow.py223 # Step 2: Generate outline
LOWbackend/tests/integration/test_api_full_flow.py236 # Step 3: Wait for outline completion
LOWbackend/tests/integration/test_api_full_flow.py249 # Step 4: Generate descriptions
LOWbackend/tests/integration/test_api_full_flow.py269 # Step 5: Generate images
LOWbackend/tests/integration/test_api_full_flow.py306 # Step 6: Export PPT
LOWbackend/tests/integration/test_api_full_flow.py321 # Step 7: Verify PPT can be downloaded
LOWbackend/controllers/project_controller.py685 # Step 1: Parse description to outline
LOWbackend/controllers/project_controller.py690 # Step 2: Split description into page descriptions
LOWbackend/controllers/project_controller.py695 # Step 3: Flatten outline to pages
LOWbackend/controllers/project_controller.py705 # Step 4: Delete existing pages (using ORM session to trigger cascades)
LOWbackend/controllers/project_controller.py710 # Step 5: Create pages with both outline and description
LOWbackend/controllers/page_controller.py791 # Step 1: Parse page PDF → markdown
LOWbackend/controllers/page_controller.py812 # Step 2: AI extract structured content
LOWbackend/controllers/page_controller.py816 # Step 3: Optional layout caption
LOWbackend/controllers/page_controller.py831 # Step 4: Update page in database
LOWbackend/services/export_service.py981 # Step 1: 收集所有文本元素
LOWbackend/services/export_service.py1001 # Step 2: 并行执行两种识别
LOWbackend/services/export_service.py1121 # Step 3: 合并结果
LOWbackend/services/task_manager.py1344 # Step 1: Split PDF into per-page PDFs
LOWbackend/services/task_manager.py1663 # Step 1: 准备工作
LOWbackend/services/task_manager.py1692 # Step 2: 创建文字属性提取器
LOWbackend/services/task_manager.py1697 # Step 3: 调用导出方法(使用项目的导出设置)
LOWbackend/services/task_manager.py1718 # Step 4: 标记任务完成
LOWbackend/services/file_parser_service.py133 # Step 1: Get upload URL
LOWbackend/services/file_parser_service.py141 # Step 2: Upload file
LOWbackend/services/file_parser_service.py149 # Step 3: Poll for parsing result
LOWbackend/services/file_parser_service.py157 # Step 4: Enhance markdown with image captions
LOWbackend/services/image_editability/inpaint_providers.py377 # Step 1: 百度图像修复 - 精确去除文字
LOWbackend/services/image_editability/inpaint_providers.py393 # Step 2: 生成式画质提升(可选)
Deep Nesting108 hits · 85 pts
SeverityFileLineSnippet
LOWbackend/app.py196
LOWbackend/tests/unit/test_api_project.py131
LOWbackend/tests/unit/test_api_settings_provider.py30
LOWbackend/tests/unit/test_api_settings_provider.py48
LOWbackend/tests/integration/test_api_full_flow.py38
LOWbackend/tests/integration/test_api_full_flow.py90
LOWbackend/utils/pptx_builder.py250
LOWbackend/utils/pptx_builder.py571
LOWbackend/utils/path_utils.py75
LOWbackend/utils/mask_utils.py59
LOWbackend/utils/mask_utils.py109
LOWbackend/utils/mask_utils.py274
LOWbackend/controllers/material_controller.py44
LOWbackend/controllers/material_controller.py380
LOWbackend/controllers/material_controller.py510
LOWbackend/controllers/material_controller.py819
LOWbackend/controllers/file_controller.py117
LOWbackend/controllers/reference_file_controller.py38
LOWbackend/controllers/reference_file_controller.py107
LOWbackend/controllers/reference_file_controller.py272
LOWbackend/controllers/export_controller.py230
LOWbackend/controllers/project_controller.py301
LOWbackend/controllers/project_controller.py427
LOWbackend/controllers/project_controller.py519
LOWbackend/controllers/project_controller.py850
LOWbackend/controllers/project_controller.py1227
LOWbackend/controllers/project_controller.py1351
LOWbackend/controllers/project_controller.py542
LOWbackend/controllers/project_controller.py874
LOWbackend/controllers/page_controller.py237
LOWbackend/controllers/page_controller.py325
LOWbackend/controllers/page_controller.py502
LOWbackend/controllers/page_controller.py742
LOWbackend/controllers/page_controller.py991
LOWbackend/controllers/settings_controller.py32
LOWbackend/controllers/settings_controller.py172
LOWbackend/controllers/settings_controller.py443
LOWbackend/controllers/settings_controller.py516
LOWbackend/controllers/settings_controller.py617
LOWbackend/controllers/settings_controller.py803
LOWbackend/controllers/settings_controller.py1026
LOWbackend/controllers/settings_controller.py1081
LOWbackend/services/ai_service.py344
LOWbackend/services/ai_service.py391
LOWbackend/services/ai_service.py877
LOWbackend/services/ai_service.py448
LOWbackend/services/inpainting_service.py87
LOWbackend/services/tts_video_service.py366
LOWbackend/services/tts_video_service.py815
LOWbackend/services/tts_video_service.py1045
LOWbackend/services/tts_video_service.py1426
LOWbackend/services/tts_video_service.py1488
LOWbackend/services/prompts.py117
LOWbackend/services/ai_service_manager.py88
LOWbackend/services/export_service.py700
LOWbackend/services/export_service.py791
LOWbackend/services/export_service.py932
LOWbackend/services/export_service.py1159
LOWbackend/services/export_service.py1396
LOWbackend/services/task_manager.py362
48 more matches not shown…
Redundant / Tautological Comments33 hits · 56 pts
SeverityFileLineSnippet
LOWbackend/run.sh10# Check if .env exists
LOWbackend/run.sh18# Check if virtual environment exists
LOWbackend/tests/integration/test_seedream5_real_api.py13# Check if lazyllm is available
LOWbackend/tests/integration/test_seedream5_real_api.py66 # Check if it's the guidance_scale error
LOWbackend/utils/pptx_builder.py186 # Check if dimensions exceed python-pptx limits and scale down if needed
LOWbackend/utils/pptx_builder.py329 # Check if it fits
LOWbackend/utils/pptx_builder.py372 # Check if we have colored segments (multi-color text)
LOWbackend/utils/pptx_builder.py520 # Check if image exists
LOWbackend/controllers/file_controller.py35 # Check if directory exists
LOWbackend/controllers/file_controller.py39 # Check if file exists
LOWbackend/controllers/file_controller.py68 # Check if directory exists
LOWbackend/controllers/file_controller.py72 # Check if file exists
LOWbackend/controllers/file_controller.py100 # Check if directory exists
LOWbackend/controllers/file_controller.py104 # Check if file exists
LOWbackend/controllers/file_controller.py133 # Check if the path is trying to escape the root directory
LOWbackend/controllers/reference_file_controller.py119 # Check if file is in request
LOWbackend/controllers/export_controller.py350 # Check if pages have generated images
LOWbackend/controllers/project_controller.py1259 # Check if pages have descriptions (允许没有描述,从空开始)
LOWbackend/controllers/page_controller.py261 # Check if already generated
LOWbackend/controllers/page_controller.py350 # Check if already generated
LOWbackend/controllers/template_controller.py32 # Check if file is in request
LOWbackend/controllers/template_controller.py125 # Check if file is in request
LOWbackend/controllers/settings_controller.py702 # Check if reasoning configuration changed (requires AIService cache clear)
LOWbackend/services/export_service.py621 # Check if this is a table with子元素 (cells from Baidu OCR)
LOWbackend/services/export_service.py647 # Check if this is a table with HTML data (legacy)
LOWbackend/services/task_manager.py124 # Check if task raised an exception
LOWbackend/services/file_parser_service.py118 # Check if it's a plain text file that doesn't need MinerU parsing
LOWbackend/services/file_parser_service.py125 # Check if it's a spreadsheet file (xlsx, csv) - use markitdown
LOWbackend/services/file_parser_service.py187 # Read file content
LOWbackend/services/file_parser_service.py195 # Check if content has markdown images
LOWscripts/setup-env-from-secrets.sh56 # Check if this configuration item exists in .env file
LOWscripts/test_docker_environment.sh255# Check if project still exists
LOWscripts/run-local-ci.sh147 # Check if Docker is running
Docstring Block Structure8 hits · 40 pts
SeverityFileLineSnippet
HIGHbackend/services/ai_service.py208 生成并解析JSON,如果解析失败则重新生成 Args: prompt: 生成提示词 thinking_budget: 思考预算(会根据 en
HIGHbackend/services/ai_service.py240 带图片输入的JSON生成,如果解析失败则重新生成(最多重试3次) Args: prompt: 生成提示词 image_path: 图片文件路
HIGHbackend/services/ai_service.py880 Generate image using configured image provider Based on gemini_genai.py gen_image() Ar
HIGHbackend/services/image_editability/service.py92 将图片转换为可编辑结构(递归) 线程安全:此方法可以被多个线程并行调用 Args: image_path: 图片路径
HIGHbackend/services/image_editability/factories.py313 创建基于生成式大模型的Inpaint提供者 使用生成式大模型(如Gemini图片编辑)通过自然语言指令移除图片中的文字和图标。 适用于不需要精确bbox的场景,大模型自动理
HIGHbackend/services/image_editability/factories.py506 从默认参数创建配置 默认配置(推荐用于导出PPTX): - 元素提取:混合提取器(MinerU版面分析 + 百度高精度OCR) - 背景生成:混合Inpai
HIGHbackend/services/image_editability/factories.py702 创建基于Caption Model的文字属性提取器 使用视觉语言模型(如Gemini)分析文字区域图像, 通过生成JSON的方式获取字体颜色、是否粗体、是否斜体等属性。
HIGHbackend/services/image_editability/factories.py730 创建文字属性提取器注册表 支持动态注册新元素类型,不限于预定义类型。 Args: caption_extractor: Capti
Magic Placeholder Names7 hits · 30 pts
SeverityFileLineSnippet
HIGHREADME.md242GOOGLE_API_KEY=your-api-key-here
HIGHREADME.md247OPENAI_API_KEY=your-api-key-here
HIGHREADME_EN.md245GOOGLE_API_KEY=your-api-key-here
HIGHREADME_EN.md252OPENAI_API_KEY=your-api-key-here
HIGHbackend/controllers/settings_controller.py179 "api_key": "your-api-key",
HIGHscripts/setup-env-from-secrets.sh76 sed -i '/^GOOGLE_API_KEY=/s/your-api-key-here/mock-api-key/' "$ENV_FILE"
HIGHv0_demo/lazyllm_genai.py22 export BANANA_QWEN_API_KEY = "your-api-key"
Self-Referential Comments5 hits · 14 pts
SeverityFileLineSnippet
MEDIUMbackend/tests/unit/test_api_material.py180 # Create a temp image
MEDIUMbackend/tests/integration/test_api_full_flow.py206 # Create a simple test template image
MEDIUMbackend/controllers/page_controller.py610 # Create a temporary directory in the project's upload folder
MEDIUMscripts/test_docker_environment.sh236# Create a project
MEDIUMv0_demo/lazyllm_genai.py196 # Create a test image if it doesn't exist
Cross-Language Confusion1 hit · 5 pts
SeverityFileLineSnippet
HIGHbackend/models/material.py16 project_id = db.Column(db.String(36), db.ForeignKey('projects.id'), nullable=True) # Can be null, for global materi
Synthetic Comment Markers1 hit · 5 pts
SeverityFileLineSnippet
HIGHbackend/models/material.py20 caption = db.Column(db.String(500), nullable=True) # AI-generated image description
Fake / Example Data4 hits · 4 pts
SeverityFileLineSnippet
LOWfrontend/e2e/file-preview-scrollbar.spec.ts12const LONG_MARKDOWN = '# Test Document\n\n' + 'Lorem ipsum dolor sit amet. '.repeat(200) +
LOWfrontend/e2e/file-preview-scrollbar.spec.ts12const LONG_MARKDOWN = '# Test Document\n\n' + 'Lorem ipsum dolor sit amet. '.repeat(200) +
LOWfrontend/e2e/openai-oauth.spec.ts48 json: { success: true, data: { ...base, openai_oauth_connected: true, openai_oauth_account_id: 'user@example
LOWfrontend/e2e/openai-oauth.spec.ts117 json: { success: true, data: { ...base, openai_oauth_connected: true, openai_oauth_account_id: 'user@example
AI Slop Vocabulary1 hit · 3 pts
SeverityFileLineSnippet
MEDIUMbackend/services/ai_providers/image/openai_provider.py160 # Build comprehensive extra_body that works with multiple providers
Over-Commented Block2 hits · 2 pts
SeverityFileLineSnippet
LOWREADME.md241# Gemini 格式配置(当 AI_PROVIDER_FORMAT=gemini 时使用)
LOW.github/workflows/docker-publish.yml321 # VERSION: ${{ inputs.version }}
Example Usage Blocks1 hit · 2 pts
SeverityFileLineSnippet
LOWscripts/setup-env-from-secrets.sh5# Usage: