OpenTalking: An industrial-grade open-source AI digital human framework that supports real-time conversation, private deployment, and pluggable models.
This report summarizes scanner evidence for datascale-ai/opentalking, a Python project with 3,131 GitHub stars. SynthScan examined 408,719 lines of code across 884 source files, recording 2492 pattern matches distributed across 15 syntactic categories. The legacy adjusted pattern signal is 7.2 (Moderate pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 1474 finding(s).
Are imports declared and package/API names verified? 455 finding(s).
Are wrappers, guards, and repeated structures necessary? 1891 finding(s).
Which changes need focused human review? 2492 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 2492 distinct pattern matches across 15 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | opentalking/export_store.py | 59 | def _metadata_path_for_export(root: Path | str, export_id: str) -> Path | None: | CODE |
| LOW | opentalking/export_store.py | 152 | def create_video_export_from_file( | CODE |
| LOW | opentalking/video_creation_jobs.py | 102 | def _subscriber_put_timeout_sec(self) -> float: | CODE |
| LOW | opentalking/scene_assets.py | 98 | def _seed_default_backgrounds(self) -> None: | CODE |
| LOW | opentalking/video_creation.py | 127 | def _export_with_download_url(item: dict[str, Any]) -> dict[str, Any]: | CODE |
| LOW | opentalking/video_creation.py | 136 | def _reference_duration_options(settings: object) -> set[int]: | CODE |
| LOW | opentalking/video_creation.py | 149 | def _validate_reference_duration(settings: object, duration_sec: int | None) -> int: | CODE |
| LOW | opentalking/video_creation.py | 158 | def _coerce_composition_float( | CODE |
| LOW | opentalking/video_creation.py | 203 | def _normalize_video_composition_config( | CODE |
| LOW | opentalking/video_creation.py | 253 | def _composition_background_color(value: object) -> tuple[int, int, int]: | CODE |
| LOW | opentalking/video_creation.py | 604 | def _build_reference_driver_pcm(total_samples: int, *, level: float = 480.0) -> np.ndarray: | CODE |
| LOW | opentalking/video_creation.py | 616 | def _reference_driver_audio_path(settings: object) -> Path: | CODE |
| LOW | opentalking/video_creation.py | 621 | def _fit_reference_driver_pcm(pcm: np.ndarray, total_samples: int) -> np.ndarray: | CODE |
| LOW | opentalking/video_creation.py | 643 | async def _load_reference_driver_pcm(settings: object, total_samples: int) -> np.ndarray | None: | CODE |
| LOW | opentalking/video_creation.py | 746 | def _fasterliveportrait_video_config( | CODE |
| LOW | opentalking/video_creation.py | 760 | def _fasterliveportrait_preroll_samples(settings: object, model: str, sample_rate: int) -> int: | CODE |
| LOW | opentalking/video_creation.py | 812 | def _resolve_avatar_relative_path(avatar_path: Path, raw: object) -> Path | None: | CODE |
| LOW | opentalking/video_creation.py | 825 | def _avatar_manifest_metadata(avatar_path: Path) -> dict[str, Any]: | CODE |
| LOW | opentalking/video_creation.py | 830 | def _quicktalk_manifest_section(avatar_path: Path) -> dict[str, Any]: | CODE |
| LOW | opentalking/video_creation.py | 898 | def _quicktalk_cache_video_size(settings: object, avatar_path: Path) -> tuple[int, int] | None: | CODE |
| LOW | opentalking/video_creation.py | 939 | def _quicktalk_declared_video_source(avatar_path: Path) -> Path | None: | CODE |
| LOW | opentalking/video_creation.py | 950 | def _quicktalk_prepared_template_video(settings: object, avatar_path: Path) -> Path | None: | CODE |
| LOW | opentalking/video_creation.py | 982 | def _quicktalk_template_video(settings: object, avatar_path: Path) -> Path | None: | CODE |
| LOW | opentalking/video_creation.py | 989 | def _quicktalk_template_frame_dir(avatar_path: Path) -> Path | None: | CODE |
| LOW | opentalking/video_creation.py | 1027 | def _quicktalk_init_session_kwargs(settings: object, avatar_path: Path) -> dict[str, object]: | CODE |
| LOW | opentalking/video_creation.py | 1208 | def _quicktalk_multiface_worker_class(): | CODE |
| LOW | opentalking/video_creation.py | 1246 | async def _probe_audio_duration_sec(settings: object, path: Path) -> float | None: | CODE |
| LOW⚡ | opentalking/pipeline/speak/synthesis_runner.py | 724 | def _avatar_manifest_metadata(self) -> dict[str, Any]: | CODE |
| LOW⚡ | opentalking/pipeline/speak/synthesis_runner.py | 736 | def _quicktalk_manifest_metadata(self) -> dict[str, Any]: | CODE |
| LOW⚡ | opentalking/pipeline/speak/synthesis_runner.py | 741 | def _resolve_avatar_relative_path(self, raw: str) -> Path | None: | CODE |
| LOW⚡ | opentalking/pipeline/speak/synthesis_runner.py | 1191 | async def _prepare_idle_cache_background(self, ref_image_path: Path) -> None: | CODE |
| LOW⚡ | opentalking/pipeline/speak/synthesis_runner.py | 1433 | def _build_fasterliveportrait_idle_frames(self, reference_frame: np.ndarray) -> list[np.ndarray]: | CODE |
| LOW⚡ | opentalking/pipeline/speak/synthesis_runner.py | 1647 | def _legacy_bool_setting_declared(*names: str) -> bool: | CODE |
| LOW⚡ | opentalking/pipeline/speak/synthesis_runner.py | 1658 | def _tts_opener_enabled_for_model(self) -> bool: | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 141 | def _agent_memory_enabled_for_runtime( | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 250 | async def _synthesize_tts_opener_pcm( | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 555 | def _fasterliveportrait_video_config( | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 628 | async def update_fasterliveportrait_runtime_config( | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 646 | def _fasterliveportrait_ref_image_payload( | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 689 | def _quicktalk_cache_video_size(self) -> tuple[int, int] | None: | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 753 | def _quicktalk_manifest_section(self) -> dict[str, Any]: | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 810 | def _quicktalk_template_video(self) -> Path | None: | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 829 | def _quicktalk_template_frame_dir(self) -> Path | None: | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 994 | async def _on_connection_state_change() -> None: | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 1109 | async def _await_dynamic_idle_prepare_done(self) -> None: | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 1123 | async def _prepare_dynamic_idle_cache(self, ref_image_path: Path) -> None: | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 1390 | def _open_quicktalk_reference_idle_video(self) -> _LoopingIdleVideo | None: | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 1405 | def _load_quicktalk_reference_idle_frames(self) -> list[np.ndarray] | None: | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 1465 | def _load_idle_frames_from_disk(self, cache_path: Path, cache_key: str) -> list[np.ndarray]: | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 1489 | def _save_idle_frames_to_disk( | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 1669 | def _tts_opener_preload_enabled_for_model(self) -> bool: | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 1680 | def _tts_opener_preload_voice(self) -> str | None: | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 1771 | async def _queue_initial_video_frame(self) -> None: | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 1795 | async def _queue_fasterliveportrait_rest_frame(self) -> None: | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 1819 | def _ensure_media_clock_started(self) -> None: | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 1860 | def _playback_backpressure_config(self) -> tuple[int, int, float]: | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 1874 | async def _wait_for_playback_capacity( | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 1925 | def create_speak_uploaded_pcm_task( | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 1938 | async def _run_speak_uploaded_pcm_task( | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 3065 | async def _generate_flashtalk_frames( | CODE |
| 1249 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | opentalking/video_creation_jobs.py | 190 | except asyncio.CancelledError: | CODE |
| HIGH | opentalking/video_creation.py | 261 | except ValueError: | CODE |
| HIGH | opentalking/video_creation.py | 1676 | except Exception: | CODE |
| HIGH | opentalking/video_creation.py | 2005 | except Exception: | CODE |
| HIGH | opentalking/video_creation.py | 1860 | except Exception: | CODE |
| HIGH | opentalking/pipeline/speak/synthesis_runner.py | 1120 | except Exception: | CODE |
| HIGH | opentalking/pipeline/speak/synthesis_runner.py | 1964 | except OSError: | CODE |
| HIGH | opentalking/pipeline/speak/synthesis_runner.py | 3322 | except asyncio.TimeoutError: | CODE |
| HIGH | opentalking/pipeline/speak/synthesis_runner.py | 3373 | except asyncio.CancelledError: | CODE |
| HIGH | opentalking/pipeline/speak/synthesis_runner.py | 3379 | except asyncio.CancelledError: | CODE |
| HIGH | opentalking/pipeline/speak/synthesis_runner.py | 3014 | except asyncio.QueueEmpty: | CODE |
| HIGH | opentalking/pipeline/speak/synthesis_runner.py | 3018 | except asyncio.QueueFull: | CODE |
| HIGH | opentalking/pipeline/speak/synthesis_runner.py | 3053 | except asyncio.QueueEmpty: | CODE |
| HIGH | opentalking/pipeline/speak/synthesis_runner.py | 3057 | except asyncio.QueueFull: | CODE |
| HIGH | opentalking/pipeline/speak/render_pipeline.py | 43 | except Exception: # noqa: BLE001 | CODE |
| HIGH | opentalking/pipeline/session/runner.py | 2224 | except asyncio.CancelledError: | CODE |
| HIGH | opentalking/pipeline/session/runner.py | 1095 | except asyncio.QueueEmpty: | CODE |
| HIGH | opentalking/pipeline/session/runner.py | 1031 | except Exception: # noqa: BLE001 | CODE |
| HIGH | opentalking/core/in_memory_redis.py | 186 | except asyncio.QueueFull: | CODE |
| HIGH | …entalking/providers/synthesis/video_clone/ws_client.py | 124 | except Exception: | CODE |
| HIGH | opentalking/providers/synthesis/flashtalk/ws_client.py | 362 | except Exception: | CODE |
| HIGH | opentalking/providers/synthesis/flashtalk/ws_client.py | 366 | except Exception: | CODE |
| HIGH | opentalking/providers/synthesis/flashhead/ws_client.py | 223 | except Exception: | CODE |
| HIGH | opentalking/providers/synthesis/flashhead/ws_client.py | 227 | except Exception: | CODE |
| HIGH | opentalking/providers/rtc/aiortc/adapter.py | 472 | except asyncio.QueueFull: | CODE |
| HIGH | opentalking/providers/rtc/aiortc/adapter.py | 483 | except asyncio.QueueFull: | CODE |
| HIGH | opentalking/providers/tts/voice_assets.py | 54 | except Exception: | CODE |
| HIGH | opentalking/providers/tts/factory.py | 37 | except Exception: | CODE |
| HIGH | opentalking/providers/tts/dashscope_qwen/adapter.py | 60 | except Exception: | CODE |
| HIGH | opentalking/providers/tts/dashscope_qwen/adapter.py | 107 | except Exception: # noqa: BLE001 | CODE |
| HIGH | opentalking/providers/tts/dashscope_qwen/adapter.py | 111 | except Exception: # noqa: BLE001 | CODE |
| HIGH | opentalking/providers/tts/dashscope_qwen/adapter.py | 184 | except Exception: | CODE |
| HIGH | opentalking/providers/tts/dashscope_qwen/adapter.py | 407 | except Exception: # noqa: BLE001 | CODE |
| HIGH | opentalking/providers/tts/dashscope_qwen/clone.py | 27 | except Exception: | CODE |
| HIGH | opentalking/providers/tts/local_qwen3_tts/adapter.py | 19 | except Exception: | CODE |
| HIGH | opentalking/providers/tts/cosyvoice_ws/adapter.py | 59 | except Exception: | CODE |
| HIGH | opentalking/providers/tts/cosyvoice_ws/adapter.py | 43 | except Exception: | CODE |
| HIGH | opentalking/providers/tts/local_f5_tts/adapter.py | 31 | except Exception: | CODE |
| HIGH | opentalking/providers/tts/local_f5_tts/adapter.py | 41 | except Exception: | CODE |
| HIGH | opentalking/providers/tts/edge/adapter.py | 103 | except (BrokenPipeError, ConnectionResetError): | CODE |
| HIGH | opentalking/providers/tts/local_cosyvoice/adapter.py | 32 | except Exception: | CODE |
| HIGH | opentalking/providers/tts/local_cosyvoice/adapter.py | 545 | except Exception: | CODE |
| HIGH | opentalking/providers/tts/local_indextts/adapter.py | 57 | except Exception: | CODE |
| HIGH | opentalking/providers/tts/dashscope_sambert/adapter.py | 59 | except Exception: | CODE |
| HIGH | opentalking/providers/tts/dashscope_sambert/adapter.py | 43 | except Exception: | CODE |
| HIGH | opentalking/providers/stt/factory.py | 48 | except Exception: | CODE |
| HIGH | opentalking/providers/stt/factory.py | 380 | except OSError: | CODE |
| HIGH | opentalking/providers/stt/factory.py | 422 | except OSError: | CODE |
| HIGH | opentalking/providers/stt/openai_compatible/adapter.py | 123 | except OSError: | CODE |
| HIGH | opentalking/providers/stt/dashscope/adapter.py | 345 | except OSError: | CODE |
| HIGH | opentalking/runtime/server.py | 51 | except asyncio.CancelledError: | CODE |
| HIGH | opentalking/agent/knowledge_store.py | 1025 | except FileNotFoundError: | CODE |
| HIGH | opentalking/agent/knowledge_index.py | 140 | except Exception: | CODE |
| HIGH | opentalking/agent/knowledge_index.py | 406 | except Exception: | CODE |
| HIGH | opentalking/agent/knowledge_index.py | 424 | except Exception: | CODE |
| HIGH | opentalking/models/quicktalk/adapter.py | 102 | except Exception: | CODE |
| HIGH | opentalking/models/quicktalk/runtime.py | 643 | except BrokenPipeError: | CODE |
| HIGH | opentalking/models/quicktalk/runtime.py | 1178 | except BrokenPipeError: | CODE |
| HIGH | opentalking/models/quicktalk/runtime_v2.py | 884 | except Exception: | CODE |
| HIGH | opentalking/models/wav2lip/loader.py | 77 | except Exception: | CODE |
| 52 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | conftest.py | 1 | CODE | |
| LOW | opentalking/__init__.py | 3 | CODE | |
| LOW | opentalking/export_store.py | 1 | CODE | |
| LOW | opentalking/video_creation_jobs.py | 1 | CODE | |
| LOW | opentalking/scene_assets.py | 1 | CODE | |
| LOW | opentalking/video_creation.py | 1 | CODE | |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 6 | CODE | |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 13 | CODE | |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 151 | CODE | |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 151 | CODE | |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 172 | CODE | |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 220 | CODE | |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 220 | CODE | |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 220 | CODE | |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 220 | CODE | |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 231 | CODE | |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 231 | CODE | |
| LOW | opentalking/pipeline/speak/env_helpers.py | 5 | CODE | |
| LOW | opentalking/pipeline/speak/audio2video_runner.py | 1 | CODE | |
| LOW | opentalking/pipeline/speak/audio_pipeline.py | 1 | CODE | |
| LOW | opentalking/pipeline/speak/idle_frames.py | 6 | CODE | |
| LOW | opentalking/pipeline/speak/tts_openers.py | 8 | CODE | |
| LOW | opentalking/pipeline/speak/audio_utils.py | 5 | CODE | |
| LOW | opentalking/pipeline/speak/render_pipeline.py | 1 | CODE | |
| LOW | opentalking/pipeline/speak/text_sanitize.py | 1 | CODE | |
| LOW | opentalking/pipeline/recording/recording.py | 1 | CODE | |
| LOW | opentalking/pipeline/recording/offline_export.py | 3 | CODE | |
| LOW | opentalking/pipeline/session/runner.py | 1 | CODE | |
| LOW | opentalking/core/config.py | 1 | CODE | |
| LOW | opentalking/core/model_config.py | 1 | CODE | |
| LOW | opentalking/core/in_memory_redis.py | 7 | CODE | |
| LOW | opentalking/core/registry.py | 11 | CODE | |
| LOW | opentalking/core/__init__.py | 3 | CODE | |
| LOW | opentalking/core/__init__.py | 3 | CODE | |
| LOW | opentalking/core/__init__.py | 4 | CODE | |
| LOW | opentalking/core/__init__.py | 5 | CODE | |
| LOW | opentalking/core/__init__.py | 6 | CODE | |
| LOW | opentalking/core/__init__.py | 7 | CODE | |
| LOW | opentalking/core/__init__.py | 7 | CODE | |
| LOW | opentalking/core/__init__.py | 8 | CODE | |
| LOW | opentalking/core/__init__.py | 9 | CODE | |
| LOW | opentalking/core/__init__.py | 9 | CODE | |
| LOW | opentalking/core/__init__.py | 9 | CODE | |
| LOW | opentalking/core/__init__.py | 9 | CODE | |
| LOW | opentalking/core/__init__.py | 9 | CODE | |
| LOW | opentalking/core/__init__.py | 16 | CODE | |
| LOW | opentalking/core/__init__.py | 16 | CODE | |
| LOW | opentalking/core/bus.py | 1 | CODE | |
| LOW | opentalking/core/model_paths.py | 1 | CODE | |
| LOW | opentalking/core/queue_status.py | 1 | CODE | |
| LOW | opentalking/core/session_store.py | 1 | CODE | |
| LOW | opentalking/core/types/events.py | 1 | CODE | |
| LOW | opentalking/core/types/__init__.py | 3 | CODE | |
| LOW | opentalking/core/types/__init__.py | 3 | CODE | |
| LOW | opentalking/core/types/__init__.py | 3 | CODE | |
| LOW | opentalking/core/types/__init__.py | 3 | CODE | |
| LOW | opentalking/core/types/__init__.py | 3 | CODE | |
| LOW | opentalking/core/types/__init__.py | 10 | CODE | |
| LOW | opentalking/core/types/__init__.py | 10 | CODE | |
| LOW | opentalking/core/types/frames.py | 1 | CODE | |
| 379 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | opentalking/export_store.py | 203 | except Exception: | CODE |
| LOW | opentalking/video_creation_jobs.py | 161 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | opentalking/video_creation.py | 653 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | opentalking/video_creation.py | 1673 | except Exception: | CODE |
| LOW | opentalking/video_creation.py | 1676 | except Exception: | CODE |
| LOW | opentalking/video_creation.py | 1702 | except Exception: | CODE |
| LOW | opentalking/video_creation.py | 1857 | except Exception: | CODE |
| LOW | opentalking/video_creation.py | 1860 | except Exception: | CODE |
| LOW | opentalking/video_creation.py | 1887 | except Exception: | CODE |
| LOW | opentalking/video_creation.py | 2002 | except Exception: | CODE |
| LOW | opentalking/video_creation.py | 2005 | except Exception: | CODE |
| LOW | opentalking/video_creation.py | 2031 | except Exception: | CODE |
| LOW⚡ | opentalking/pipeline/speak/synthesis_runner.py | 730 | except Exception: | CODE |
| LOW⚡ | opentalking/pipeline/speak/synthesis_runner.py | 1186 | except Exception: | CODE |
| LOW⚡ | opentalking/pipeline/speak/synthesis_runner.py | 1195 | except Exception: | CODE |
| LOW⚡ | opentalking/pipeline/speak/synthesis_runner.py | 1429 | except Exception: | CODE |
| LOW⚡ | opentalking/pipeline/speak/synthesis_runner.py | 1654 | except Exception: | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 295 | except Exception: | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 433 | except Exception: | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 455 | except Exception: | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 466 | except Exception: | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 484 | except Exception: | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 537 | except Exception: | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 565 | except Exception: | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 620 | except Exception: | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 671 | except Exception: | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 925 | except Exception: | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 1031 | except Exception: | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 1120 | except Exception: | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 1219 | except Exception: | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 1385 | except Exception: | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 1401 | except Exception: | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 1474 | except Exception: | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 1501 | except Exception: | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 1719 | except Exception: | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 1950 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 1974 | except Exception: # noqa: BLE001 | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 1999 | except Exception: # noqa: BLE001 | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 2417 | except Exception: | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 2472 | except Exception: | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 2478 | except Exception: | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 2601 | except Exception as e: | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 2942 | except Exception as e: | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 3200 | except Exception: | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 3272 | except Exception: | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 3286 | except Exception: | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 3332 | except Exception: | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 3347 | except Exception: | CODE |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 3385 | except Exception: | CODE |
| LOW | opentalking/pipeline/speak/idle_frames.py | 140 | except Exception: | CODE |
| LOW | opentalking/pipeline/speak/render_pipeline.py | 43 | except Exception: # noqa: BLE001 | CODE |
| LOW | opentalking/pipeline/recording/recording.py | 116 | except Exception: | CODE |
| LOW | opentalking/pipeline/session/runner.py | 369 | except Exception: | CODE |
| LOW | opentalking/pipeline/session/runner.py | 391 | except Exception: | CODE |
| LOW | opentalking/pipeline/session/runner.py | 512 | except Exception: # noqa: BLE001 | CODE |
| LOW | opentalking/pipeline/session/runner.py | 629 | except Exception: # noqa: BLE001 | CODE |
| LOW | opentalking/pipeline/session/runner.py | 645 | except Exception: # noqa: BLE001 | CODE |
| LOW | opentalking/pipeline/session/runner.py | 698 | except Exception: # noqa: BLE001 | CODE |
| LOW | opentalking/pipeline/session/runner.py | 745 | except Exception: # noqa: BLE001 | CODE |
| LOW | opentalking/pipeline/session/runner.py | 1031 | except Exception: # noqa: BLE001 | CODE |
| 328 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH⚡ | tests/unit/test_local_audio_frontend.py | 710 | assert workspace.count("setActiveIndexTTSPresetLabel(null)") >= 5 | CODE |
| HIGH | tests/unit/test_local_audio_frontend.py | 160 | assert "setOutputUrl(null)" in return_block | CODE |
| HIGH⚡ | tests/frontend/test_immersive_conversation_mode.py | 36 | assert "avatarMaskUrl?: string | null;" in source | CODE |
| HIGH⚡ | tests/frontend/test_immersive_conversation_mode.py | 149 | assert "avatarAdjust={immersiveActive ? immersiveAvatarAdjust : undefined}" in source | CODE |
| HIGH⚡ | tests/frontend/test_default_model_selection.py | 11 | default_idx = source.index("if (defaultModel && available.has(defaultModel)") | CODE |
| HIGH | tests/frontend/test_light2d_mock_ui.py | 23 | assert 'clientRenderer={!showStart && model === "mock"' in app | CODE |
| HIGH | tests/frontend/test_light2d_mock_ui.py | 87 | assert "setVideoBackgroundId(null)" in video_creation | CODE |
| HIGH | tests/frontend/test_video_creation_duo_dialog.py | 21 | assert "duo_dialog: DuoDialogCapability | null;" in source | CODE |
| HIGH | tests/frontend/test_video_creation_reference_video.py | 30 | assert "if (!videoBackgroundId) return null;" not in source | CODE |
| HIGH⚡ | scripts/benchmark_opentalking_e2e.py | 835 | pid="$(cat "$pid_file" 2>/dev/null)" | CODE |
| HIGH⚡ | scripts/benchmark_opentalking_e2e.py | 837 | kill "$pid" >/dev/null 2>&1 || true | CODE |
| HIGH⚡ | scripts/benchmark_opentalking_e2e.py | 839 | kill -0 "$pid" >/dev/null 2>&1 || break | CODE |
| HIGH⚡ | scripts/benchmark_opentalking_e2e.py | 842 | kill -0 "$pid" >/dev/null 2>&1 && kill -9 "$pid" >/dev/null 2>&1 || true | CODE |
| HIGH⚡ | scripts/benchmark_opentalking_e2e.py | 842 | kill -0 "$pid" >/dev/null 2>&1 && kill -9 "$pid" >/dev/null 2>&1 || true | CODE |
| HIGH⚡ | scripts/benchmark_opentalking_e2e.py | 852 | kill "$pid" >/dev/null 2>&1 || true | CODE |
| HIGH⚡ | scripts/benchmark_opentalking_e2e.py | 857 | kill "$pid" >/dev/null 2>&1 || true | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | opentalking/video_creation.py | 950 | CODE | |
| LOW | opentalking/video_creation.py | 1392 | CODE | |
| LOW | opentalking/video_creation.py | 1498 | CODE | |
| LOW | opentalking/video_creation.py | 1786 | CODE | |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 555 | CODE | |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 904 | CODE | |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 2021 | CODE | |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 2113 | CODE | |
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 2375 | CODE | |
| LOW | opentalking/pipeline/session/runner.py | 933 | CODE | |
| LOW | opentalking/pipeline/session/runner.py | 1003 | CODE | |
| LOW | opentalking/pipeline/session/runner.py | 1171 | CODE | |
| LOW | opentalking/pipeline/session/runner.py | 1502 | CODE | |
| LOW | opentalking/pipeline/session/runner.py | 1787 | CODE | |
| LOW | opentalking/core/config.py | 16 | CODE | |
| LOW | opentalking/core/model_config.py | 277 | CODE | |
| LOW | opentalking/providers/memory/bm25.py | 36 | CODE | |
| LOW | opentalking/providers/memory/runtime.py | 466 | CODE | |
| LOW | opentalking/providers/synthesis/availability.py | 126 | CODE | |
| LOW | …entalking/providers/synthesis/flashhead/http_client.py | 274 | CODE | |
| LOW | opentalking/providers/rtc/aiortc/adapter.py | 57 | CODE | |
| LOW | opentalking/providers/tts/indextts_config.py | 68 | CODE | |
| LOW | opentalking/providers/tts/voice_assets.py | 137 | CODE | |
| LOW | opentalking/providers/tts/dashscope_qwen/adapter.py | 362 | CODE | |
| LOW | opentalking/providers/tts/edge/adapter.py | 139 | CODE | |
| LOW | opentalking/providers/tts/elevenlabs/adapter.py | 93 | CODE | |
| LOW | opentalking/providers/tts/local_cosyvoice/adapter.py | 489 | CODE | |
| LOW | opentalking/providers/tts/local_cosyvoice/adapter.py | 523 | CODE | |
| LOW | opentalking/providers/stt/dashscope/adapter.py | 41 | CODE | |
| LOW | opentalking/runtime/server.py | 62 | CODE | |
| LOW | opentalking/runtime/server.py | 156 | CODE | |
| LOW | opentalking/runtime/task_consumer.py | 249 | CODE | |
| LOW | opentalking/runtime/task_consumer.py | 412 | CODE | |
| LOW | opentalking/runtime/task_consumer.py | 559 | CODE | |
| LOW | opentalking/runtime/task_consumer.py | 1103 | CODE | |
| LOW | opentalking/runtime/task_consumer.py | 453 | CODE | |
| LOW | opentalking/runtime/task_consumer.py | 706 | CODE | |
| LOW | opentalking/agent/knowledge_store.py | 169 | CODE | |
| LOW | opentalking/agent/knowledge_store.py | 438 | CODE | |
| LOW | opentalking/agent/knowledge_store.py | 498 | CODE | |
| LOW | opentalking/agent/knowledge_store.py | 1599 | CODE | |
| LOW | opentalking/agent/knowledge_index.py | 412 | CODE | |
| LOW | opentalking/agent/knowledge_index.py | 502 | CODE | |
| LOW | opentalking/models/quicktalk/adapter.py | 204 | CODE | |
| LOW | opentalking/models/quicktalk/adapter.py | 520 | CODE | |
| LOW | opentalking/models/wav2lip/loader.py | 69 | CODE | |
| LOW | opentalking/models/wav2lip/feature_extractor.py | 72 | CODE | |
| LOW | opentalking/streaming/rtmps_jobs.py | 39 | CODE | |
| LOW | opentalking/streaming/chunks.py | 205 | CODE | |
| LOW | opentalking/streaming/outputs.py | 450 | CODE | |
| LOW | opentalking/streaming/outputs.py | 805 | CODE | |
| LOW | opentalking/streaming/destinations/rtmps.py | 218 | CODE | |
| LOW | opentalking/streaming/destinations/rtmps.py | 356 | CODE | |
| LOW | opentalking/streaming/destinations/rtmps_chunked.py | 205 | CODE | |
| LOW | opentalking/streaming/destinations/rtmps_chunked.py | 521 | CODE | |
| LOW | opentalking/avatar/validator.py | 8 | CODE | |
| LOW | opentalking/avatar/wav2lip_preload.py | 125 | CODE | |
| LOW | opentalking/avatar/duo_dialog.py | 67 | CODE | |
| LOW | scripts/local_cosyvoice_service.py | 986 | CODE | |
| LOW | scripts/local_cosyvoice_service.py | 1077 | CODE | |
| 35 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | opentalking/__init__.py | 5 | __all__ = ["__version__"] | CODE |
| LOW⚡ | opentalking/pipeline/speak/synthesis_runner.py | 1436 | def _set_idle_frames(self, frames: list[np.ndarray], *, playback_mode: str | None = None) -> None: | CODE |
| LOW | opentalking/core/__init__.py | 18 | __all__ = [ | CODE |
| LOW | opentalking/core/types/__init__.py | 12 | __all__ = [ | CODE |
| LOW | opentalking/core/interfaces/__init__.py | 11 | __all__ = [ | CODE |
| LOW | opentalking/providers/llm/__init__.py | 5 | __all__ = ["ConversationHistory", "OpenAICompatibleLLMClient", "SentenceSplitter"] | CODE |
| LOW | opentalking/providers/llm/openai_compatible/__init__.py | 8 | __all__ = ["OpenAICompatibleLLMClient"] | CODE |
| LOW | opentalking/providers/memory/__init__.py | 6 | __all__ = ["MemoryItem", "MemoryLibrary", "build_memory_provider"] | CODE |
| LOW | opentalking/providers/synthesis/audio2video_client.py | 21 | logger = logging.getLogger(__name__) | CODE |
| LOW | opentalking/providers/synthesis/__init__.py | 55 | __all__ = [ | CODE |
| LOW | opentalking/providers/synthesis/mock.py | 22 | logger = logging.getLogger(__name__) | CODE |
| LOW | opentalking/providers/synthesis/video_clone/__init__.py | 5 | __all__ = ["MAGIC_FRAME", "MAGIC_VIDEO", "VideoCloneWSClient"] | CODE |
| LOW | opentalking/providers/synthesis/flashtalk/__init__.py | 5 | __all__ = ["FlashTalkWSClient"] | CODE |
| LOW | opentalking/providers/synthesis/flashhead/__init__.py | 6 | __all__ = ["FlashHeadHTTPClient", "FlashHeadWSClient"] | CODE |
| LOW | opentalking/providers/rtc/__init__.py | 3 | __all__ = ["WebRTCSession"] | CODE |
| LOW | opentalking/providers/tts/__init__.py | 14 | __all__ = ["build_tts_adapter", "create_tts_adapter", "EdgeTTSAdapter"] | CODE |
| LOW | opentalking/providers/tts/dashscope_qwen/__init__.py | 8 | __all__ = ["DashScopeQwenTTSAdapter"] | CODE |
| LOW | opentalking/providers/tts/omnirt_indextts/__init__.py | 3 | __all__ = ["OmniRTIndexTTSAdapter"] | CODE |
| LOW | opentalking/providers/tts/local_qwen3_tts/__init__.py | 5 | __all__ = ["LocalQwen3TTSAdapter"] | CODE |
| LOW | opentalking/providers/tts/cosyvoice_ws/__init__.py | 8 | __all__ = ["DashScopeCosyVoiceWsAdapter"] | CODE |
| LOW | opentalking/providers/tts/mock/__init__.py | 6 | __all__ = ["MockTTSAdapter"] | CODE |
| LOW | opentalking/providers/tts/local_f5_tts/__init__.py | 5 | __all__ = ["LocalF5TTSAdapter"] | CODE |
| LOW | opentalking/providers/tts/edge/__init__.py | 8 | __all__ = ["EdgeTTSAdapter"] | CODE |
| LOW | opentalking/providers/tts/elevenlabs/__init__.py | 8 | __all__ = ["ElevenLabsTTSAdapter", "list_elevenlabs_voices"] | CODE |
| LOW | opentalking/providers/tts/local_cosyvoice/__init__.py | 5 | __all__ = ["LocalCosyVoiceTTSAdapter"] | CODE |
| LOW | opentalking/providers/tts/openai_compatible/__init__.py | 5 | __all__ = ["OpenAICompatibleTTSAdapter"] | CODE |
| LOW | opentalking/providers/tts/local_indextts/__init__.py | 5 | __all__ = ["LocalIndexTTSAdapter"] | CODE |
| LOW | opentalking/providers/tts/dashscope_sambert/__init__.py | 8 | __all__ = ["DashScopeSambertTTSAdapter"] | CODE |
| LOW | opentalking/providers/stt/__init__.py | 5 | __all__ = ["transcribe_audio_file_path"] | CODE |
| LOW | opentalking/providers/stt/openai_compatible/__init__.py | 5 | __all__ = ["OpenAICompatibleSTTAdapter"] | CODE |
| LOW | opentalking/runtime/timing.py | 29 | def set_value(self, name: str, value: int | float) -> None: | CODE |
| LOW | opentalking/runtime/task_consumer.py | 212 | def _update_runner_agent_knowledge_bases(runner: Any, knowledge_base_ids: list[str]) -> None: | CODE |
| LOW | opentalking/agent/knowledge_store.py | 22 | logger = logging.getLogger(__name__) | CODE |
| LOW | opentalking/agent/knowledge_index.py | 22 | logger = logging.getLogger(__name__) | CODE |
| LOW | opentalking/agent/__init__.py | 7 | __all__ = [ | CODE |
| LOW | opentalking/models/__init__.py | 13 | __all__ = [ | CODE |
| LOW | opentalking/models/musetalk/face_utils.py | 11 | logger = logging.getLogger(__name__) | CODE |
| LOW | opentalking/models/musetalk/adapter.py | 39 | logger = logging.getLogger(__name__) | CODE |
| LOW | opentalking/models/musetalk/loader.py | 8 | logger = logging.getLogger(__name__) | CODE |
| LOW | opentalking/models/musetalk/feature_extractor.py | 12 | logger = logging.getLogger(__name__) | CODE |
| LOW | opentalking/models/musetalk/inference.py | 9 | logger = logging.getLogger(__name__) | CODE |
| LOW | opentalking/models/quicktalk/__init__.py | 5 | __all__ = ["QuickTalkAdapter"] | CODE |
| LOW | opentalking/models/wav2lip/adapter.py | 439 | def set_wav2lip_postprocess_mode(self, mode: str | None) -> None: | CODE |
| LOW | opentalking/streaming/__init__.py | 13 | __all__ = [ | CODE |
| LOW | opentalking/streaming/destinations/__init__.py | 6 | __all__ = ["RTMPSPublisher", "RTMPSSettings", "WHIPPublisher", "WHIPSettings"] | CODE |
| LOW | opentalking/voice/__init__.py | 5 | __all__ = ["VoiceEntry", "get_sqlite_path", "init_voice_store", "list_voices"] | CODE |
| LOW | opentalking/avatar/__init__.py | 5 | __all__ = [ | CODE |
| LOW | opentalking/avatar/matting/__init__.py | 33 | __all__ = [ | CODE |
| LOW | opentalking/persona/__init__.py | 18 | __all__ = [ | CODE |
| LOW | opentalking/events/__init__.py | 4 | __all__ = ["EventEmitter", "event_sse_payload"] | CODE |
| LOW | tests/unit/test_audio2video_client.py | 275 | def set_wav2lip_postprocess_mode(self, mode: str | None) -> None: | CODE |
| LOW | tests/unit/test_task_consumer.py | 686 | def set_wav2lip_postprocess_mode(self, mode: str | None) -> None: | CODE |
| LOW | apps/api/core/config.py | 3 | __all__ = ["Settings", "get_settings"] | CODE |
| LOW | apps/api/routes/sessions.py | 270 | def _update_runner_agent_knowledge_bases(runner: object, knowledge_base_ids: list[str]) -> None: | CODE |
| LOW | apps/api/routes/tts_preview.py | 25 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | apps/api/routes/avatars.py | 364 | def _update_manifest_matting_status(manifest_path: Path, image: Image.Image) -> None: | CODE |
| LOW⚡ | apps/api/routes/avatars.py | 387 | def _update_manifest_dimensions(manifest_path: Path, image: Image.Image) -> None: | CODE |
| LOW | apps/api/services/session_service.py | 174 | async def update_session_state(r: redis.Redis, sid: str, state: str) -> None: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/en/examples/product-demo-live-sales.md | 32 | ### Step 1: Enter the "Real-Time Conversation" Workflow | COMMENT |
| LOW | docs/en/examples/product-demo-live-sales.md | 42 | ### Step 2: Select a Digital Human Avatar Suitable for the Business Scenario | COMMENT |
| LOW | docs/en/examples/product-demo-live-sales.md | 60 | ### Step 3: Fill In and Save the Role Persona | COMMENT |
| LOW | docs/en/examples/product-demo-live-sales.md | 119 | ### Step 4: Confirm Driving Model, Voice, and Digital Human Status, Then Start Dialogue | COMMENT |
| LOW | docs/en/examples/product-demo-live-sales.md | 131 | ### Step 5: Enter the First Product Introduction Question | COMMENT |
| LOW | docs/en/examples/product-demo-live-sales.md | 147 | ### Step 6: Follow Up on Core Selling Points | COMMENT |
| LOW | docs/en/examples/product-demo-live-sales.md | 163 | ### Step 7: Add User Concerns and Target Audience Testing | COMMENT |
| LOW | docs/en/examples/product-demo-live-sales.md | 183 | ### Step 8: Add Discount and Conversion Language to Form a Complete Sales Loop | COMMENT |
| LOW | docs/en/examples/course-news-presenter.md | 32 | ### Step 1: Enter the Real-Time Conversation Workflow and View the Initial Avatar | COMMENT |
| LOW | docs/en/examples/course-news-presenter.md | 44 | ### Step 2: Set Up the Financial News Anchor Persona | COMMENT |
| LOW⚡ | docs/en/examples/course-news-presenter.md | 62 | ### Step 3: Switch Digital Human Avatar to "News Anchor" | COMMENT |
| LOW⚡ | docs/en/examples/course-news-presenter.md | 72 | ### Step 4: Confirm WebRTC Interface Connection Successful | COMMENT |
| LOW⚡ | docs/en/examples/course-news-presenter.md | 82 | ### Step 5: Enter Chinese News Broadcasting Question | COMMENT |
| LOW | docs/en/examples/course-news-presenter.md | 100 | ### Step 6: Switch to "International Sports News Anchor" Persona | COMMENT |
| LOW | docs/en/examples/course-news-presenter.md | 118 | ### Step 7: Switch to English Sports News Broadcasting | COMMENT |
| LOW | docs/en/examples/course-news-presenter.md | 130 | ### Step 8: Enter English News Broadcasting Question | COMMENT |
| LOW | docs/en/examples/course-news-presenter.md | 148 | ### Step 9: Switch to "Japanese Cultural Tourism News Anchor" Persona | COMMENT |
| LOW | docs/en/examples/course-news-presenter.md | 166 | ### Step 10: Enter Japanese News Broadcasting Question | COMMENT |
| LOW | docs/en/examples/course-news-presenter.md | 184 | ### Step 11: Switch to "Cantonese Local Lifestyle News Anchor" Persona | COMMENT |
| LOW | docs/en/examples/course-news-presenter.md | 202 | ### Step 12: Prepare to Switch Voice to Kiki | COMMENT |
| LOW | docs/en/examples/course-news-presenter.md | 212 | ### Step 13: Enter Cantonese News Broadcasting Question | COMMENT |
| LOW | docs/en/examples/course-news-presenter.md | 230 | ### Step 14: Complete Cantonese News Broadcasting Output | COMMENT |
| LOW | docs/en/examples/companion.md | 32 | ### Step 1: Enter the "Real-Time Conversation" Workflow and View the Initial Avatar | COMMENT |
| LOW | docs/en/examples/companion.md | 44 | ### Step 2: Set Up the Persona | COMMENT |
| LOW | docs/en/examples/companion.md | 68 | ### Step 3: Select a Digital Human Avatar Suitable for Companion Scenarios | COMMENT |
| LOW | docs/en/examples/companion.md | 86 | ### Step 4: Confirm the Driving Model and Start the Conversation | COMMENT |
| LOW | docs/en/examples/companion.md | 96 | ### Step 5: Enter the First Daytime Fatigue Companion Question | COMMENT |
| LOW | docs/en/examples/companion.md | 114 | ### Step 6: Verify Emotional Comfort and Lightweight Advice | COMMENT |
| LOW | docs/en/examples/companion.md | 132 | ### Step 7: Add a Loneliness Companion Scenario | COMMENT |
| LOW | docs/en/examples/companion.md | 150 | ### Step 8: Enter a "Simple Action Right Now" Advice Question | COMMENT |
| LOW | docs/en/examples/companion.md | 168 | ### Step 9: Verify Multi-Turn Memory and Context Continuity | COMMENT |
| LOW | docs/en/examples/companion.md | 186 | ### Step 10: Daytime Companion Closing, Switch to a Softer Tone | COMMENT |
| LOW | docs/en/examples/companion.md | 204 | ### Step 11: Complete the Real-Time Companion Role Demo Summary | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | opentalking/providers/tts/factory.py | 1239 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | opentalking/providers/tts/factory.py | 1241 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | opentalking/runtime/task_consumer.py | 62 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | opentalking/runtime/task_consumer.py | 68 | # --------------------------------------------------------------------------- | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | docs/zh/design/agent-memory-knowledge-rag.md | 276 | ## 七、RAG 抽象 | COMMENT |
| MEDIUM | docs/zh/design/agent-memory-knowledge-rag.md | 593 | ### Phase 2:单知识库 RAG | COMMENT |
| MEDIUM | docs/zh/design/agent-memory-knowledge-rag.md | 745 | ## RAG 技术选型与存储比较 | COMMENT |
| MEDIUM | docs/zh/design/agent-memory-knowledge-rag.md | 747 | ### LightRAG 与其他轻量 RAG 方案 | COMMENT |
| MEDIUM | docs/en/design/agent-memory-knowledge-rag.md | 1 | # Agent Memory and Knowledge RAG Design | COMMENT |
| MEDIUM | scripts/local_cosyvoice_service.py | 625 | # Keep the service zero-shot first so it does not require precomputed spk2info.pt. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | opentalking/pipeline/speak/synthesis_runner.py | 302 | CODE | |
| LOW | opentalking/pipeline/session/runner.py | 249 | CODE | |
| LOW | opentalking/providers/synthesis/mock_client.py | 54 | CODE | |
| LOW | opentalking/providers/synthesis/flashtalk/ws_client.py | 124 | CODE | |
| LOW | …alking/providers/synthesis/flashtalk/idle_generator.py | 201 | CODE | |
| LOW | …entalking/providers/synthesis/flashhead/http_client.py | 70 | CODE | |
| LOW | opentalking/providers/tts/omnirt_indextts/adapter.py | 84 | CODE | |
| LOW | opentalking/providers/tts/local_f5_tts/adapter.py | 116 | CODE | |
| LOW | opentalking/providers/tts/local_indextts/adapter.py | 139 | CODE | |
| LOW | opentalking/agent/knowledge_index.py | 162 | CODE | |
| LOW | opentalking/models/quicktalk/runtime.py | 179 | CODE | |
| LOW | opentalking/models/quicktalk/runtime.py | 673 | CODE | |
| LOW | opentalking/models/quicktalk/runtime_v2.py | 526 | CODE | |
| LOW | scripts/local_cosyvoice_service.py | 435 | CODE | |
| LOW | scripts/local_f5_tts_service.py | 118 | CODE | |
| LOW | scripts/smoke_wechat_memory_persona.py | 218 | CODE | |
| LOW | apps/api/routes/memory.py | 93 | CODE | |
| LOW | apps/api/routes/video_creation.py | 120 | CODE | |
| LOW | apps/api/services/session_service.py | 54 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | docker/docker-compose.streaming-test.yml | 3 | # Keep the harness on a fixed release. A deployment may replace this | COMMENT |
| MEDIUM | docker/docker-compose.streaming-test.yml | 9 | # Linux local harness only: host networking keeps the browser's loopback | COMMENT |
| MEDIUM | configs/streaming/mediamtx.yml | 1 | # Template for the local streaming harness. The harness renders the | COMMENT |
| MEDIUM | configs/streaming/mediamtx.yml | 22 | # The local Linux harness uses host networking so Chromium can reach the HLS | COMMENT |
| MEDIUM | scripts/streaming/prepare_mediamtx_harness.py | 65 | # The default harness is loopback-only. A remote browser needs the | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docker-compose.yml | 1 | # OpenTalking — single-host all-in-one stack. | COMMENT |
| LOW | opentalking/core/config.py | 701 | omnirt_api_key: str = "" | COMMENT |
| LOW | opentalking/streaming/destinations/rtmps_chunked.py | 561 | del container | COMMENT |
| LOW | …eployment/recipes/v100-fasterliveportrait-flashhead.md | 101 | # /opt/digital-human/ | COMMENT |
| LOW | scripts/run_omnirt.sh | 1 | #!/usr/bin/env bash | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docker-compose.gpu.yml | 4 | # Usage: | COMMENT |
| LOW | scripts/run_omnirt.sh | 6 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/unit/test_edge_tts_adapter.py | 43 | CODE |