AI turns documents or topics into real, native PowerPoint decks—with native shapes, transitions and animations, data-backed charts and tables on demand, audio narration from speaker notes, and support for your own .pptx templates. · by Hugo He
This report presents the forensic synthetic code analysis of hugohe3/ppt-master, a Python project with 50,040 GitHub stars. SynthScan v2.0 examined 261,899 lines of code across 542 source files, recording 2536 pattern matches distributed across 20 syntactic categories. The overall adjusted score of 11.5 places this repository in the Low AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
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.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 2536 distinct pattern matches across 20 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | skills/ppt-master/scripts/authoring_roundtrip.py | 244 | def _roundtrip_source_svg_names( | CODE |
| LOW | skills/ppt-master/scripts/authoring_roundtrip.py | 887 | def _generate_baseline_bundle( | CODE |
| LOW | skills/ppt-master/scripts/authoring_roundtrip.py | 957 | def _collapse_hash_only_groups(root: ET.Element) -> None: | CODE |
| LOW | skills/ppt-master/scripts/authoring_roundtrip.py | 1041 | def authoring_source_ref_is_unchanged( | CODE |
| LOW | skills/ppt-master/scripts/authoring_roundtrip.py | 1129 | def _outer_source_ref_elements(root: ET.Element) -> list[ET.Element]: | CODE |
| LOW | skills/ppt-master/scripts/authoring_roundtrip.py | 1216 | def _referenced_definition_ids(element: ET.Element) -> set[str]: | CODE |
| LOW | skills/ppt-master/scripts/authoring_roundtrip.py | 1226 | def _definition_reference_ids(element: ET.Element) -> set[str]: | CODE |
| LOW | skills/ppt-master/scripts/authoring_roundtrip.py | 1237 | def _prune_unreferenced_definitions(root: ET.Element) -> None: | CODE |
| LOW | skills/ppt-master/scripts/authoring_roundtrip.py | 1347 | def _rebase_resource_references( | CODE |
| LOW | skills/ppt-master/scripts/authoring_roundtrip.py | 1388 | def _restore_preserved_effect_metadata( | CODE |
| LOW | skills/ppt-master/scripts/authoring_roundtrip.py | 1412 | def _apply_authoring_root_attributes( | CODE |
| LOW | skills/ppt-master/scripts/authoring_roundtrip.py | 1424 | def _native_restore_placeholder( | CODE |
| LOW | skills/ppt-master/scripts/authoring_roundtrip.py | 1808 | def materialize_flat_authoring_roundtrip( | CODE |
| LOW | skills/ppt-master/scripts/prompt_audit.py | 1000 | def _strongly_connected_components(edges: Iterable[tuple[str, str]]) -> list[list[str]]: | CODE |
| LOW | skills/ppt-master/scripts/prompt_audit.py | 1086 | def _structured_registry_expected_order(config: dict[str, Any]) -> list[str]: | CODE |
| LOW | skills/ppt-master/scripts/prompt_audit.py | 1663 | def _schema_owner_fingerprint( | CODE |
| LOW | skills/ppt-master/scripts/prompt_audit.py | 1700 | def _has_schema_grammar_signal(line: str, schema_field: str) -> bool: | CODE |
| LOW | skills/ppt-master/scripts/pptx_intake.py | 290 | def _upsert_source_index_unlocked( | CODE |
| LOW | skills/ppt-master/scripts/pptx_delivery_check.py | 270 | def _declared_content_type_for_part( | CODE |
| LOW | skills/ppt-master/scripts/pptx_delivery_check.py | 447 | def _relationship_problem_code(problem: str) -> str: | CODE |
| LOW | skills/ppt-master/scripts/pptx_delivery_check.py | 503 | def _motion_and_hidden_summary( | CODE |
| LOW | skills/ppt-master/scripts/pptx_effects.py | 42 | def project_effect_status_errors(root: ET.Element) -> list[str]: | CODE |
| LOW | skills/ppt-master/scripts/pptx_effects.py | 109 | def preserved_native_effect_xml(elem: ET.Element) -> str | None: | CODE |
| LOW | skills/ppt-master/scripts/pptx_effects.py | 136 | def _validate_native_effect_container(effect_container: ET.Element) -> None: | CODE |
| LOW | skills/ppt-master/scripts/pptx_effects.py | 155 | def unsupported_effect_metadata(*reasons: str) -> dict[str, str]: | CODE |
| LOW | skills/ppt-master/scripts/semantic_table.py | 252 | def expand_semantic_table_payload(payload: dict[str, Any]) -> dict[str, Any]: | CODE |
| LOW | skills/ppt-master/scripts/semantic_table.py | 374 | def _compact_plain_paragraphs(payload: dict[str, Any]) -> None: | CODE |
| LOW | skills/ppt-master/scripts/semantic_table.py | 446 | def compact_semantic_table_payload(payload: dict[str, Any]) -> dict[str, Any]: | CODE |
| LOW | skills/ppt-master/scripts/finalize_svg.py | 128 | def _publish_candidate_directory(candidate_dir: Path, output_dir: Path) -> None: | CODE |
| LOW | skills/ppt-master/scripts/finalize_svg.py | 176 | def _process_candidate_directory( | CODE |
| LOW | skills/ppt-master/scripts/register_template.py | 353 | def _qualified_template_specs(directory: Path) -> list[tuple[Path, str]]: | CODE |
| LOW | skills/ppt-master/scripts/register_template.py | 365 | def validate_qualified_spec_identity( | CODE |
| LOW | skills/ppt-master/scripts/register_template.py | 427 | def _has_qualified_roster_spec(template_dir: Path) -> bool: | CODE |
| LOW | skills/ppt-master/scripts/register_template.py | 493 | def _style_value_is_substantive(value: str | None) -> bool: | CODE |
| LOW | skills/ppt-master/scripts/register_template.py | 989 | def _validate_svg_template_spec( | CODE |
| LOW | skills/ppt-master/scripts/register_template.py | 1125 | def validate_shadowed_deck_spec( | CODE |
| LOW | skills/ppt-master/scripts/extract_svg_assets.py | 271 | def _rewrite_reference_values( | CODE |
| LOW | skills/ppt-master/scripts/extract_svg_assets.py | 520 | def _icon_asset_for_namespace(icon_name: str, icon_namespace: str) -> str | None: | CODE |
| LOW | skills/ppt-master/scripts/extract_svg_assets.py | 535 | def _has_namespace_placeholder(root: ET.Element, icon_namespace: str) -> bool: | CODE |
| LOW | skills/ppt-master/scripts/extract_svg_assets.py | 592 | def _existing_placeholder_entries( | CODE |
| LOW | skills/ppt-master/scripts/extract_svg_assets.py | 758 | def _fresh_native_fallback_markers(root: ET.Element) -> set[ET.Element]: | CODE |
| LOW | skills/ppt-master/scripts/extract_svg_assets.py | 777 | def _normalize_authoring_tree( | CODE |
| LOW | skills/ppt-master/scripts/visualization_catalog.py | 132 | def legacy_structure_intent_keys() -> tuple[str, ...]: | CODE |
| LOW | skills/ppt-master/scripts/visualization_catalog.py | 222 | def load_visualization_catalog( | CODE |
| LOW | skills/ppt-master/scripts/visualization_catalog.py | 241 | def load_visualization_entries( | CODE |
| LOW | skills/ppt-master/scripts/visualization_catalog.py | 262 | def resolve_visualization_reference( | CODE |
| LOW | skills/ppt-master/scripts/svg_authoring_view.py | 334 | def _index_initial_authoring_references( | CODE |
| LOW | skills/ppt-master/scripts/svg_authoring_view.py | 363 | def _fresh_native_fallback_markers(root: ET.Element) -> set[ET.Element]: | CODE |
| LOW | skills/ppt-master/scripts/svg_authoring_view.py | 477 | def _is_hidden_geometry_carrier(element: ET.Element) -> bool: | CODE |
| LOW | skills/ppt-master/scripts/svg_authoring_view.py | 491 | def _is_semantic_shape_candidate(element: ET.Element) -> bool: | CODE |
| LOW | skills/ppt-master/scripts/svg_authoring_view.py | 602 | def _make_geometry_carrier_visible(element: ET.Element) -> int: | CODE |
| LOW | skills/ppt-master/scripts/svg_authoring_view.py | 662 | def _semantic_text_has_content(element: ET.Element) -> bool: | CODE |
| LOW | skills/ppt-master/scripts/svg_authoring_view.py | 666 | def _normalize_semantic_text_lines(text: ET.Element) -> bool: | CODE |
| LOW | skills/ppt-master/scripts/svg_authoring_view.py | 734 | def _semantic_paragraph_from_text( | CODE |
| LOW | skills/ppt-master/scripts/svg_authoring_view.py | 765 | def _merge_semantic_shape_texts( | CODE |
| LOW | skills/ppt-master/scripts/svg_authoring_view.py | 1003 | def _rewrite_asset_references( | CODE |
| LOW | skills/ppt-master/scripts/svg_authoring_view.py | 1088 | def _prune_unreferenced_definitions( | CODE |
| LOW | skills/ppt-master/scripts/svg_authoring_view.py | 1130 | def _source_proxy_asset_bytes( | CODE |
| LOW | skills/ppt-master/scripts/svg_authoring_view.py | 1268 | def _prefer_editable_vector_asset(element: ET.Element) -> bool: | CODE |
| LOW | skills/ppt-master/scripts/svg_authoring_view.py | 1286 | def _contains_authoring_semantics(element: ET.Element) -> bool: | CODE |
| 1103 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | requirements.txt | 2 | # ============================================= | COMMENT |
| MEDIUM⚡ | skills/ppt-master/requirements.txt | 32 | # ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | skills/ppt-master/requirements.txt | 34 | # ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | skills/ppt-master/requirements.txt | 39 | # ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | skills/ppt-master/requirements.txt | 41 | # ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | skills/ppt-master/requirements.txt | 70 | # ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | skills/ppt-master/requirements.txt | 72 | # ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | skills/ppt-master/requirements.txt | 80 | # ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | skills/ppt-master/requirements.txt | 82 | # ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | skills/ppt-master/requirements.txt | 93 | # ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | skills/ppt-master/requirements.txt | 95 | # ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | skills/ppt-master/requirements.txt | 101 | # ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | skills/ppt-master/requirements.txt | 103 | # ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | skills/ppt-master/requirements.txt | 2 | # ============================================= | COMMENT |
| MEDIUM | skills/ppt-master/requirements.txt | 13 | # ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | skills/ppt-master/requirements.txt | 15 | # ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | skills/ppt-master/requirements.txt | 53 | # ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | skills/ppt-master/requirements.txt | 55 | # ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | skills/ppt-master/scripts/register_template.py | 248 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/ppt-master/scripts/register_template.py | 250 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/ppt-master/scripts/register_template.py | 1149 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/ppt-master/scripts/register_template.py | 1151 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/ppt-master/scripts/register_template.py | 1330 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/ppt-master/scripts/register_template.py | 1332 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/ppt-master/scripts/register_template.py | 1411 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/ppt-master/scripts/register_template.py | 1413 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/ppt-master/scripts/config.py | 28 | # ============================================================ | COMMENT |
| MEDIUM | skills/ppt-master/scripts/config.py | 30 | # ============================================================ | COMMENT |
| MEDIUM | skills/ppt-master/scripts/config.py | 49 | # ============================================================ | COMMENT |
| MEDIUM | skills/ppt-master/scripts/config.py | 51 | # ============================================================ | COMMENT |
| MEDIUM | skills/ppt-master/scripts/config.py | 162 | # ============================================================ | COMMENT |
| MEDIUM | skills/ppt-master/scripts/config.py | 164 | # ============================================================ | COMMENT |
| MEDIUM | skills/ppt-master/scripts/config.py | 242 | # ============================================================ | COMMENT |
| MEDIUM | skills/ppt-master/scripts/config.py | 244 | # ============================================================ | COMMENT |
| MEDIUM | skills/ppt-master/scripts/config.py | 316 | # ============================================================ | COMMENT |
| MEDIUM | skills/ppt-master/scripts/config.py | 318 | # ============================================================ | COMMENT |
| MEDIUM | skills/ppt-master/scripts/config.py | 408 | # ============================================================ | COMMENT |
| MEDIUM | skills/ppt-master/scripts/config.py | 410 | # ============================================================ | COMMENT |
| MEDIUM | skills/ppt-master/scripts/config.py | 431 | # ============================================================ | COMMENT |
| MEDIUM | skills/ppt-master/scripts/config.py | 433 | # ============================================================ | COMMENT |
| MEDIUM | skills/ppt-master/scripts/config.py | 487 | # ============================================================ | COMMENT |
| MEDIUM | skills/ppt-master/scripts/config.py | 489 | # ============================================================ | COMMENT |
| MEDIUM | skills/ppt-master/scripts/config.py | 507 | # ============================================================ | COMMENT |
| MEDIUM | skills/ppt-master/scripts/config.py | 509 | # ============================================================ | COMMENT |
| MEDIUM | skills/ppt-master/scripts/config.py | 640 | # ============================================================ | COMMENT |
| MEDIUM | skills/ppt-master/scripts/config.py | 642 | # ============================================================ | COMMENT |
| MEDIUM | skills/ppt-master/scripts/svg_position_calculator.py | 55 | # ============================================================================= | COMMENT |
| MEDIUM | skills/ppt-master/scripts/svg_position_calculator.py | 57 | # ============================================================================= | COMMENT |
| MEDIUM | skills/ppt-master/scripts/svg_position_calculator.py | 152 | # ============================================================================= | COMMENT |
| MEDIUM | skills/ppt-master/scripts/svg_position_calculator.py | 154 | # ============================================================================= | COMMENT |
| MEDIUM | skills/ppt-master/scripts/svg_position_calculator.py | 303 | # ============================================================================= | COMMENT |
| MEDIUM | skills/ppt-master/scripts/svg_position_calculator.py | 305 | # ============================================================================= | COMMENT |
| MEDIUM | skills/ppt-master/scripts/svg_position_calculator.py | 452 | # ============================================================================= | COMMENT |
| MEDIUM | skills/ppt-master/scripts/svg_position_calculator.py | 454 | # ============================================================================= | COMMENT |
| MEDIUM | skills/ppt-master/scripts/svg_position_calculator.py | 580 | # ============================================================================= | COMMENT |
| MEDIUM | skills/ppt-master/scripts/svg_position_calculator.py | 582 | # ============================================================================= | COMMENT |
| MEDIUM | skills/ppt-master/scripts/svg_position_calculator.py | 678 | # ============================================================================= | COMMENT |
| MEDIUM | skills/ppt-master/scripts/svg_position_calculator.py | 680 | # ============================================================================= | COMMENT |
| MEDIUM | skills/ppt-master/scripts/svg_position_calculator.py | 764 | # ============================================================================= | COMMENT |
| MEDIUM | skills/ppt-master/scripts/svg_position_calculator.py | 766 | # ============================================================================= | COMMENT |
| 218 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | skills/ppt-master/scripts/authoring_roundtrip.py | 952 | except Exception: | CODE |
| MEDIUM | skills/ppt-master/scripts/prompt_audit.py | 2384 | print(f"Error: {exc}", file=sys.stderr) | CODE |
| LOW | skills/ppt-master/scripts/pptx_intake.py | 64 | except Exception: | CODE |
| MEDIUM | skills/ppt-master/scripts/pptx_intake.py | 358 | print(f"Error: source not found: {source}", file=sys.stderr) | CODE |
| MEDIUM | skills/ppt-master/scripts/pptx_intake.py | 363 | print(f"Error: PPTX intake failed: {exc}", file=sys.stderr) | CODE |
| MEDIUM | skills/ppt-master/scripts/video_subtitles.py | 393 | print(f"Error: {exc}", file=sys.stderr) | CODE |
| MEDIUM | skills/ppt-master/scripts/video_motion_plan.py | 681 | print(f"Error: {exc}", file=sys.stderr) | CODE |
| LOW | skills/ppt-master/scripts/visual_review.py | 195 | except Exception as e: # noqa: BLE001 | STRING |
| LOW | skills/ppt-master/scripts/visual_review.py | 225 | except Exception as e: # noqa: BLE001 — best-effort per-page | STRING |
| LOW | skills/ppt-master/scripts/visual_review.py | 231 | except Exception: # noqa: BLE001 — cleanup is best-effort | STRING |
| LOW | skills/ppt-master/scripts/visual_review.py | 364 | except Exception as e: # noqa: BLE001 — browser launch failure | CODE |
| LOW | skills/ppt-master/scripts/finalize_svg.py | 115 | except Exception as exc: | CODE |
| LOW | skills/ppt-master/scripts/finalize_svg.py | 383 | except Exception as exc: | CODE |
| MEDIUM | skills/ppt-master/scripts/check_annotations.py | 125 | print(f"Error: Path not found: {target}", file=sys.stderr) | CODE |
| MEDIUM | skills/ppt-master/scripts/check_annotations.py | 138 | print(f"Error: Expected a project directory or .svg file, got: {target}", file=sys.stderr) | CODE |
| MEDIUM | skills/ppt-master/scripts/register_template.py | 1453 | print(f"Error: {args.kind} directory not found: {spec_dir}", file=sys.stderr) | CODE |
| MEDIUM | skills/ppt-master/scripts/register_template.py | 1461 | print(f"Error: {tid}: {exc}", file=sys.stderr) | CODE |
| MEDIUM | skills/ppt-master/scripts/total_md_split.py | 131 | print(f"Error: {svg_dir} directory does not exist") | CODE |
| MEDIUM⚡ | skills/ppt-master/scripts/total_md_split.py | 152 | print(f"Error: {md_path} file does not exist") | CODE |
| LOW⚡ | skills/ppt-master/scripts/total_md_split.py | 158 | except Exception as e: | CODE |
| MEDIUM⚡ | skills/ppt-master/scripts/total_md_split.py | 159 | print(f"Error: Unable to read file {md_path}: {e}") | CODE |
| MEDIUM | skills/ppt-master/scripts/total_md_split.py | 248 | print("Error: No notes content found") | CODE |
| LOW | skills/ppt-master/scripts/total_md_split.py | 268 | except Exception as e: | CODE |
| MEDIUM | skills/ppt-master/scripts/total_md_split.py | 305 | print(f"Error: Path does not exist: {project_path}") | STRING |
| MEDIUM | skills/ppt-master/scripts/total_md_split.py | 327 | print("Error: No SVG files found") | STRING |
| MEDIUM | skills/ppt-master/scripts/total_md_split.py | 339 | print("Error: No notes content found") | STRING |
| MEDIUM | skills/ppt-master/scripts/total_md_split.py | 350 | print("Error: SVG files and notes do not match") | STRING |
| MEDIUM⚡ | skills/ppt-master/scripts/svg_authoring_view.py | 2735 | print(f"Error: output path is not a directory: {output_dir}", file=sys.stderr) | CODE |
| MEDIUM⚡ | skills/ppt-master/scripts/svg_authoring_view.py | 2738 | print("Error: output directory must not be inside the input directory", file=sys.stderr) | CODE |
| MEDIUM⚡ | skills/ppt-master/scripts/svg_authoring_view.py | 2744 | print(f"Error: {exc}", file=sys.stderr) | CODE |
| MEDIUM⚡ | skills/ppt-master/scripts/svg_authoring_view.py | 2749 | print(f"Error: output would overwrite source SVG: {same_file[0]}", file=sys.stderr) | CODE |
| MEDIUM | skills/ppt-master/scripts/svg_authoring_view.py | 2686 | print(f"Error: input does not exist: {input_path}", file=sys.stderr) | CODE |
| MEDIUM | skills/ppt-master/scripts/svg_authoring_view.py | 2706 | print(f"Error: {exc}", file=sys.stderr) | CODE |
| MEDIUM | skills/ppt-master/scripts/svg_authoring_view.py | 2722 | print(f"Error: {exc}", file=sys.stderr) | CODE |
| MEDIUM | skills/ppt-master/scripts/svg_authoring_view.py | 2779 | print(f"Error: {exc}", file=sys.stderr) | CODE |
| MEDIUM | skills/ppt-master/scripts/shape_boolean_svg.py | 145 | print(f"Error: {exc}", file=sys.stderr) | CODE |
| MEDIUM | skills/ppt-master/scripts/batch_validate.py | 30 | print("Error: Unable to import project_utils module") | CODE |
| MEDIUM | skills/ppt-master/scripts/pptx_to_svg.py | 155 | print(f"Error: file does not exist: {pptx_path}", file=sys.stderr) | CODE |
| MEDIUM | skills/ppt-master/scripts/pptx_to_svg.py | 158 | print(f"Error: expected a .pptx file, got: {pptx_path.name}", file=sys.stderr) | CODE |
| MEDIUM | skills/ppt-master/scripts/pptx_to_svg.py | 180 | print(f"Error: PPTX-to-SVG conversion failed: {exc}", file=sys.stderr) | CODE |
| MEDIUM | skills/ppt-master/scripts/animation_config.py | 82 | print(f'Error: Project path does not exist: {project_path}', file=sys.stderr) | CODE |
| MEDIUM | skills/ppt-master/scripts/animation_config.py | 93 | print(f'Error: {exc}', file=sys.stderr) | CODE |
| MEDIUM | skills/ppt-master/scripts/animation_config.py | 104 | print(f'Error: {exc}', file=sys.stderr) | CODE |
| LOW | skills/ppt-master/scripts/animation_config.py | 115 | except Exception as exc: | CODE |
| MEDIUM | skills/ppt-master/scripts/animation_config.py | 116 | print(f'Error: {exc}', file=sys.stderr) | CODE |
| MEDIUM | skills/ppt-master/scripts/animation_config.py | 127 | print(f'Error: {error}', file=sys.stderr) | CODE |
| MEDIUM | skills/ppt-master/scripts/animation_config.py | 142 | print(f'Error: {error}', file=sys.stderr) | CODE |
| MEDIUM | skills/ppt-master/scripts/svg_position_calculator.py | 1227 | print(f"Error: {e}") | CODE |
| LOW | skills/ppt-master/scripts/svg_position_calculator.py | 1226 | except Exception as e: | CODE |
| MEDIUM | skills/ppt-master/scripts/gemini_watermark_remover.py | 173 | print(f"Error: Watermark background image not found: {bg_path}") | CODE |
| MEDIUM | skills/ppt-master/scripts/gemini_watermark_remover.py | 217 | print(f"Error: File not found: {args.input}") | STRING |
| MEDIUM | skills/ppt-master/scripts/latex_render.py | 595 | print(f"Error: project directory not found: {project_path}", file=sys.stderr) | CODE |
| MEDIUM | skills/ppt-master/scripts/latex_render.py | 614 | print(f"Error: {exc}", file=sys.stderr) | CODE |
| MEDIUM | skills/ppt-master/scripts/preset_shape_svg.py | 275 | print(f"Error: {exc}", file=sys.stderr) | CODE |
| MEDIUM | skills/ppt-master/scripts/preset_shape_svg.py | 294 | print(f"Error: {exc}", file=sys.stderr) | CODE |
| MEDIUM | …ills/ppt-master/scripts/mirror_template_materialize.py | 3301 | print(f"Error: import workspace does not exist: {import_workspace}", file=sys.stderr) | CODE |
| MEDIUM | …ills/ppt-master/scripts/mirror_template_materialize.py | 3306 | print(f"Error: {exc}", file=sys.stderr) | CODE |
| MEDIUM | skills/ppt-master/scripts/stamp_native_fallbacks.py | 331 | print(f"Error: {exc}", file=sys.stderr) | CODE |
| MEDIUM | skills/ppt-master/scripts/image_gen.py | 386 | print(f"Error: Unknown IMAGE_BACKEND='{backend_name}'. Supported: {supported}") | CODE |
| LOW | skills/ppt-master/scripts/image_gen.py | 828 | except Exception: | CODE |
| 184 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | skills/ppt-master/scripts/authoring_roundtrip.py | 17 | CODE | |
| LOW | skills/ppt-master/scripts/prompt_audit.py | 22 | CODE | |
| LOW | skills/ppt-master/scripts/pptx_intake.py | 20 | CODE | |
| LOW | skills/ppt-master/scripts/video_sound_mix.py | 24 | CODE | |
| LOW | skills/ppt-master/scripts/video_subtitles.py | 21 | CODE | |
| LOW | skills/ppt-master/scripts/video_motion_plan.py | 23 | CODE | |
| LOW | skills/ppt-master/scripts/pptx_delivery_check.py | 18 | CODE | |
| LOW | skills/ppt-master/scripts/pptx_effects.py | 4 | CODE | |
| LOW | skills/ppt-master/scripts/semantic_table.py | 4 | CODE | |
| LOW | skills/ppt-master/scripts/visual_review.py | 28 | CODE | |
| LOW | skills/ppt-master/scripts/beautify_inventory.py | 29 | CODE | |
| LOW | skills/ppt-master/scripts/register_template.py | 46 | CODE | |
| LOW | skills/ppt-master/scripts/extract_svg_assets.py | 34 | CODE | |
| LOW | skills/ppt-master/scripts/config.py | 21 | CODE | |
| LOW | skills/ppt-master/scripts/visualization_catalog.py | 21 | CODE | |
| LOW | skills/ppt-master/scripts/svg_authoring_view.py | 34 | CODE | |
| LOW | skills/ppt-master/scripts/slide_roster.py | 17 | CODE | |
| LOW | skills/ppt-master/scripts/sound_sync.py | 24 | CODE | |
| LOW | skills/ppt-master/scripts/pptx_workspace.py | 19 | CODE | |
| LOW | skills/ppt-master/scripts/shape_boolean_svg.py | 28 | CODE | |
| LOW | skills/ppt-master/scripts/batch_validate.py | 22 | CODE | |
| LOW | skills/ppt-master/scripts/template_text_slots.py | 3 | CODE | |
| LOW | skills/ppt-master/scripts/pptx_to_svg.py | 35 | CODE | |
| LOW | skills/ppt-master/scripts/animation_config.py | 21 | CODE | |
| LOW | skills/ppt-master/scripts/svg_position_calculator.py | 30 | CODE | |
| LOW | skills/ppt-master/scripts/svg_position_calculator.py | 35 | CODE | |
| LOW | skills/ppt-master/scripts/svg_authoring_contract.py | 9 | CODE | |
| LOW | skills/ppt-master/scripts/workflow_transcript.py | 12 | CODE | |
| LOW | skills/ppt-master/scripts/latex_render.py | 23 | CODE | |
| LOW | skills/ppt-master/scripts/preset_shape_svg.py | 26 | CODE | |
| LOW | skills/ppt-master/scripts/workflow_log.py | 18 | CODE | |
| LOW | skills/ppt-master/scripts/powerpoint_video.py | 22 | CODE | |
| LOW | …ills/ppt-master/scripts/mirror_template_materialize.py | 19 | CODE | |
| LOW | skills/ppt-master/scripts/update_repo.py | 19 | CODE | |
| LOW | skills/ppt-master/scripts/stamp_native_fallbacks.py | 19 | CODE | |
| LOW | skills/ppt-master/scripts/pptx_opc_validation.py | 4 | CODE | |
| LOW | skills/ppt-master/scripts/narration_sync.py | 29 | CODE | |
| LOW | skills/ppt-master/scripts/image_search.py | 40 | CODE | |
| LOW | skills/ppt-master/scripts/console_encoding.py | 4 | CODE | |
| LOW | skills/ppt-master/scripts/pptx_embedded_fonts.py | 10 | CODE | |
| LOW | skills/ppt-master/scripts/svg_quality_checker.py | 33 | CODE | |
| LOW | skills/ppt-master/scripts/svg_quality_checker.py | 33 | CODE | |
| LOW | skills/ppt-master/scripts/svg_quality_checker.py | 33 | CODE | |
| LOW | skills/ppt-master/scripts/svg_quality_checker.py | 33 | CODE | |
| LOW | skills/ppt-master/scripts/svg_quality_checker.py | 33 | CODE | |
| LOW | skills/ppt-master/scripts/svg_quality_checker.py | 33 | CODE | |
| LOW | skills/ppt-master/scripts/svg_quality_checker.py | 33 | CODE | |
| LOW | skills/ppt-master/scripts/svg_quality_checker.py | 33 | CODE | |
| LOW | skills/ppt-master/scripts/svg_quality_checker.py | 33 | CODE | |
| LOW | skills/ppt-master/scripts/svg_quality_checker.py | 44 | CODE | |
| LOW | skills/ppt-master/scripts/pptx_template_import.py | 23 | CODE | |
| LOW | skills/ppt-master/scripts/update_spec.py | 25 | CODE | |
| LOW | skills/ppt-master/scripts/beautify_identity.py | 29 | CODE | |
| LOW | skills/ppt-master/scripts/image_treat.py | 23 | CODE | |
| LOW | skills/ppt-master/scripts/native_payloads.py | 19 | CODE | |
| LOW | skills/ppt-master/scripts/pptx_transitions.py | 21 | CODE | |
| LOW | skills/ppt-master/scripts/compact_svg_styles.py | 20 | CODE | |
| LOW | skills/ppt-master/scripts/icon_sync.py | 26 | CODE | |
| LOW | skills/ppt-master/scripts/project_specs.py | 18 | CODE | |
| LOW | skills/ppt-master/scripts/project_specs.py | 18 | CODE | |
| 261 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | skills/ppt-master/scripts/authoring_roundtrip.py | 290 | CODE | |
| LOW | skills/ppt-master/scripts/authoring_roundtrip.py | 957 | CODE | |
| LOW | skills/ppt-master/scripts/authoring_roundtrip.py | 979 | CODE | |
| LOW | skills/ppt-master/scripts/authoring_roundtrip.py | 1287 | CODE | |
| LOW | skills/ppt-master/scripts/authoring_roundtrip.py | 1470 | CODE | |
| LOW | skills/ppt-master/scripts/authoring_roundtrip.py | 1616 | CODE | |
| LOW | skills/ppt-master/scripts/prompt_audit.py | 124 | CODE | |
| LOW | skills/ppt-master/scripts/prompt_audit.py | 419 | CODE | |
| LOW | skills/ppt-master/scripts/prompt_audit.py | 848 | CODE | |
| LOW | skills/ppt-master/scripts/prompt_audit.py | 932 | CODE | |
| LOW | skills/ppt-master/scripts/prompt_audit.py | 1115 | CODE | |
| LOW | skills/ppt-master/scripts/prompt_audit.py | 1274 | CODE | |
| LOW | skills/ppt-master/scripts/prompt_audit.py | 1769 | CODE | |
| LOW | skills/ppt-master/scripts/video_sound_mix.py | 679 | CODE | |
| LOW | skills/ppt-master/scripts/video_sound_mix.py | 1069 | CODE | |
| LOW | skills/ppt-master/scripts/slice_images.py | 469 | CODE | |
| LOW | skills/ppt-master/scripts/video_motion_plan.py | 273 | CODE | |
| LOW | skills/ppt-master/scripts/video_motion_plan.py | 382 | CODE | |
| LOW | skills/ppt-master/scripts/pptx_delivery_check.py | 286 | CODE | |
| LOW | skills/ppt-master/scripts/pptx_delivery_check.py | 336 | CODE | |
| LOW | skills/ppt-master/scripts/pptx_delivery_check.py | 455 | CODE | |
| LOW | skills/ppt-master/scripts/pptx_delivery_check.py | 503 | CODE | |
| LOW | skills/ppt-master/scripts/pptx_delivery_check.py | 720 | CODE | |
| LOW | skills/ppt-master/scripts/pptx_effects.py | 187 | CODE | |
| LOW | skills/ppt-master/scripts/semantic_table.py | 297 | CODE | |
| LOW | skills/ppt-master/scripts/visual_review.py | 158 | CODE | |
| LOW | skills/ppt-master/scripts/finalize_svg.py | 128 | CODE | |
| LOW | skills/ppt-master/scripts/finalize_svg.py | 176 | CODE | |
| LOW | skills/ppt-master/scripts/register_template.py | 1153 | CODE | |
| LOW | skills/ppt-master/scripts/extract_svg_assets.py | 299 | CODE | |
| LOW | skills/ppt-master/scripts/extract_svg_assets.py | 592 | CODE | |
| LOW | skills/ppt-master/scripts/extract_svg_assets.py | 791 | CODE | |
| LOW | skills/ppt-master/scripts/config.py | 672 | CODE | |
| LOW | skills/ppt-master/scripts/total_md_split.py | 137 | CODE | |
| LOW | skills/ppt-master/scripts/svg_authoring_view.py | 923 | CODE | |
| LOW | skills/ppt-master/scripts/svg_authoring_view.py | 1034 | CODE | |
| LOW | skills/ppt-master/scripts/svg_authoring_view.py | 1932 | CODE | |
| LOW | skills/ppt-master/scripts/svg_authoring_view.py | 2480 | CODE | |
| LOW | skills/ppt-master/scripts/pptx_workspace.py | 486 | CODE | |
| LOW | skills/ppt-master/scripts/pptx_workspace.py | 592 | CODE | |
| LOW | skills/ppt-master/scripts/batch_validate.py | 216 | CODE | |
| LOW | skills/ppt-master/scripts/svg_position_calculator.py | 995 | CODE | |
| LOW | skills/ppt-master/scripts/svg_position_calculator.py | 1090 | CODE | |
| LOW | skills/ppt-master/scripts/svg_position_calculator.py | 1230 | CODE | |
| LOW | skills/ppt-master/scripts/svg_position_calculator.py | 1296 | CODE | |
| LOW | skills/ppt-master/scripts/svg_position_calculator.py | 860 | CODE | |
| LOW | skills/ppt-master/scripts/pptx_animations.py | 219 | CODE | |
| LOW | skills/ppt-master/scripts/pptx_animations.py | 558 | CODE | |
| LOW | skills/ppt-master/scripts/pptx_animations.py | 1241 | CODE | |
| LOW | skills/ppt-master/scripts/pptx_animations.py | 1845 | CODE | |
| LOW | skills/ppt-master/scripts/pptx_animations.py | 2382 | CODE | |
| LOW | skills/ppt-master/scripts/pptx_animations.py | 2504 | CODE | |
| LOW | skills/ppt-master/scripts/pptx_animations.py | 2716 | CODE | |
| LOW | skills/ppt-master/scripts/pptx_animations.py | 2998 | CODE | |
| LOW | skills/ppt-master/scripts/pptx_animations.py | 3033 | CODE | |
| LOW | skills/ppt-master/scripts/pptx_animations.py | 3568 | CODE | |
| LOW | skills/ppt-master/scripts/pptx_animations.py | 1243 | CODE | |
| LOW | skills/ppt-master/scripts/project_utils.py | 367 | CODE | |
| LOW | skills/ppt-master/scripts/project_utils.py | 562 | CODE | |
| LOW | skills/ppt-master/scripts/latex_render.py | 347 | CODE | |
| 302 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | skills/ppt-master/workflows/generate-pptx.md | 53 | ### Step 1: Source Content Processing | COMMENT |
| LOW | skills/ppt-master/workflows/generate-pptx.md | 117 | ### Step 2: Project Initialization | COMMENT |
| LOW | skills/ppt-master/workflows/generate-pptx.md | 191 | ### Step 3: Template Candidate Preparation | COMMENT |
| LOW | skills/ppt-master/workflows/generate-pptx.md | 243 | ### Step 4: Strategist Phase (MANDATORY in the default pipeline) | COMMENT |
| LOW | skills/ppt-master/workflows/generate-pptx.md | 525 | ### Step 5: Image Acquisition Phase (Conditional) | COMMENT |
| LOW | skills/ppt-master/workflows/generate-pptx.md | 591 | ### Step 6: Executor Phase | COMMENT |
| LOW | skills/ppt-master/workflows/generate-pptx.md | 801 | ### Step 7: Post-processing & Export | COMMENT |
| LOW | skills/ppt-master/workflows/create-template.md | 93 | ## Step 1: Reference Bundle Intake & Analysis | COMMENT |
| LOW | skills/ppt-master/workflows/create-template.md | 424 | ## Step 2: Fact-Based Brief Proposal | COMMENT |
| LOW | skills/ppt-master/workflows/create-template.md | 492 | ## Step 3: User Confirmation Gate | COMMENT |
| LOW | skills/ppt-master/workflows/create-template.md | 524 | ## Step 4: Preflight Output + Invoke the Selected Child | COMMENT |
| LOW | skills/ppt-master/workflows/create-template.md | 732 | ## Step 5: Validate Template Assets | COMMENT |
| LOW | skills/ppt-master/workflows/create-template.md | 831 | ## Step 6: Template Review PPTX and Multi-Master Package Gate | COMMENT |
| LOW | skills/ppt-master/workflows/create-template.md | 882 | ## Step 7: Register Template in Library Index (Library Scope Only) | COMMENT |
| LOW | skills/ppt-master/workflows/create-template.md | 1002 | ## Step 8: Output Confirmation | COMMENT |
| LOW | skills/ppt-master/workflows/stages/refine-spec.md | 27 | ## Step 1: Produce the complete Design Spec | COMMENT |
| LOW | skills/ppt-master/workflows/stages/refine-spec.md | 58 | ## Step 3: Approve and author the lock | COMMENT |
| LOW | skills/ppt-master/workflows/stages/verify-charts.md | 25 | ## Step 1: Build the chart-object list from the active profile authority | COMMENT |
| LOW | skills/ppt-master/workflows/stages/verify-charts.md | 89 | ## Step 2: Per object — read its SVG scope, calculate, compare, update | COMMENT |
| LOW | skills/ppt-master/workflows/stages/verify-charts.md | 293 | ## Step 3: Per-object receipt | COMMENT |
| LOW | skills/ppt-master/workflows/stages/generate-audio.md | 63 | ## Step 1: Determine the deck's language | COMMENT |
| LOW | skills/ppt-master/workflows/stages/generate-audio.md | 73 | ## Step 2: Choose audio backend and pull the voice catalog | COMMENT |
| LOW | skills/ppt-master/workflows/stages/generate-audio.md | 115 | ## Step 3: Resolve generation settings | COMMENT |
| LOW | skills/ppt-master/workflows/stages/generate-audio.md | 169 | ## Step 4: Execute (no further interaction) | COMMENT |
| LOW | skills/ppt-master/workflows/stages/generate-audio.md | 427 | ## Step 5: Completion report | COMMENT |
| LOW | skills/ppt-master/workflows/stages/topic-research.md | 40 | ## Step 1: Define the gap brief | COMMENT |
| LOW | skills/ppt-master/workflows/stages/topic-research.md | 80 | ## Step 2: Gather factual sources | COMMENT |
| LOW | skills/ppt-master/workflows/stages/topic-research.md | 117 | ## Step 3: Save the factual supplement | COMMENT |
| LOW | skills/ppt-master/workflows/stages/live-preview.md | 27 | ## Step 1: Start / reopen the editor | COMMENT |
| LOW | skills/ppt-master/workflows/stages/live-preview.md | 48 | ## Step 2: Apply submitted annotations | COMMENT |
| LOW | skills/ppt-master/workflows/stages/resume-execute.md | 32 | ## Step 1: Sanity check | COMMENT |
| LOW | skills/ppt-master/workflows/stages/resume-execute.md | 47 | ## Step 2: Load the Generate authority, proceed from Step 6 | COMMENT |
| LOW | skills/ppt-master/workflows/stages/resume-execute.md | 53 | Then jump to `### Step 6: Executor Phase`. It first loads `executor-base.md`, | CODE |
| LOW | skills/ppt-master/workflows/stages/resume-execute.md | 129 | ## Step 3: Hand-back | COMMENT |
| LOW | skills/ppt-master/scripts/finalize_svg.py | 198 | # Step 1: Expand project icons, then standard same-document use references. | COMMENT |
| LOW | skills/ppt-master/scripts/finalize_svg.py | 244 | # Step 2: Align (slice/meet) and Base64-embed all <image> in one pass. | COMMENT |
| LOW | skills/ppt-master/scripts/finalize_svg.py | 292 | # Step 3: Flatten text. | COMMENT |
| LOW | skills/ppt-master/scripts/svg_editor/static/app.js | 1786 | // Step 2: save annotations. Service lifetime is controlled only by Exit preview. | COMMENT |
| LOW⚡ | …ills/ppt-master/scripts/svg_to_pptx/drawingml/paths.py | 593 | # Step 1: Compute (x1', y1') | COMMENT |
| LOW⚡ | …ills/ppt-master/scripts/svg_to_pptx/drawingml/paths.py | 599 | # Step 2: Compute (cx', cy') | COMMENT |
| LOW⚡ | …ills/ppt-master/scripts/svg_to_pptx/drawingml/paths.py | 624 | # Step 3: Compute (cx, cy) | COMMENT |
| LOW⚡ | …ills/ppt-master/scripts/svg_to_pptx/drawingml/paths.py | 628 | # Step 4: Compute theta1 and dtheta | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | skills/ppt-master/scripts/pptx_workspace.py | 953 | __all__ = [ | CODE |
| LOW | skills/ppt-master/scripts/svg_quality_checker.py | 46 | __all__ = [ | CODE |
| LOW | skills/ppt-master/scripts/project_specs.py | 33 | __all__ = [ | CODE |
| LOW | skills/ppt-master/scripts/project_manager.py | 58 | __all__ = [ | CODE |
| LOW | skills/ppt-master/scripts/hyperlink_contract.py | 388 | __all__ = [ | CODE |
| LOW | skills/ppt-master/scripts/page_context.py | 35 | __all__ = [ | CODE |
| LOW | skills/ppt-master/scripts/pptx_to_svg/notes_import.py | 114 | __all__ = ["ImportedSpeakerNote", "import_speaker_notes"] | CODE |
| LOW | …ls/ppt-master/scripts/pptx_to_svg/transition_import.py | 200 | __all__ = [ | CODE |
| LOW | skills/ppt-master/scripts/pptx_to_svg/__init__.py | 12 | __all__ = ["convert_pptx_to_svg"] | CODE |
| LOW | …lls/ppt-master/scripts/pptx_to_svg/animation_import.py | 282 | __all__ = [ | CODE |
| LOW | skills/ppt-master/scripts/pptx_to_svg/formula_import.py | 605 | __all__ = [ | CODE |
| LOW | skills/ppt-master/scripts/pptx_to_svg/hyperlinks.py | 93 | __all__ = ["HyperlinkResolution", "resolve_click_hyperlink"] | CODE |
| LOW | skills/ppt-master/scripts/pptx_shapes/__init__.py | 81 | __all__ = [ | CODE |
| LOW | skills/ppt-master/scripts/source_to_md/ppt_to_md.py | 864 | def _update_manifest_usage(entry: dict[str, object]) -> None: | CODE |
| LOW | skills/ppt-master/scripts/pptx_ooxml/__init__.py | 11 | __all__ = [ | CODE |
| LOW | skills/ppt-master/scripts/pptx_ooxml/clone.py | 574 | def _update_app_slide_count(entries: dict[str, bytes], slide_count: int) -> None: | CODE |
| LOW | skills/ppt-master/scripts/svg_to_pptx/__init__.py | 13 | __all__ = [ | CODE |
| LOW | …r/scripts/svg_to_pptx/native_objects/formula_parser.py | 2181 | __all__ = ["FormulaCompileError", "parse_latex_formula"] | CODE |
| LOW | …/scripts/svg_to_pptx/native_objects/formula_profile.py | 714 | __all__ = [ | CODE |
| LOW | …scripts/svg_to_pptx/native_objects/formula_compiler.py | 90 | __all__ = [ | CODE |
| LOW | …-master/scripts/svg_to_pptx/native_objects/__init__.py | 89 | __all__ = [ | CODE |
| LOW | …ster/scripts/svg_to_pptx/native_objects/formula_ast.py | 563 | __all__ = [ | CODE |
| LOW | …s/svg_to_pptx/native_objects/formula_run_properties.py | 230 | __all__ = [ | CODE |
| LOW | …r/scripts/svg_to_pptx/native_objects/inline_formula.py | 306 | __all__ = [ | CODE |
| LOW | …ter/scripts/svg_to_pptx/native_objects/formula_omml.py | 1043 | __all__ = [ | CODE |
| LOW | …t-master/scripts/svg_to_pptx/drawingml/theme_colors.py | 228 | def _set_scheme_color(parent: ET.Element, slot: str, color: str) -> None: | CODE |
| LOW | …ppt-master/scripts/svg_to_pptx/drawingml/hyperlinks.py | 155 | __all__ = [ | CODE |
| LOW | …ppt-master/scripts/svg_to_pptx/pptx_package/builder.py | 573 | def _set_shape_name(elem: ET.Element, name: str) -> None: | CODE |
| LOW | …ppt-master/scripts/svg_to_pptx/pptx_package/builder.py | 2160 | def _set_master_picker_name(master_path: Path, master_name: str) -> None: | CODE |
| LOW | …ppt-master/scripts/svg_to_pptx/pptx_package/builder.py | 2417 | def _set_slide_layout_target(rels_path: Path, target: str) -> None: | CODE |
| LOW | …/ppt-master/scripts/svg_finalize/align_embed_images.py | 326 | def _set_href(image: ET.Element, value: str) -> None: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | skills/ppt-master/scripts/total_md_split.py | 212 | Check the mapping between SVG files and speaker notes Args: svg_files: List of SVG files notes | STRING |
| HIGH | skills/ppt-master/scripts/total_md_split.py | 236 | Split and save notes dictionary into multiple files Args: notes: Notes dictionary (key is heading, val | STRING |
| HIGH | …-master/scripts/svg_to_pptx/pptx_package/dimensions.py | 105 | Extract pixel dimensions from SVG viewBox. Args: svg_path: Path to the SVG file. Returns: (wid | STRING |
| HIGH | …ppt-master/scripts/svg_to_pptx/pptx_package/builder.py | 6390 | Create a PPTX file with native DrawingML shapes. Args: svg_files: List of SVG files. output_path: O | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | skills/ppt-master/scripts/rotate_images.py | 675 | tasks.push({ | CODE |
| HIGH | skills/ppt-master/scripts/rotate_images.py | 682 | const jsonStr = JSON.stringify(tasks, null, 2); | CODE |
| HIGH | skills/ppt-master/scripts/extract_svg_pictures.py | 287 | const root = element && element.ownerSVGElement; | CODE |
| HIGH | skills/ppt-master/scripts/extract_svg_pictures.py | 288 | const rootMatrix = root && root.getScreenCTM(); | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …t-master/scripts/image_backends/backend_siliconflow.py | 0 | resolve the target resolution for a ratio and logical size preset. | STRING |
| HIGH | …ills/ppt-master/scripts/image_backends/backend_qwen.py | 0 | resolve the target resolution for a ratio and logical size preset. | STRING |
| HIGH | …lls/ppt-master/scripts/image_backends/backend_zhipu.py | 0 | resolve the target resolution for a ratio and logical size preset. | STRING |
| HIGH | …pt-master/scripts/image_backends/backend_volcengine.py | 0 | resolve the target resolution for a ratio and logical size preset. | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/technical-design.md | 856 | ChartEx import is deliberately closed to seven validated data models: `treemap`, `sunburst`, `histogram`, `pareto`, `box | CODE |
| LOW | skills/ppt-master/scripts/pptx_to_svg.py | 81 | if fallback_kind != "placeholder": | CODE |
| LOW | skills/ppt-master/scripts/README.md | 383 | Supported parsed column/bar/line/area, pie/doughnut, scatter, and bubble charts without a baked preview receive a determ | CODE |
| LOW | skills/ppt-master/scripts/svg_quality/checker.py | 5326 | if fallback_kind == 'placeholder': | CODE |
| LOW | skills/ppt-master/scripts/svg_quality/checker.py | 7599 | 'placeholder', | CODE |
| LOW | skills/ppt-master/scripts/svg_quality/checker.py | 7610 | 'placeholder', | CODE |
| LOW | skills/ppt-master/scripts/svg_quality/checker.py | 7617 | 'placeholder': {'placeholder'}, | CODE |
| LOW | skills/ppt-master/scripts/svg_quality/checker.py | 7728 | in {'ai', 'web', 'user', 'formula', 'placeholder', 'slice'} | CODE |
| LOW | skills/ppt-master/scripts/svg_quality/checker.py | 7918 | acquire != 'placeholder' | CODE |
| LOW | skills/ppt-master/scripts/pptx_to_svg/slide_to_svg.py | 2187 | replacement_attrs.append('data-pptx-fallback-kind="placeholder"') | CODE |
| LOW | …lls/ppt-master/scripts/confirm_ui/static/catalogs.json | 1424 | "id": "placeholder", | CODE |
| LOW | …ppt-master/scripts/project_management/project_specs.py | 112 | {"ai", "web", "user", "formula", "placeholder", "slice"} | CODE |
| LOW | skills/ppt-master/scripts/docs/conversion.md | 407 | `data-pptx-fallback-kind="placeholder"`. Validation and export report that | CODE |
| LOW | …cripts/svg_to_pptx/native_objects/marker_attributes.py | 186 | f"because {FALLBACK_KIND_ATTR}='placeholder' already implies the " | CODE |
| LOW | …er/scripts/svg_to_pptx/native_objects/marker_status.py | 27 | VISUAL_STATUSES = frozenset({"source-preview", "normalized", "placeholder"}) | CODE |
| LOW⚡ | …er/scripts/svg_to_pptx/native_objects/marker_status.py | 173 | and visual == "placeholder" | CODE |
| LOW⚡ | …er/scripts/svg_to_pptx/native_objects/marker_status.py | 177 | f"{LEGACY_FALLBACK_KIND_ATTR}='placeholder' requires " | CODE |
| LOW⚡ | …er/scripts/svg_to_pptx/native_objects/marker_status.py | 180 | if route == "reconstruction-only" and visual != "placeholder": | CODE |
| LOW⚡ | …er/scripts/svg_to_pptx/native_objects/marker_status.py | 183 | f"{FALLBACK_KIND_ATTR}='placeholder'" | CODE |
| LOW | …lls/ppt-master/scripts/svg_to_pptx/pptx_package/cli.py | 1786 | if native_fallback_kind(elem) != 'placeholder': | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | docs/faq.md | 114 | ## Q: Can I use AI-generated images in my presentation? | COMMENT |
| HIGH | docs/faq.md | 132 | ## Q: Can I turn AI-generated slide mockups or screenshots into editable PowerPoint slides? | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | skills/ppt-master/scripts/finalize_svg.py | 198 | # Step 1: Expand project icons, then standard same-document use references. | COMMENT |
| LOW | skills/ppt-master/scripts/finalize_svg.py | 244 | # Step 2: Align (slice/meet) and Base64-embed all <image> in one pass. | COMMENT |
| LOW | skills/ppt-master/scripts/finalize_svg.py | 292 | # Step 3: Flatten text. | COMMENT |
| LOW | skills/ppt-master/scripts/svg_editor/static/app.js | 1786 | // Step 2: save annotations. Service lifetime is controlled only by Exit preview. | COMMENT |
| LOW⚡ | …ills/ppt-master/scripts/svg_to_pptx/drawingml/paths.py | 593 | # Step 1: Compute (x1', y1') | COMMENT |
| LOW⚡ | …ills/ppt-master/scripts/svg_to_pptx/drawingml/paths.py | 599 | # Step 2: Compute (cx', cy') | COMMENT |
| LOW⚡ | …ills/ppt-master/scripts/svg_to_pptx/drawingml/paths.py | 624 | # Step 3: Compute (cx, cy) | COMMENT |
| LOW⚡ | …ills/ppt-master/scripts/svg_to_pptx/drawingml/paths.py | 628 | # Step 4: Compute theta1 and dtheta | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | skills/ppt-master/scripts/finalize_svg.py | 345 | # Check if svg_output exists | COMMENT |
| LOW | skills/ppt-master/scripts/total_md_split.py | 228 | # Check if a corresponding heading exists in the notes | COMMENT |
| LOW | skills/ppt-master/scripts/batch_validate.py | 142 | # Print result | COMMENT |
| LOW | skills/ppt-master/scripts/project_utils.py | 395 | # Check if directory exists | COMMENT |
| LOW | skills/ppt-master/scripts/project_utils.py | 534 | # Check if it's a valid project directory (contains svg_output or design spec) | COMMENT |
| LOW | skills/ppt-master/scripts/source_to_md/web_to_md.py | 377 | # Check if image is webp and convert to png | COMMENT |
| LOW | skills/ppt-master/scripts/source_to_md/web_to_md.py | 600 | # Check if it has lots of text even without p tags (br tags?) | COMMENT |
| LOW | skills/ppt-master/scripts/source_to_md/pdf_to_md.py | 1432 | # Check if this is table content | COMMENT |
| LOW | skills/ppt-master/scripts/source_to_md/pdf_to_md.py | 1444 | # Check if this is noise text to be filtered (whole block match) | COMMENT |
| LOW | …ls/ppt-master/scripts/svg_finalize/fix_image_aspect.py | 299 | # Check if modification is needed | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | skills/ppt-master/scripts/svg_position_calculator.py | 1014 | # Use more robust element extraction (attribute order independent) | COMMENT |
| MEDIUM | skills/ppt-master/scripts/confirm_ui/server.py | 142 | # parent (waiting) command returns before the calling harness kills it. The | COMMENT |
| LOW | skills/ppt-master/scripts/source_to_md/web_to_md.py | 804 | # Let's just return what we gathered. | COMMENT |
| MEDIUM | skills/ppt-master/scripts/source_to_md/doc_to_md.py | 1215 | # Map both full and basename for robust lookup | COMMENT |
| MEDIUM | skills/ppt-master/scripts/svg_editor/static/app.js | 991 | // element's own getCTM ∘ getScreenCTM⁻¹ is robust to how a browser splits | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | requirements.txt | 1 | # PPT Master Dependencies / PPT Master 依赖 | COMMENT |
| LOW | skills/ppt-master/requirements.txt | 1 | # PPT Master Dependencies / PPT Master 依赖 | COMMENT |
| LOW | skills/ppt-master/requirements.txt | 21 | XlsxWriter>=3.0.0 | COMMENT |
| LOW | skills/ppt-master/requirements.txt | 41 | # ───────────────────────────────────────────────────────────── | COMMENT |
| LOW | skills/ppt-master/requirements.txt | 61 | # (.doc .odt .rtf .tex/.latex .rst .org .typ). | COMMENT |
| LOW | skills/ppt-master/requirements.txt | 81 | # Web to Markdown tool / 网页转 Markdown 工具 (skills/ppt-master/scripts/source_to_md/web_to_md.py) | COMMENT |
| LOW | skills/ppt-master/requirements.txt | 101 | # ───────────────────────────────────────────────────────────── | COMMENT |
| LOW | skills/ppt-master/workflows/stages/generate-audio.md | 201 | COMMENT | |
| LOW | skills/ppt-master/scripts/svg_quality/checker.py | 1101 | COMMENT | |
| LOW | …ls/ppt-master/scripts/image_sources/provider_common.py | 41 | # Project-wide constants | COMMENT |
| LOW | skills/ppt-master/scripts/docs/image.md | 81 | # OpenAI-compatible provider knobs: | COMMENT |
| LOW | skills/ppt-master/scripts/source_to_md/doc_to_md.py | 461 | entry["display_ratio"] = round(pixel_ratio, 6) | COMMENT |
| LOW | …s/ppt-master/scripts/svg_to_pptx/drawingml/elements.py | 1681 | # it can intrinsically understand as a "line" (i.e. preset or | COMMENT |
| LOW | …ls/ppt-master/scripts/svg_to_pptx/drawingml/context.py | 101 | opacity_multiplier: float = 1.0 | COMMENT |
| LOW | …lls/ppt-master/scripts/svg_to_pptx/drawingml/styles.py | 401 | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | skills/ppt-master/scripts/slice_images.py | 469 | CODE | |
| LOW | skills/ppt-master/scripts/extract_svg_assets.py | 1041 | CODE | |
| LOW | skills/ppt-master/scripts/image_search.py | 1545 | CODE | |
| LOW | skills/ppt-master/scripts/pptx_to_svg/slide_to_svg.py | 229 | CODE | |
| LOW | skills/ppt-master/scripts/pptx_to_svg/slide_to_svg.py | 339 | CODE | |
| LOW | skills/ppt-master/scripts/pptx_to_svg/emu_units.py | 130 | CODE | |
| LOW | skills/ppt-master/scripts/pptx_to_svg/txbody_to_svg.py | 120 | CODE | |
| LOW | skills/ppt-master/scripts/pptx_to_svg/txbody_to_svg.py | 243 | CODE | |
| LOW | skills/ppt-master/scripts/pptx_to_svg/txbody_to_svg.py | 591 | CODE | |
| LOW | skills/ppt-master/scripts/pptx_to_svg/txbody_to_svg.py | 636 | CODE | |
| LOW | skills/ppt-master/scripts/pptx_to_svg/txbody_to_svg.py | 776 | CODE | |
| LOW | skills/ppt-master/scripts/pptx_to_svg/tbl_to_svg.py | 279 | CODE | |
| LOW | …master/scripts/svg_to_pptx/native_objects/chart_xml.py | 424 | CODE | |
| LOW | …/ppt-master/scripts/svg_to_pptx/drawingml/converter.py | 1812 | CODE | |
| LOW | …ls/ppt-master/scripts/svg_to_pptx/drawingml/context.py | 190 | CODE | |
| LOW | …ppt-master/scripts/svg_to_pptx/pptx_package/builder.py | 6330 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | docs/faq.md | 372 | ## Q: Will long decks blow out the context window in one shot? | COMMENT |
| MEDIUM | skills/ppt-master/references/animations.md | 79 | # Build a neutral editable scaffold from the post-regroup anchors when useful | COMMENT |
| MEDIUM | skills/ppt-master/templates/spec_lock_reference.md | 9 | **Mandatory — new-project write**: The first non-empty line is exactly `<!-- ppt-master-schema: spec-lock/v1 -->`, follo | CODE |
| MEDIUM | skills/ppt-master/templates/design_spec_reference.md | 13 | **Mandatory — new-project write**: The first non-empty line is exactly `<!-- ppt-master-schema: design-spec/v1 -->`, fol | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | skills/ppt-master/scripts/generate_examples_index.py | 177 | content.append("### Create a New Project\n") | CODE |
| MEDIUM | …ppt-master/scripts/svg_to_pptx/pptx_package/builder.py | 6828 | # Create the standard base PPTX with python-pptx. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | skills/ppt-master/scripts/docs/image.md | 142 | MINIMAX_API_KEY=your-api-key | CODE |