No description
  • Python 99.3%
  • Batchfile 0.7%
Find a file
Lassi Eloranta d86f0bc405 Initial commit
2026-05-20 11:19:24 +03:00
fd6 Initial commit 2026-05-20 11:19:24 +03:00
fonts Initial commit 2026-05-20 11:19:24 +03:00
tests Initial commit 2026-05-20 11:19:24 +03:00
tools Initial commit 2026-05-20 11:19:24 +03:00
AppIconTransparent.png Initial commit 2026-05-20 11:19:24 +03:00
BlossomParticle.png Initial commit 2026-05-20 11:19:24 +03:00
Blue.png Initial commit 2026-05-20 11:19:24 +03:00
build_exe.bat Initial commit 2026-05-20 11:19:24 +03:00
Green.png Initial commit 2026-05-20 11:19:24 +03:00
LICENSE Initial commit 2026-05-20 11:19:24 +03:00
Orange.png Initial commit 2026-05-20 11:19:24 +03:00
Pink.png Initial commit 2026-05-20 11:19:24 +03:00
Purple.png Initial commit 2026-05-20 11:19:24 +03:00
pyproject.toml Initial commit 2026-05-20 11:19:24 +03:00
README.md Initial commit 2026-05-20 11:19:24 +03:00
requirements.txt Initial commit 2026-05-20 11:19:24 +03:00
run.bat Initial commit 2026-05-20 11:19:24 +03:00
Song1OpenSource.mp3 Initial commit 2026-05-20 11:19:24 +03:00
Song2OpenSource.mp3 Initial commit 2026-05-20 11:19:24 +03:00
Song3OpenSource.mp3 Initial commit 2026-05-20 11:19:24 +03:00
SplashScreen.mp4 Initial commit 2026-05-20 11:19:24 +03:00
Yellow.png Initial commit 2026-05-20 11:19:24 +03:00

Forza Designer 6 (FD6)

Forza Designer 6 splash

Watch the FD6 trailer
▶ Trailer / tutorial on YouTube

FD6 badge

Convert any image into a vinyl group for Forza Horizon 3, 4, 5, or 6.

Repo: https://github.com/tokyubevoxelverse/ForzaDesigner6 · License: MIT · Windows 10/11 x64


Install

  1. Download FD6.exe from Releases.
  2. Double-click — no installer, no admin rights. Windows SmartScreen → "More info" → "Run anyway".

Source build: Python 3.10+, pip install -r requirements.txt. Microsoft Visual C++ Redistributable is normally already installed; if FD6 fails to launch, grab it here.


How to use

Generate:

  1. Launch FD6.exe. Click Upload Image… and pick a JPEG/PNG.
  2. Right panel: pick a Profile (balanced recommended) and Stop at shapes (1500 or 3000 typical).
  3. Click Start. Watch the live preview rebuild your image. The JSON auto-saves next to your source image when done.

Inject:

  1. Launch your target game (Forza Horizon 3, 4, 5, or 6) and open the Vinyl Group editor.
  2. Load a vinyl group with at least N spheres, where N is the shape count of your JSON. Keep saved 1500-sphere / 3000-sphere templates for reuse — fastest path is a fresh untouched template.
  3. In FD6: pick your target from the Target dropdown, click Upload JSON, then Inject into [game].
  4. Watch the dialog progress. Do not click anything in FD6 or the game during injection — interacting can reallocate the in-game memory mid-write and fail the operation.
  5. When the status turns 🟢 green, the vinyl group has been painted with your shapes.

Re-injecting onto an already-painted template works too — the locator falls back to an RTTI vtable scan when the fresh-sphere fingerprint misses. Expect an extra 25 minutes on the first re-injection scan per game session; subsequent ones are instant.


Do / Don't

  • Do open the game's vinyl editor before clicking Inject.
  • Do keep one or two sphere templates saved for fast re-use.
  • Do wait for the green status — large-game scans can take minutes.
  • Don't edit, add, delete, or move shapes in-game during an active injection.
  • Don't click anything in FD6 during the RTTI fallback phase. Windows may label it "Not Responding"; it isn't — let it finish.
  • Don't close the game mid-injection or run FD6 as admin.

Troubleshooting

Problem Fix
Splash video hangs Click anywhere or press Esc. A hard 30 s auto-skip is always active.
"No confident match" error Vinyl editor not open, or template doesn't have enough spheres for the JSON's shape count. Load a bigger template.
Re-injection scan looks stalled RTTI fallback phase can run silently for 25 min on a large game. The dialog resumes once a candidate is located.
Shapes offset or wrong scale File an issue with the JSON, the source image, and a screenshot of the in-game result.
Game patched, all candidates rejected The per-game struct offset may have shifted. Open an issue — the profile in fd6/inject/game_profiles.py needs updating.

Build from source

git clone https://github.com/tokyubevoxelverse/ForzaDesigner6.git
cd ForzaDesigner6
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt

python -m fd6                # run from source
pytest                       # run tests
.\build_exe.bat              # → dist/FD6.exe

Credits

Inspired by:

  • forza-painter by the_adawg (FH4/FH5 — MIT)
  • geometrize-lib by Sam Twidale (MIT)
  • Primitive by Michael Fogleman (MIT)
  • bvzrays' publicly available forza-painter-fh6 (MIT). FD6 uses his published research for: the CLiveryGroup struct field offsets, the (X, Y) position convention and 63 / 127 scale divisors, the confirmation that FH5 and FH6 share the same struct layout (which made FH3/FH4/FH5 support feasible), and the MSVC RTTI vtable-scan locator approach (FD6's rtti_locator.py looks up .?AVCLiveryGroup@@ by C++ type). FD6 does not ship or load community-distributed forza-codes.dat runtime pattern files — only the single baseline RTTI class name is hardcoded.

The FH6 vinyl-group memory layout was independently reverse-engineered from scratch for this project against FH6 build 354.221 and later cross-validated against bvzrays' research; the two derivations matched on every field offset. The sphere-template injection workflow (load a fresh sphere group → fingerprint-locate it in memory → overwrite each sphere's bytes in place) and the strict 5/5 + 95% full-table validation gate are FD6 originals; both stay as the primary locator path, with RTTI vtable scan as the secondary fallback for re-injection onto already-painted templates.


License

MIT — free for any use with attribution.