Repository Analysis

renpy/renpy

The Ren'Py Visual Novel Engine

21.9 Moderate AI signal View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of renpy/renpy, a Ren'Py project with 6,632 GitHub stars. SynthScan v2.0 examined 169,399 lines of code across 334 source files, recording 4206 pattern matches distributed across 16 syntactic categories. The overall adjusted score of 21.9 places this repository in the Moderate AI signal band.

The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).

21.9
Adjusted Score
21.9
Raw Score
100%
Time Factor
2026-07-14
Last Push
6.6K
Stars
Ren'Py
Language
169.4K
Lines of Code
334
Files
4.2K
Pattern Hits
2026-07-14
Scan Date
0.04
HC Hit Rate

What These Metrics Mean

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

Score History

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

Severity Breakdown

Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.

CRITICAL 0HIGH 14MEDIUM 85LOW 4107

Directory Score Breakdown

This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.

Pattern Findings

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

Unused Imports3086 hits · 2451 pts
SeverityFileLineSnippetContext
LOWdistribute.py4CODE
LOWdistribute.py4CODE
LOWdistribute.py4CODE
LOWdistribute.py4CODE
LOWdistribute.py4CODE
LOWdistribute.py18CODE
LOWadd.py2CODE
LOWadd.py9CODE
LOWrenpy.py27CODE
LOWrenpy.py27CODE
LOWsetup.py35CODE
LOWmain.py27CODE
LOWmain.py27CODE
LOWlauncher/game/webserver.py1CODE
LOWlauncher/game/webserver.py11CODE
LOWlauncher/game/change_icon.py25CODE
LOWlauncher/game/change_icon.py26CODE
LOWlauncher/game/gui7/code.py22CODE
LOWlauncher/game/gui7/__init__.py22CODE
LOWlauncher/game/gui7/__init__.py22CODE
LOWlauncher/game/gui7/__init__.py22CODE
LOWlauncher/game/gui7/images.py26CODE
LOWrenpy/bootstrap.py323CODE
LOWrenpy/scriptedit.py25CODE
LOWrenpy/scriptedit.py25CODE
LOWrenpy/scriptedit.py25CODE
LOWrenpy/scriptedit.py25CODE
LOWrenpy/scriptedit.py25CODE
LOWrenpy/scriptedit.py26CODE
LOWrenpy/scriptedit.py26CODE
LOWrenpy/scriptedit.py26CODE
LOWrenpy/scriptedit.py26CODE
LOWrenpy/scriptedit.py26CODE
LOWrenpy/scriptedit.py26CODE
LOWrenpy/scriptedit.py26CODE
LOWrenpy/scriptedit.py26CODE
LOWrenpy/scriptedit.py26CODE
LOWrenpy/scriptedit.py26CODE
LOWrenpy/scriptedit.py31CODE
LOWrenpy/execution.py29CODE
LOWrenpy/config.py26CODE
LOWrenpy/config.py26CODE
LOWrenpy/config.py26CODE
LOWrenpy/config.py26CODE
LOWrenpy/config.py26CODE
LOWrenpy/config.py27CODE
LOWrenpy/config.py27CODE
LOWrenpy/config.py27CODE
LOWrenpy/config.py27CODE
LOWrenpy/config.py27CODE
LOWrenpy/config.py27CODE
LOWrenpy/config.py27CODE
LOWrenpy/config.py27CODE
LOWrenpy/config.py27CODE
LOWrenpy/config.py27CODE
LOWrenpy/config.py27CODE
LOWrenpy/config.py29CODE
LOWrenpy/config.py29CODE
LOWrenpy/savelocation.py27CODE
LOWrenpy/savelocation.py27CODE
3026 more matches not shown…
Excessive Try-Catch Wrapping369 hits · 379 pts
SeverityFileLineSnippetContext
LOWdistribute.py135 except Exception:CODE
LOWrenpy.py121 except Exception:CODE
LOWrenpy.py158 except Exception:CODE
MEDIUMrenpy.py114def test_writable(d):CODE
LOWmain.py121 except Exception:CODE
LOWmain.py158 except Exception:CODE
MEDIUMmain.py114def test_writable(d):CODE
LOWlauncher/Visual Studio Code.edit.py99 except Exception:CODE
LOWlauncher/Visual Studio Code (System).edit.py99 except Exception:CODE
LOWlauncher/VSCodium (System).edit.py99 except Exception:CODE
LOWlauncher/game/webserver.py135 except Exception:CODE
LOWlauncher/game/installer.py58 except Exception:CODE
LOWlauncher/game/installer.py126 except Exception:CODE
LOWlauncher/game/installer.py132 except Exception:CODE
LOWlauncher/game/installer.py163 except Exception:CODE
LOWlauncher/game/installer.py368 except Exception:CODE
LOWlauncher/game/installer.py373 except Exception:CODE
LOWlauncher/game/installer.py436 except Exception as e:CODE
LOWlauncher/game/gui7/images.py54 except Exception:CODE
LOWlauncher/game/gui7/images.py122 except Exception:CODE
LOWrenpy/bootstrap.py53 except Exception:CODE
LOWrenpy/bootstrap.py134 except Exception:CODE
LOWrenpy/bootstrap.py299 except Exception as e:CODE
LOWrenpy/bootstrap.py324 except Exception as e:STRING
LOWrenpy/bootstrap.py360 except Exception:STRING
LOWrenpy/bootstrap.py400 except Exception as e:STRING
MEDIUMrenpy/bootstrap.py46def null_files():CODE
LOWrenpy/scriptedit.py529 except Exception:CODE
LOWrenpy/color.py373 except Exception:CODE
LOWrenpy/color.py385 except Exception:CODE
LOWrenpy/color.py395 except Exception:CODE
LOWrenpy/color.py405 except Exception:CODE
LOWrenpy/execution.py207 except Exception:CODE
LOWrenpy/execution.py559 except Exception:CODE
LOWrenpy/execution.py566 except Exception:CODE
LOWrenpy/execution.py690 except Exception:CODE
LOWrenpy/execution.py957 except Exception:CODE
LOWrenpy/execution.py1080 except Exception:CODE
MEDIUMrenpy/execution.py196def __repr__(self):CODE
LOWrenpy/savelocation.py280 except Exception:CODE
LOWrenpy/savelocation.py286 except Exception:CODE
LOWrenpy/savelocation.py290 except Exception:CODE
LOWrenpy/savelocation.py115 except Exception:CODE
LOWrenpy/savelocation.py130 except Exception:CODE
LOWrenpy/savelocation.py182 except Exception:CODE
LOWrenpy/savelocation.py262 except Exception:CODE
LOWrenpy/savelocation.py312 except Exception:CODE
LOWrenpy/savelocation.py315 except Exception:CODE
LOWrenpy/savelocation.py448 except Exception:CODE
LOWrenpy/savelocation.py661 except Exception:CODE
LOWrenpy/importer.py330 except Exception as e:CODE
MEDIUMrenpy/error.py208def getvalue(self):CODE
LOWrenpy/error.py439 except Exception:CODE
LOWrenpy/error.py441 except Exception:CODE
LOWrenpy/error.py398 except Exception:CODE
LOWrenpy/error.py464 except Exception:CODE
LOWrenpy/error.py809 except Exception:CODE
LOWrenpy/error.py938 except Exception:CODE
LOWrenpy/error.py981 except Exception:CODE
LOWrenpy/error.py1201 except Exception:CODE
309 more matches not shown…
Over-Commented Block215 hits · 214 pts
SeverityFileLineSnippetContext
LOWrenpy.py1#!/usr/bin/env pythonCOMMENT
LOWsetup.py1#!/usr/bin/env pythonCOMMENT
LOWmain.py1#!/usr/bin/env pythonCOMMENT
LOWlauncher/game/change_icon.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWlauncher/game/change_icon.py361 #COMMENT
LOWlauncher/game/installer.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWlauncher/game/gui7/code.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWlauncher/game/gui7/__init__.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWlauncher/game/gui7/images.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWlauncher/game/gui7/parameters.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/bootstrap.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/scriptedit.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/color.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/execution.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/config.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/config.py101COMMENT
LOWrenpy/config.py241# choice from a menu. This can be used for making a demo version of aCOMMENT
LOWrenpy/savelocation.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/importer.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/error.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/error.py541 # Binary ops, subscripts, and calls are expressions, soCOMMENT
LOWrenpy/screenlang.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/savetoken.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/memory.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/object.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/log.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/pyanalysis.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/revertable.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/util.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/ui.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/game.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/arguments.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/preferences.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/__init__.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/rollback.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/types.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/substitutions.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/loadsave.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/webloader.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/dump.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/easy.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/parser.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/atl.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/atl.py541 if (old_widget_param is not None) and (COMMENT
LOWrenpy/atl.py781class Statement(renpy.object.Object):COMMENT
LOWrenpy/atl.py801 # and control to head up to the event handler.COMMENT
LOWrenpy/add_from.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/loader.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/curry.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/debug.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/lexer.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/python.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/character.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/persistent.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/ast.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/warp.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/versions.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/defaultstore.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/editor.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/statements.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
155 more matches not shown…
Deep Nesting281 hits · 212 pts
SeverityFileLineSnippetContext
LOWdistribute.py51CODE
LOWrenpy.py232CODE
LOWmain.py232CODE
LOWlauncher/Visual Studio Code.edit.py14CODE
LOWlauncher/Visual Studio Code.edit.py79CODE
LOWlauncher/Visual Studio Code (System).edit.py14CODE
LOWlauncher/Visual Studio Code (System).edit.py79CODE
LOWlauncher/VSCodium (System).edit.py14CODE
LOWlauncher/VSCodium (System).edit.py79CODE
LOWlauncher/game/installer.py112CODE
LOWlauncher/game/installer.py144CODE
LOWlauncher/game/installer.py174CODE
LOWlauncher/game/installer.py349CODE
LOWlauncher/game/gui7/code.py293CODE
LOWrenpy/bootstrap.py197CODE
LOWrenpy/scriptedit.py74CODE
LOWrenpy/color.py174CODE
LOWrenpy/execution.py1036CODE
LOWrenpy/execution.py591CODE
LOWrenpy/execution.py784CODE
LOWrenpy/execution.py887CODE
LOWrenpy/savelocation.py737CODE
LOWrenpy/savelocation.py159CODE
LOWrenpy/savelocation.py265CODE
LOWrenpy/savelocation.py293CODE
LOWrenpy/error.py451CODE
LOWrenpy/error.py817CODE
LOWrenpy/error.py862CODE
LOWrenpy/error.py887CODE
LOWrenpy/error.py1314CODE
LOWrenpy/error.py1458CODE
LOWrenpy/error.py1517CODE
LOWrenpy/savetoken.py259CODE
LOWrenpy/savetoken.py285CODE
LOWrenpy/memory.py91CODE
LOWrenpy/memory.py430CODE
LOWrenpy/memory.py500CODE
LOWrenpy/memory.py97CODE
LOWrenpy/memory.py510CODE
LOWrenpy/pyanalysis.py258CODE
LOWrenpy/pyanalysis.py551CODE
LOWrenpy/ui.py1111CODE
LOWrenpy/rollback.py111CODE
LOWrenpy/rollback.py399CODE
LOWrenpy/rollback.py515CODE
LOWrenpy/rollback.py542CODE
LOWrenpy/rollback.py614CODE
LOWrenpy/rollback.py736CODE
LOWrenpy/rollback.py939CODE
LOWrenpy/substitutions.py43CODE
LOWrenpy/substitutions.py105CODE
LOWrenpy/webloader.py178CODE
LOWrenpy/webloader.py204CODE
LOWrenpy/dump.py63CODE
LOWrenpy/easy.py56CODE
LOWrenpy/easy.py100CODE
LOWrenpy/easy.py146CODE
LOWrenpy/parser.py122CODE
LOWrenpy/parser.py208CODE
LOWrenpy/parser.py333CODE
221 more matches not shown…
Self-Referential Comments60 hits · 173 pts
SeverityFileLineSnippetContext
MEDIUMrenpy.py3# This file is part of Ren'Py. The license below applies to Ren'Py only.COMMENT
MEDIUMmain.py3# This file is part of Ren'Py. The license below applies to Ren'Py only.COMMENT
MEDIUMrenpy/scriptedit.py22# This file contains code to add and remove statements from the ASTCOMMENT
MEDIUMrenpy/execution.py22# This file contains code responsible for managing the execution of aCOMMENT
MEDIUMrenpy/error.py22# This file contains code for formatting tracebacks.COMMENT
MEDIUMrenpy/memory.py22# This file contains functions used to help debug memory leaks. They aren'tCOMMENT
MEDIUMrenpy/log.py22# This module handles the logging of messages to a file.COMMENT
MEDIUMrenpy/revertable.py22# This file contains code that handles the execution of python codeCOMMENT
MEDIUMrenpy/ui.py22# This file contains functions that can be used to display a UI on theCOMMENT
MEDIUMrenpy/game.py22# This module is intended to be used as a singleton object.COMMENT
MEDIUMrenpy/arguments.py22# This file handles argument parsing. Argument parsing takes place inCOMMENT
MEDIUMrenpy/__init__.py591 # Create the store.COMMENT
MEDIUMrenpy/rollback.py22# This file contains code that handles the execution of python codeCOMMENT
MEDIUMrenpy/types.py22# This file contains the various types that Ren'Py uses.COMMENT
MEDIUMrenpy/substitutions.py22# This file contains support for string translation and string formattingCOMMENT
MEDIUMrenpy/loadsave.py22# This file contains functions that load and save the game state.COMMENT
MEDIUMrenpy/dump.py22# This file contains code to write the reflect.json file. This file containsCOMMENT
MEDIUMrenpy/parser.py22# This module contains the parser for the Ren'Py script language. It'sCOMMENT
MEDIUMrenpy/atl.py1410 # Create a new transform state, and apply the propertyCOMMENT
MEDIUMrenpy/debug.py22# This file contains debugging code that isn't enabled in normal Ren'PyCOMMENT
MEDIUMrenpy/python.py22# This file contains code that handles the execution of python codeCOMMENT
MEDIUMrenpy/python.py231 # Create the dict.COMMENT
MEDIUMrenpy/character.py715 # Create a callback object specific to this pause.COMMENT
MEDIUMrenpy/character.py769 # Create the callback that is called when the slow text is done.COMMENT
MEDIUMrenpy/persistent.py278 # Create the backup of the persistent data.COMMENT
MEDIUMrenpy/ast.py22# This file contains the AST for the Ren'Py script language. Each classCOMMENT
MEDIUMrenpy/statements.py22# This module contains code to support user-defined statements.COMMENT
MEDIUMrenpy/main.py470 # Initialize persistent variables.COMMENT
MEDIUMrenpy/script.py22# This file contains code that is responsible for storing and executing aCOMMENT
MEDIUMrenpy/update/generate.py146 # Create a list of files by reverse mtime. The idea is that the newerCOMMENT
MEDIUMrenpy/sl2/slast.py56# This file contains the abstract syntax tree for a screen languageCOMMENT
MEDIUMrenpy/sl2/slast.py928 # Create the context.COMMENT
MEDIUMrenpy/sl2/slast.py2035 # Create an old-style displayable name for this call site.COMMENT
MEDIUMrenpy/exports/__init__.py22# This file contains functions that are exported to the script namespace asCOMMENT
MEDIUMrenpy/common/00sshtransition_ren.py22# This file contains support for a transition after a sequence ofCOMMENT
MEDIUMrenpy/display/anim.py22# This file contains support for state-machine controlled animations.COMMENT
MEDIUMrenpy/display/error.py22# This file contains code to handle GUI-based error reporting.COMMENT
MEDIUMrenpy/display/behavior.py1910# This class contains information about an adjustment that can change theCOMMENT
MEDIUMrenpy/display/emulator.py22# This file contains code to emulate various other devices on the PC.COMMENT
MEDIUMrenpy/display/layout.py22# This file contains classes that handle layout of displayables onCOMMENT
MEDIUMrenpy/display/predict.py22# This file contains the routines that manage image prediction.COMMENT
MEDIUMrenpy/display/core.py971 # Create a cache of the mouse information.COMMENT
MEDIUMrenpy/display/imagemap.py22# This file handles imagemap caching.COMMENT
MEDIUMrenpy/display/pgrender.py53 # Create a sample surface.COMMENT
MEDIUMrenpy/display/pgrender.py67 # Create the sample surface.COMMENT
MEDIUMrenpy/display/viewport.py22# This file contains classes that handle layout of displayables onCOMMENT
MEDIUMrenpy/display/im.py22# This file contains the new image code, which includes provisions forCOMMENT
MEDIUMrenpy/display/motion.py22# This file contains displayables that move, zoom, rotate, or otherwiseCOMMENT
MEDIUMrenpy/display/transform.py22# This file contains displayables that move, zoom, rotate, or otherwiseCOMMENT
MEDIUMrenpy/display/imagelike.py22# This file contains displayables that are image-like, because they takeCOMMENT
MEDIUMrenpy/display/image.py22# This file contains some miscellaneous displayables that involve images.COMMENT
MEDIUMrenpy/display/focus.py22# This file contains code to manage focus on the display.COMMENT
MEDIUMrenpy/text/emoji_trie.py3# This file is generated by module/emoji/make_emoji_trie.py. Do notCOMMENT
MEDIUMrenpy/text/text.py1041 # Create the texture.COMMENT
MEDIUMsphinx/source/conf.py6# This file is execfile()d with the current directory set to its containing dir.COMMENT
MEDIUMsphinx/source/fill-translator-credits.py4# This file is part of Ren'Py. The license below applies to Ren'Py only.COMMENT
MEDIUMscripts/generate_styles.py638 g.write("# This file is generated by generate_styles.py.")CODE
MEDIUMscripts/unicode/make_emoji_trie.py174# This file is generated by module/emoji/make_emoji_trie.py. Do notSTRING
MEDIUMscripts/sdl3/main.py67# This file is automatically generated by scripts/sdl3/main.py. Do not edit manually.STRING
MEDIUMscripts/sdl3/main.py107# This file is automatically generated by scripts/sdl3/main.py. Do not edit manually.STRING
Cross-Language Confusion14 hits · 78 pts
SeverityFileLineSnippetContext
HIGHrenpy/webloader.py63 if (xhr.status == 200 || xhr.status == 304 || xhr.status == 206 || (xhr.status == 0 && xhr.response)) {CODE
HIGHrenpy/webloader.py63 if (xhr.status == 200 || xhr.status == 304 || xhr.status == 206 || (xhr.status == 0 && xhr.response)) {CODE
HIGHrenpy/atl.py1352 if (old_child is not None) and (old_child is not renpy.display.motion.null) and (self.transition is not None):CODE
HIGHrenpy/main.py251 || (navigator.userAgent.indexOf("Mac") != -1 && navigator.maxTouchPoints > 1)"""CODE
HIGHrenpy/exports/fetchexports.py234 command = """fetchFile("{method}", "{url}", null, "{fn}", null, "{headers}")""".format(CODE
HIGHrenpy/audio/webaudio.py41 emscripten.run_script("renpyAudio.{}.apply(null, {});".format(function, dumps(args)))CODE
HIGHrenpy/audio/webaudio.py49 return emscripten.run_script_int("renpyAudio.{}.apply(null, {});".format(function, dumps(args)))CODE
HIGHrenpy/audio/webaudio.py57 rv = emscripten.run_script_string("renpyAudio.{}.apply(null, {});".format(function, dumps(args)))CODE
HIGHrenpy/display/behavior.py2706 return render(self.null, width, height, st, at)CODE
HIGHrenpy/display/layout.py569 self.add(null)CODE
HIGHrenpy/display/tts.py194 language = locale.toString().replace("_", "-")CODE
HIGHrenpy/display/core.py2728 ld.add(null)CODE
HIGHrenpy/display/viewport.py777 self.add(null)CODE
HIGHrenpy/gl2/live2d.py126window.live2d_csm.ccall("csmInitializeAmountOfMemory", null, ["number"], [{renpy.config.live2d_max_memory}]);CODE
Hyper-Verbose Identifiers65 hits · 66 pts
SeverityFileLineSnippetContext
LOWrenpy/scriptedit.py414def nodes_on_line_at_or_after(filename, linenumber):CODE
LOWrenpy/config.py1037def say_attribute_transition_callback(*args):CODE
LOWrenpy/error.py451def normalize_renpy_line_offset(filename: str, linenumber: int, offset: int, line: str):CODE
LOWrenpy/rollback.py1166 def get_identifier_checkpoints(self, identifier):CODE
LOWrenpy/webloader.py204def process_downloaded_resources():CODE
LOWrenpy/easy.py38def lookup_displayable_prefix(d: str) -> Displayable | None:CODE
LOWrenpy/parser.py99def parse_simple_expression_list(l, image=False):CODE
LOWrenpy/loader.py402def scandirfiles_from_remote_file(add, seen):CODE
LOWrenpy/loader.py432def scandirfiles_from_filesystem(add, seen):CODE
LOWrenpy/loader.py461def scandirfiles_from_archives(add, seen):CODE
LOWrenpy/loader.py546def load_from_file_open_callback(name):CODE
LOWrenpy/python.py452def find_starred_match_patterns(node):CODE
LOWrenpy/character.py289def compute_widget_properties(who_args, what_args, window_args, properties, variant=None, multiple=None):CODE
LOWrenpy/ast.py560def probably_side_effect_free(expr: str) -> bool:CODE
LOWrenpy/parameter.py231 def with_pos_only_as_pos_or_kw(self):CODE
LOWrenpy/lint.py681def check_style_property_displayable(name, property, d):CODE
LOWrenpy/lint.py1035def check_orphan_translations(none_lang_identifiers, translation_identifiers):CODE
LOWrenpy/test/testexecution.py255def link_top_level_testcase_to_parent(node: TestCase) -> None:CODE
LOWrenpy/test/testexecution.py404def update_suite_enabled_flag(node: TestSuite) -> None:CODE
LOWrenpy/test/testexecution.py519 def dispatch_exception_to_control_frame(self, exc: Exception) -> bool:CODE
LOWrenpy/test/testexecution.py526 def move_to_next_node_if_possible(self) -> None:CODE
LOWrenpy/test/testparser.py628def one_line_python_statement(l: Lexer, loc: NodeLocation) -> testast.Python:CODE
LOWrenpy/test/testparser.py711def parse_testcase_parameters(l: Lexer, loc: NodeLocation) -> list[dict[str, Any]]:CODE
LOWrenpy/test/testreporter.py333 def get_outcome_by_test_block(self, test_block: BaseTestBlock) -> BaseOutcome:CODE
LOWrenpy/test/testreporter.py398def get_assertion_error_string(epc: renpy.error.ExceptionPrintContext, assert_node: Assert, node_name: str) -> str:CODE
LOWrenpy/test/testreporter.py524 def _format_with_status_color(self, msg: str, status: OutcomeStatus | None) -> str:CODE
LOWrenpy/test/testreporter.py592 def _print_summarized_outcomes(self, outcome: OutcomeManager) -> None:CODE
LOWrenpy/test/testast.py239 def current_parameterized_name(self) -> str:CODE
LOWrenpy/test/testast.py244 def current_full_parameterized_path(self) -> str:CODE
LOWrenpy/test/testast.py308 def generate_parameter_combinations(self, parameters: list[list[dict[str, Any]]] | None) -> list[dict[str, Any]]:CODE
LOWrenpy/test/testast.py326 def advance_to_next_parameter_set(self):CODE
LOWrenpy/test/testast.py355 def has_all_parameters_been_processed(self) -> bool:CODE
LOWrenpy/test/testast.py454 def advance_to_next_parameter_set(self):CODE
LOWrenpy/test/testast.py506 def has_completed_all_subtests(self) -> bool:CODE
LOWrenpy/test/testast.py516 def current_full_parameterized_path(self) -> str:CODE
LOWrenpy/test/testast.py572 def element_not_found_during_perform(self) -> None:CODE
LOWrenpy/test/testast.py681 def element_not_found_during_perform(self) -> None:CODE
LOWrenpy/test/testast.py745 def element_not_found_during_perform(self) -> None:CODE
LOWrenpy/translation/__init__.py895def get_translation_identifier():CODE
LOWrenpy/sl2/slparser.py130def update_incompatible_props(prefix, prop):CODE
LOWrenpy/sl2/slparser.py460 def add_prefix_style_property(self, prefix, name):CODE
LOWrenpy/exports/fetchexports.py133def get_fetch_requests_progress() -> float:CODE
LOWrenpy/exports/fetchexports.py274def get_fetch_emscripten_progress() -> float:CODE
LOWrenpy/exports/sayexports.py240def count_seen_dialogue_blocks():CODE
LOWrenpy/exports/sayexports.py251def count_newly_seen_dialogue_blocks():CODE
LOWrenpy/exports/statementexports.py356def execute_default_statement(start=False):CODE
LOWrenpy/exports/rollbackexports.py242def get_identifier_checkpoints(identifier):CODE
LOWrenpy/exports/displayexports.py34def count_displayables_in_layer(layer):CODE
LOWrenpy/common/00sshtransition_ren.py47def _scene_show_hide_transition_callback(statement):CODE
LOWrenpy/display/screen.py1578def get_displayable_properties(id, screen=None, layer=None):CODE
LOWrenpy/display/behavior.py1859 def get_caret_above_below_pos(self):CODE
LOWrenpy/display/layout.py1522def dynamic_displayable_compat(st, at, expr):CODE
LOWrenpy/display/core.py1374 def check_background_screenshot(self):CODE
LOWrenpy/display/im.py558 def _preload_thread_pass_serial(self):CODE
LOWrenpy/display/im.py584 def _preload_thread_pass_parallel(self, pool: ThreadPoolExecutor):CODE
LOWrenpy/display/im.py1146def ensure_bounds_divide_evenly(bounds: tuple[int, int, int, int], n: int) -> tuple[int, int, int, int]:CODE
LOWrenpy/display/transform.py368 def set_pos_from_angle_and_radius(self, angle, radius):CODE
LOWrenpy/display/transform.py522 def set_anchor_from_anchorangle_and_anchorradius(CODE
LOWrenpy/display/video.py295def find_oversampled_filename(filename):CODE
LOWrenpy/display/scenelists.py530 def get_all_layer_tag_displayable(CODE
5 more matches not shown…
AI Structural Patterns70 hits · 51 pts
SeverityFileLineSnippetContext
LOWrenpy/revertable.py348CODE
LOWrenpy/ui.py836CODE
LOWrenpy/ui.py924CODE
LOWrenpy/ui.py1242CODE
LOWrenpy/preferences.py374CODE
LOWrenpy/parser.py847CODE
LOWrenpy/parser.py871CODE
LOWrenpy/parser.py1237CODE
LOWrenpy/parser.py1246CODE
LOWrenpy/lexer.py1751CODE
LOWrenpy/lexer.py1332CODE
LOWrenpy/character.py342CODE
LOWrenpy/character.py1406CODE
LOWrenpy/statements.py37CODE
LOWrenpy/test/testparser.py534CODE
LOWrenpy/test/testparser.py567CODE
LOWrenpy/test/testast.py382CODE
LOWrenpy/test/testast.py743CODE
LOWrenpy/update/common.py100CODE
LOWrenpy/update/common.py117CODE
LOWrenpy/update/common.py152CODE
LOWrenpy/translation/generation.py419CODE
LOWrenpy/sl2/slast.py687CODE
LOWrenpy/sl2/slast.py1833CODE
LOWrenpy/sl2/slast.py1849CODE
LOWrenpy/sl2/slast.py1893CODE
LOWrenpy/sl2/slparser.py656CODE
LOWrenpy/exports/fetchexports.py284CODE
LOWrenpy/exports/displayexports.py371CODE
LOWrenpy/exports/displayexports.py1336CODE
LOWrenpy/exports/menuexports.py202CODE
LOWrenpy/exports/inputexports.py68CODE
LOWrenpy/audio/webaudio.py59CODE
LOWrenpy/audio/music.py36CODE
LOWrenpy/audio/audio.py911CODE
LOWrenpy/display/screen.py226CODE
LOWrenpy/display/anim.py409CODE
LOWrenpy/display/behavior.py860CODE
LOWrenpy/display/behavior.py918CODE
LOWrenpy/display/behavior.py1230CODE
LOWrenpy/display/behavior.py1418CODE
LOWrenpy/display/behavior.py1953CODE
LOWrenpy/display/behavior.py2274CODE
LOWrenpy/display/displayable.py655CODE
LOWrenpy/display/movetransition.py457CODE
LOWrenpy/display/transition.py466CODE
LOWrenpy/display/transition.py812CODE
LOWrenpy/display/dragdrop.py327CODE
LOWrenpy/display/core.py2366CODE
LOWrenpy/display/pgrender.py200CODE
LOWrenpy/display/pgrender.py91CODE
LOWrenpy/display/viewport.py77CODE
LOWrenpy/display/motion.py61CODE
LOWrenpy/display/motion.py439CODE
LOWrenpy/display/motion.py603CODE
LOWrenpy/display/particle.py665CODE
LOWrenpy/display/module.py215CODE
LOWrenpy/display/video.py616CODE
LOWrenpy/display/imagelike.py202CODE
LOWrenpy/display/scenelists.py350CODE
10 more matches not shown…
Structural Annotation Overuse12 hits · 25 pts
SeverityFileLineSnippetContext
LOWrenpy/translation/__init__.py1222 # Step 2: language subtag must be 2 or 3 alphabetic characters (ISO 639-1/2/3).COMMENT
LOWrenpy/translation/__init__.py1227 # Step 3: walk remaining subtags. Identify by shape, not position, so we'reCOMMENT
LOWrenpy/translation/__init__.py1244 # Step 4: infer region if missing.COMMENT
LOWrenpy/translation/__init__.py1248 # Step 5: handle script. Only Chinese commonly carries a script in practice,COMMENT
LOWrenpy/translation/__init__.py1207 # Step 1: strip BCP 47 extensions. Everything from "-u-", "-t-", or "-x-"COMMENT
LOWrenpy/display/core.py2276 # Step 1: Run gc.COMMENT
LOWrenpy/display/core.py2281 # Step 2: Push textures to GPU.COMMENT
LOWrenpy/display/core.py2288 # Step 3: Predict more images.COMMENT
LOWrenpy/display/core.py2331 # Step 5: Autosave.COMMENT
LOWrenpy/display/core.py2339 # Step 6: Persistent data.COMMENT
LOWrenpy/display/core.py2309 # Step 4: Preload images (on emscripten)COMMENT
LOWrenpy/display/transform.py1050 # NOTE: This function is duplicated (more or less) in ATLTransform.COMMENT
Verbosity Indicators11 hits · 23 pts
SeverityFileLineSnippetContext
LOWrenpy/translation/__init__.py1222 # Step 2: language subtag must be 2 or 3 alphabetic characters (ISO 639-1/2/3).COMMENT
LOWrenpy/translation/__init__.py1227 # Step 3: walk remaining subtags. Identify by shape, not position, so we'reCOMMENT
LOWrenpy/translation/__init__.py1244 # Step 4: infer region if missing.COMMENT
LOWrenpy/translation/__init__.py1248 # Step 5: handle script. Only Chinese commonly carries a script in practice,COMMENT
LOWrenpy/translation/__init__.py1207 # Step 1: strip BCP 47 extensions. Everything from "-u-", "-t-", or "-x-"COMMENT
LOWrenpy/display/core.py2276 # Step 1: Run gc.COMMENT
LOWrenpy/display/core.py2281 # Step 2: Push textures to GPU.COMMENT
LOWrenpy/display/core.py2288 # Step 3: Predict more images.COMMENT
LOWrenpy/display/core.py2331 # Step 5: Autosave.COMMENT
LOWrenpy/display/core.py2339 # Step 6: Persistent data.COMMENT
LOWrenpy/display/core.py2309 # Step 4: Preload images (on emscripten)COMMENT
AI Slop Vocabulary7 hits · 14 pts
SeverityFileLineSnippetContext
LOWlauncher/game/change_icon.py391 # There's already a header size, and this isn't changing headers, so just add.COMMENT
MEDIUMrenpy/error.py98 # TODO: Make it more robust by is_relative_to check.COMMENT
MEDIUMrenpy/translation/__init__.py1228 # robust against minor ordering oddities. First valid match per slot wins,COMMENT
LOWrenpy/sl2/slast.py873 # We do not want to pass keywords to our parents, so just return.COMMENT
LOWrenpy/display/behavior.py622 # If we have been drawn since the timeout, simply returnCOMMENT
LOWrenpy/display/swdraw.py62 # allows us to just return without having to do any cleanupCOMMENT
MEDIUMrenpy/gl2/live2d.py962 # Handle seamless.STRING
Redundant / Tautological Comments6 hits · 9 pts
SeverityFileLineSnippetContext
LOWrenpy/config.py1495# Set this to true to log events to log.txt.COMMENT
LOWrenpy/main.py496 # Check if we should simulate android.COMMENT
LOWrenpy/script.py516 # Assign names to statements that don't have one already.COMMENT
LOWrenpy/test/testparser.py882 ## Check if we have another condition after this oneCOMMENT
LOWrenpy/update/generate.py167 # Write the filelist to a file.COMMENT
LOWrenpy/display/layout.py666 # Set this to true to force the box to adjust its children's times.COMMENT
Modern Structural Boilerplate7 hits · 7 pts
SeverityFileLineSnippetContext
LOWrenpy/minstore.py179__all__ = [CODE
LOWrenpy/compat/__init__.py132__all__ = [CODE
LOWrenpy/test/testexecution.py196def set_next_execution_node(next_node: Node | None) -> None:CODE
LOWrenpy/test/testexecution.py404def update_suite_enabled_flag(node: TestSuite) -> None:CODE
LOWrenpy/test/testexecution.py466 def set_next_node(self, next: Node | None) -> None:CODE
LOWrenpy/test/testexecution.py469 def set_end_callback(self, callback: Callable | list[Callable]) -> None:CODE
LOWrenpy/test/testreporter.py902 def _update_assert_counters(self, outcome: BaseOutcome, status: OutcomeStatus) -> None:CODE
Decorative Section Separators1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUMrenpy/text/extras.py334 # ==============================================COMMENT
Modern AI Meta-Vocabulary1 hit · 2 pts
SeverityFileLineSnippetContext
MEDIUMscripts/unicode/LineBreak.txt1927B77D..B797 ; H3 # Lo [27] HANGUL SYLLABLE RAG..HANGUL SYLLABLE RAHCODE
Slop Phrases1 hit · 0 pts
SeverityFileLineSnippetContext
LOWrenpy/gl2/live2d.py655 # Note: When adding new parameters, make sure to add them to _duplicate, too.STRING