A downloadable asset pack

Download NowName your own price

It all started with simple word counts for each character, and kind of escalated from there... Either way, here's a Ren'py Tool!

This code snippet expands Lint's capabilities to show you detailed dialogue-related statistics for your visual novels:

Do you want to keep track of the precise word counts of your characters? 
Do you want to know how many lines and words are in your different .rpy files? 
Do you want to know which characters have how many words in which .rpy file?
Do you want to know how many choice options there are in your VN?

With the Lint+ Ren'py Word Counter, you can subject yourself to information overload and get answers to all of these questions!

Here are some examples!
Character statistics:
 * sa has 1,744 blocks of dialogue, and 17,891 words.
 * ef has 1,148 blocks of dialogue, and 13,599 words.
 * di has 733 blocks of dialogue, and 9,058 words.
 * ab has 613 blocks of dialogue, and 6,990 words.
 * ash has 526 blocks of dialogue, and 6,368 words.
 * ma has 371 blocks of dialogue, and 4,717 words.
 * fo has 364 blocks of dialogue, and 4,386 words.
File statistics:
 * [common_1.rpy] contains 899 dialogue blocks and 11,178 words.
 * [common_2.rpy] contains 777 dialogue blocks and 10,227 words.
 * [common_3.rpy] contains 1,109 dialogue blocks and 13,988 words.
 * [escape/bedroom.rpy] contains 246 dialogue blocks and 2,483 words.
 * [prologue.rpy] contains 191 dialogue blocks and 2,486 words.
Detailed File statistics:
[common_1.rpy] contains 899 dialogue blocks and 11,178 words:
 * ef has 155 blocks of dialogue, and 1,930 words.
 * sa and re have 145 blocks of dialogue, and 1,662 and 1,932 words each.
 * fo has 42 blocks of dialogue, and 545 words.
[common_2.rpy] contains 777 dialogue blocks and 10,227 words:
 * sa has 68 blocks of dialogue, and 752 words.
 * re has 60 blocks of dialogue, and 643 words.
 * ef has 55 blocks of dialogue, and 581 words.
Menu statistics: 
The game has 38 menus, with a total of 90 possible choices,
for an average of 2.37 choices per menu.

These statistics have all kinds of uses, such as:

  • Predicting the costs of voice acting, per character
  • Keeping track of your writing progress
  • Estimating the playtime of a new chapter
  • Noticing which characters you've neglected
    (or favored too much)
  • Comparing the lengths of different routes
  • Making sure you provide enough freedom of choice
  • And probably more!

How to use:

  1. Put wordcounter.rpy in your game folder
  2. Optionally adjust variables to disable unneeded statistics
  3. Select "Check Script (Lint)" from the Ren'py Launcher


  • 2024.03.24: Fixed the label counter
  • 2024.03.24: Added the label counter, and settings that let you exclude folder paths, files, or characters from the counts
  • 2022.09.16: Added requested feature: Menu and choice options counter.
  • 2022.09.09: Added ability to batch equivalent characters and count them as one, as well as entirely hide certain characters from the statistics.
  • 2022.08.16: Release!

↓ If you have any questions or additional feature requests, feel free to comment below! ↓

Updated 13 days ago
Rated 5.0 out of 5 stars
(21 total ratings)
Made withRen'Py
TagsRen'Py, sourcecode, Tutorial
Code licenseMIT License
Asset licenseCreative Commons Zero v1.0 Universal
Average sessionA few seconds


Download NowName your own price

Click download now to get access to the following files:

wordcounter.rpy 8 kB
wordcounter+.rpy 12 kB
if you pay $1 USD or more

Development log


Log in with itch.io to leave a comment.


You're welcome, it helps a lot. I was looking for some file that would do this and stumbled upon this one, which works in the quickest and most practical way possible.

Fairly new to Ren'py and super glad I found this tool before resorting to more annoying measures! I haven't been able to see the results yet, and I'm not sure if it's due to an actual issue, or if it's due to me being a noob. If everything is working right, should the report be an addendum to the "errors.txt" file that pops up after running Check Script (Lint), or should it appear somewhere else that I am not aware of?

If everything works correctly, Ren'py should generate a "lint.txt" file, not an "errors.txt" file. If possible, you can share what it says in the error file and I can help you resolve the issue!


I swear I have some sort of curse that makes code work if I give it 10-12 hours of resting time. Found some errors, tried again, and got the lint.txt file, with the words successfully counted. Thank you for your response and also for this tool in general!

Is there a specific thing I have to do to get it to work, I leave it as is and then select Check Script (Lint) just like it says but I get this

(1 edit)

It's quite likely that you need to update Ren'py, since this is a newer configuration variable. 

Otherwise, you could also try removing "define config.lint_character_statistics = False" on line 33, since it's not actually needed for the counter to work.


This seems way fricking easier than the method I've chosen for myself.

I'm glad it could be of use! Just curious, but what was your method?


Fucking Google Drive and deleting anything that wasn't dialogue/monologue lolol

Hahaha, that was my old approach too, before I got fed up with it and decided to make this tool!


I was doing the exact same thing! 

Thank you so much for this. I just used it and......thank you!

(1 edit) (+1)

Thanks for this! A feature request would be to see how many choices are in the script. (Ex. There are a total of 3 choices, with a total of 11 choice options.) <3


That's a great idea! I'm not sure if I'll actually find a way to do that, but I can definitely try.


Getting the amount of choices should be easy(ish) by counting the "menu:" commands. Getting the # of choice options might be a bit more difficult, but should still be possible.

(1 edit) (+1)

You're right, that turned out to be no issue at all.

Both the number of menus and choices should be available now. Thanks for the suggestion!