Tool Fast Automated Patch Set Generator - F.A.P.S.

AcTePuKc

Member
Dec 2, 2020
118
103
Tool Name: F.A.P.S. – Fast Automated Patch Set Generator

What It Does:

Compare two versions of a Ren'Py game (or any folder-based project) and generate a patch with only the changed files. Perfect for modders, translators, and devs distributing updates.

Why?
So (other) players don’t have to redownload 2GB for 2 changed .rpy files.

Features:
✅ Detects NEW and MODIFIED files with high accuracy (checksum-based by default)
✅ Keeps folder structure intact when building patches
✅ Optional .diff files for comparing changes in text-based files (like .rpy, .txt, .json)
✅ Optionally compresses output into a ready-to-upload .zip
✅ Glob-based ignore patterns (e.g., skip logs, cache, etc.)
✅ Uses descriptive folder names like patch_v0.6.1_to_v0.6.2_timestamp
✅ Supports existing .csv/.tsv
✅ Does NOT delete anything – existing files in the target game folder stay untouched
✅ GUI-based and beginner-friendly — no CLI skills needed
✅ Should works on Windows/Linux/Mac out of the box (Requires Python 3.9+ installed - that's it)


Tested Use Cases:

✅ Updating Ren'Py games between releases
❌ Shipping translation packs or hotfixes
❌ Distributing small changes for large file-based projects
❌ Creating version diff logs for code/scripts

Most of the code was created with a little help from AI (vibe-coded, not fully copy-pasted).
If something breaks, or you’ve got ideas for new features — drop a message, I’ll try to respond or fix it when I can.


You don't have permission to view the spoiler content. Log in or register now.

You don't have permission to view the spoiler content. Log in or register now.

Download: [This F95 thread]

⚠ Might trigger your antivirus (false positive). The EXE is bundled with PyInstaller/Nutika and unsigned — totally normal.
If you're paranoid (me too), feel free to scan it yourself:

SHA-256 (EXE / PyInstaller):
60576e18c45f69d3ed0a106827ce32f9b8c19754533b02b30d8779a98c57b330

SHA-256 (EXE / Nuitka — onefile):
31e2223437c36214d3d8168874e6b3a0060e54ed0000cefb9e71570a239701ed

SHA-256 (ZIP / Python script version):
3839d331b0927168a43b01773f40dd7517948aeac7be0dce8355e7458933b00b

F.A.P.S. — Because wasting bandwidth is so last patch.
 
Last edited:

Surgy

Member
Modder
Apr 23, 2018
394
1,661
I'll try it since there are some nice perks. But generally is already good for this: it's very fast, even on large source files; it produces small diffs; and it can do file or folder diffs, allowing you to create a micro-patcher that basically converts one folder into another (updated).
 

AcTePuKc

Member
Dec 2, 2020
118
103
I'll try it since there are some nice perks. But generally is already good for this: it's very fast, even on large source files; it produces small diffs; and it can do file or folder diffs, allowing you to create a micro-patcher that basically converts one folder into another (updated).
Oh, thank you for pointing that tool out — I didn’t know about HDiffPatch before and just checked it out. Definitely solid stuff (might even give me more ideas — APKs are basically ZIPs, after all). Really impressive how optimized it is.

That said, I’m taking a slightly different route — not going CLI-first like HDiffPatch, but building around a simple UI for regular users (uploaders, devs, etc). CLI might still happen later, or if someone wants to contribute — I’m planning to upload the project to GitHub once I finish all the recent changes.

I’ve also updated the app to use PySide6 instead of Tkinter, which means I can now publish it properly as .exe, .msi, or whatever else is needed.

Right now I’m also working on full ZIP and .rpa extraction, so you won’t even need the game unpacked anymore to make a patch — just drag, drop, and go.

For now, I'm focusing only on Ren'Py-based games — most other engines already have built-in patch/update systems, or at least proper version control. Unless the dev skips that too... then yeah, chaos