A generative speech model for daily dialogue.
This report summarizes scanner evidence for 2noise/ChatTTS, a Python project with 39,896 GitHub stars. SynthScan examined 31,102 lines of code across 90 source files, recording 122 pattern matches distributed across 14 syntactic categories. The legacy adjusted pattern signal is 6.0 (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? 70 finding(s).
Are imports declared and package/API names verified? 42 finding(s).
Are wrappers, guards, and repeated structures necessary? 43 finding(s).
Which changes need focused human review? 122 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 122 distinct pattern matches across 14 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 | tools/llm/__init__.py | 1 | CODE | |
| LOW | tools/logger/__init__.py | 1 | CODE | |
| LOW | tools/seeder/__init__.py | 1 | CODE | |
| LOW | tools/audio/__init__.py | 1 | CODE | |
| LOW | tools/audio/__init__.py | 2 | CODE | |
| LOW | tools/audio/__init__.py | 2 | CODE | |
| LOW | tools/audio/__init__.py | 2 | CODE | |
| LOW | tools/audio/__init__.py | 3 | CODE | |
| LOW | tools/audio/__init__.py | 4 | CODE | |
| LOW | tools/normalizer/__init__.py | 1 | CODE | |
| LOW | tools/normalizer/__init__.py | 2 | CODE | |
| LOW | ChatTTS/__init__.py | 1 | CODE | |
| LOW | ChatTTS/config/__init__.py | 1 | CODE | |
| LOW | ChatTTS/utils/__init__.py | 1 | CODE | |
| LOW | ChatTTS/utils/__init__.py | 1 | CODE | |
| LOW | ChatTTS/utils/__init__.py | 2 | CODE | |
| LOW | ChatTTS/utils/__init__.py | 3 | CODE | |
| LOW | ChatTTS/utils/__init__.py | 3 | CODE | |
| LOW | ChatTTS/utils/__init__.py | 3 | CODE | |
| LOW | ChatTTS/utils/__init__.py | 3 | CODE | |
| LOW | ChatTTS/utils/__init__.py | 4 | CODE | |
| LOW | ChatTTS/utils/gpu.py | 6 | CODE | |
| LOW | ChatTTS/model/__init__.py | 1 | CODE | |
| LOW | ChatTTS/model/__init__.py | 2 | CODE | |
| LOW | ChatTTS/model/__init__.py | 3 | CODE | |
| LOW | ChatTTS/model/__init__.py | 4 | CODE | |
| LOW | ChatTTS/model/__init__.py | 5 | CODE | |
| LOW | ChatTTS/model/__init__.py | 6 | CODE | |
| LOW | ChatTTS/model/cuda/__init__.py | 1 | CODE | |
| LOW | ChatTTS/model/velocity/llm_engine.py | 23 | CODE | |
| LOW | ChatTTS/model/velocity/llm_engine.py | 25 | CODE | |
| LOW | ChatTTS/model/velocity/llm_engine.py | 31 | CODE | |
| LOW | ChatTTS/model/velocity/__init__.py | 1 | CODE | |
| LOW | ChatTTS/model/velocity/__init__.py | 2 | CODE | |
| LOW | ChatTTS/model/velocity/model_loader.py | 9 | CODE | |
| LOW | examples/web/webui.py | 13 | CODE | |
| LOW | examples/api/openai_api.py | 20 | CODE | |
| LOW | examples/api/postScript.py | 2 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tools/audio/pcm.py | 16 | # Create an in-memory byte stream buffer | COMMENT |
| MEDIUM | ChatTTS/model/velocity/llm_engine.py | 104 | # Create the parallel GPU workers. | COMMENT |
| MEDIUM | ChatTTS/model/velocity/llm_engine.py | 117 | # Create the scheduler. | COMMENT |
| MEDIUM | ChatTTS/model/velocity/llm_engine.py | 312 | # Create the engine configs. | COMMENT |
| MEDIUM | ChatTTS/model/velocity/llm_engine.py | 317 | # Create the LLM engine. | COMMENT |
| MEDIUM | ChatTTS/model/velocity/llm_engine.py | 354 | # Create the sequences. | COMMENT |
| MEDIUM | ChatTTS/model/velocity/llm_engine.py | 359 | # Create the sequence group. | COMMENT |
| MEDIUM | ChatTTS/model/velocity/llm_engine.py | 624 | # Create the outputs. | COMMENT |
| MEDIUM | ChatTTS/model/velocity/model_loader.py | 53 | # Create a model instance. | COMMENT |
| MEDIUM | ChatTTS/model/velocity/scheduler.py | 83 | # Create the block space manager. | COMMENT |
| MEDIUM | ChatTTS/model/velocity/output.py | 101 | # Create the outputs. | COMMENT |
| MEDIUM | examples/api/openai_api.py | 35 | # Import necessary modules | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | examples/cmd/run.py | 41 | "Run: conda install -c conda-forge pynini=2.1.5 && pip install nemo_text_processing", | CODE |
| HIGH | examples/cmd/run.py | 50 | "Run: conda install -c conda-forge pynini=2.1.5 && pip install WeTextProcessing", | CODE |
| HIGH | examples/web/funcs.py | 99 | "Run: conda install -c conda-forge pynini=2.1.5 && pip install nemo_text_processing", | CODE |
| HIGH | examples/web/funcs.py | 108 | "Run: conda install -c conda-forge pynini=2.1.5 && pip install WeTextProcessing", | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | README.md | 0 | chat t t s is a text to speech model designed for dialogue applications. [uv_break]it supports mixed language input [uv_ | STRING |
| HIGH | docs/kr/README.md | 0 | chat t t s is a text to speech model designed for dialogue applications. [uv_break]it supports mixed language input [uv_ | STRING |
| HIGH | docs/cn/README.md | 0 | chat t t s is a text to speech model designed for dialogue applications. [uv_break]it supports mixed language input [uv_ | STRING |
| HIGH | docs/es/README.md | 0 | chat t t s is a text to speech model designed for dialogue applications. [uv_break]it supports mixed language input [uv_ | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ChatTTS/norm.py | 235 | def _count_invalid_characters(self, s: str): | CODE |
| LOW | ChatTTS/utils/dl.py | 114 | def download_and_extract_tar_gz( | CODE |
| LOW | ChatTTS/model/gpt.py | 164 | def _prepare_generation_inputs( | CODE |
| LOW | ChatTTS/model/gpt.py | 291 | def _prepare_generation_outputs( | CODE |
| LOW | ChatTTS/model/velocity/worker.py | 92 | def profile_num_available_blocks( | CODE |
| LOW | ChatTTS/model/velocity/worker.py | 207 | def _init_distributed_environment( | CODE |
| LOW | ChatTTS/model/velocity/worker.py | 241 | def _check_if_gpu_supports_dtype(torch_dtype: torch.dtype): | CODE |
| LOW | ChatTTS/model/velocity/configs.py | 203 | def verify_with_parallel_config( | CODE |
| LOW | ChatTTS/model/velocity/configs.py | 322 | def verify_with_parallel_config( | CODE |
| LOW | ChatTTS/model/velocity/llm_engine.py | 377 | def get_num_unfinished_requests(self) -> int: | CODE |
| LOW | ChatTTS/model/velocity/llm_engine.py | 385 | def _check_beam_search_early_stopping( | CODE |
| LOW | ChatTTS/model/velocity/llm_engine.py | 429 | def _process_sequence_group_outputs( | CODE |
| LOW | ChatTTS/model/velocity/scheduler.py | 127 | def get_num_unfinished_seq_groups(self) -> int: | CODE |
| LOW | examples/onnx/exporter.py | 137 | def convert_embedding_code_cache(): | CODE |
| LOW | examples/onnx/modeling_llama.py | 615 | def _set_gradient_checkpointing(self, module, value=False): | STRING |
| LOW | examples/onnx/modeling_llama.py | 720 | def _prepare_decoder_attention_mask( | STRING |
| LOW | examples/onnx/modeling_llama.py | 1041 | def prepare_inputs_for_generation( | CODE |
| LOW | examples/web/funcs.py | 237 | def set_buttons_before_generate(generate_button, interrupt_button): | CODE |
| LOW | examples/web/funcs.py | 249 | def set_buttons_after_generate(generate_button, interrupt_button, audio_output): | CODE |
| LOW | examples/api/main.py | 52 | async def validation_exception_handler(request, exc: RequestValidationError): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ChatTTS/core.py | 66 | CODE | |
| LOW | ChatTTS/core.py | 210 | CODE | |
| LOW | ChatTTS/core.py | 390 | CODE | |
| LOW | ChatTTS/utils/dl.py | 19 | CODE | |
| LOW | ChatTTS/utils/io.py | 41 | CODE | |
| LOW | ChatTTS/utils/gpu.py | 13 | CODE | |
| LOW | ChatTTS/model/gpt.py | 164 | CODE | |
| LOW | ChatTTS/model/gpt.py | 324 | CODE | |
| LOW | ChatTTS/model/velocity/sequence.py | 35 | CODE | |
| LOW | ChatTTS/model/velocity/llm_engine.py | 429 | CODE | |
| LOW | ChatTTS/model/velocity/llm.py | 193 | CODE | |
| LOW | ChatTTS/model/velocity/scheduler.py | 103 | CODE | |
| LOW | ChatTTS/model/velocity/scheduler.py | 130 | CODE | |
| LOW | examples/cmd/stream.py | 74 | CODE | |
| LOW | examples/onnx/modeling_llama.py | 1121 | CODE | |
| LOW | examples/web/webui.py | 17 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ChatTTS/core.py | 137 | CODE | |
| LOW | ChatTTS/core.py | 210 | CODE | |
| LOW | ChatTTS/core.py | 278 | CODE | |
| LOW | ChatTTS/core.py | 390 | CODE | |
| LOW | ChatTTS/model/gpt.py | 324 | CODE | |
| LOW | ChatTTS/model/velocity/worker.py | 204 | CODE | |
| LOW | ChatTTS/model/velocity/configs.py | 64 | CODE | |
| LOW | ChatTTS/model/velocity/sampling_params.py | 94 | CODE | |
| LOW | ChatTTS/model/velocity/llm.py | 68 | CODE | |
| LOW | ChatTTS/model/velocity/sampler.py | 15 | CODE | |
| LOW | examples/onnx/modeling_llama.py | 748 | CODE | |
| LOW | examples/onnx/modeling_llama.py | 936 | CODE | |
| LOW | examples/onnx/modeling_llama.py | 1121 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ChatTTS/model/velocity/worker.py | 242 | # Check if the GPU supports the dtype. | COMMENT |
| LOW | ChatTTS/model/velocity/llm_engine.py | 558 | # Check if we can stop the beam search. | COMMENT |
| LOW⚡ | ChatTTS/model/velocity/llm_engine.py | 782 | # Check if the sequence has reached max_model_len. | COMMENT |
| LOW⚡ | ChatTTS/model/velocity/llm_engine.py | 787 | # Check if the sequence has reached max_tokens. | COMMENT |
| LOW⚡ | ChatTTS/model/velocity/llm_engine.py | 792 | # Check if the sequence has generated the EOS token. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | ChatTTS/utils/gpu.py | 7 | except ImportError: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ChatTTS/norm.py | 212 | except Exception as e: | CODE |
| LOW | ChatTTS/model/gpt.py | 101 | except Exception as e: | CODE |
| LOW | examples/web/funcs.py | 128 | except Exception as e: | CODE |
| LOW | examples/api/openai_api.py | 217 | except Exception as e: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ChatTTS/model/velocity/llama.py | 1 | # coding=utf-8 | COMMENT |
| LOW | examples/onnx/modeling_llama.py | 1 | # coding=utf-8 | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ChatTTS/model/velocity/model_runner.py | 133 | # yet. In this case, we just use a dummy slot mapping. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ChatTTS/model/velocity/configs.py | 590 | # make sure to update docs/source/models/engine_args.rst | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ChatTTS/model/velocity/model_runner.py | 95 | def set_block_size(self, block_size: int) -> None: | CODE |