Skip to content

DuBistMutig/forza-painter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Forza Painter logo

Forza Painter

Image to Forza Horizon Vinyl Group generator and importer.

English · 中文 · 한국어

v1.0.0 · Windows · Forza Horizon 5 / 6 · GPU/OpenCL · One-file EXE

Convert PNG/JPG/BMP images into Forza Horizon Vinyl Group layers. The app handles generation, preview, and import in one desktop window; end users do not need Python, Node, or manual memory addresses - just the EXE.

Download the EXE: get the latest forza-painter-*.exe from Releases and run it directly.

If the result looks blurry: raise Random samples first. Values above 200000 make a noticeable quality jump; higher values are crisper but take much longer to generate.

Import can take time: Forza Painter tries multiple template locators and may spend up to 5 minutes finding the safe layer table. Keep Forza in Vinyl Group Editor, do not switch menus, and export the activity log if it still fails.

What it does Details
Generate designs Turn images into geometry files using the bundled GPU/OpenCL generator.
Preview output Show source and generated geometry previews inside the app.
Import into Forza Push a design into the currently open Vinyl Group Editor in FH5/FH6.
Safe workflow Auto-locate and verify the editable layer table before writing anything.
Update check Check for new versions on startup and link to the latest release page.

Quick Start

  1. Download the latest forza-painter-*.exe from Releases.
  2. Put the EXE in a normal writable folder, for example Desktop/forza-painter.
  3. Double-click the EXE. Run as administrator if Windows blocks process access.
  4. In Forza Horizon, open Create Vinyl Group / Vinyl Group Editor, load a sphere template, then Ungroup it.
  5. In the app, generate a design, open the Import page, enter the exact template layer count, then click Import design.

Do not download GitHub's automatic Source code ZIP unless you are developing the project. Normal users only need the EXE.

Preview

App import page
App import page
FH6 template ready
Template ready in FH6
FH6 import result
Imported result
FH6 car applied result
Applied to car

Generate a Design

  1. Open the Generate page.
  2. Click Add image and pick a PNG, JPG or BMP.
  3. Choose a quality preset (see table below).
  4. Optional: turn on Custom to fine-tune layer count, resolution, and samples.
  5. Click Start generating and wait for the preview to update.

Generated files are saved beside the source image as image.<layer>.json checkpoints (e.g. image.500.json, image.1000.json).

Pick the checkpoint that matches your in-game template. A 500-layer JSON in a 3000-layer template will look blurry; always prefer the highest-layer file that fits.

Preset Output layers Random samples Use case
Composition Check 500 30,000 Quick framing/color check
Quick Draft 1,000 60,000 Rough but usable result
Standard 1,800 120,000 Recommended default
Detailed 2,500 220,000 Cleaner shapes
High Detail 3,000 350,000 Near-max detail, slow
Reference Quality 2,900 1,000,000 Highest fidelity, very slow

Import a Design

  1. Start Forza Horizon and keep Create Vinyl Group open.
  2. Load or create a template made from many simple sphere layers, then Ungroup it.
  3. In the app, open Import, click Refresh, and pick forzahorizon6.exe (or forzahorizon5.exe).
  4. Enter the exact in-game template layer count.
  5. Click Use last result to grab the JSON you just generated, or Add file to pick one from disk.
  6. Leave the advanced address fields empty and click Import design.

Forza reserves 4 extra boundary layers for the cover/apply bounds. A 1,000-layer JSON needs at least a 1,004-layer template; a 3,000-layer template can hold ~2,996 drawable shapes.

Important Rules

  • The in-game template must be ungrouped before import.
  • The layer count in the app must exactly match the game.
  • Do not switch game menus while importing.
  • After restarting Forza, reloading the template, or changing layer count, import again with the new correct count.
  • If the JSON has fewer layers than the template, unused template layers are hidden.
  • If the JSON has more layers than the template, extra shapes are trimmed.
  • Transparent PNG backgrounds are not imported as visible backgrounds.

Runtime Files

Forza Painter keeps normal runtime data alongside the EXE in two folders. The app prints the exact paths to the activity log on startup and on the Tools page.

  • runtime/ - logs, session data, and temporary files.
  • webui-data/ - local browser/UI cache.

Delete these folders when the app is closed to reset local runtime data.

Troubleshooting

  • EXE will not import into the game: close the app and run the EXE as administrator.
  • GPU/OpenCL error: update your NVIDIA/AMD/Intel graphics driver. The bundled generator uses OpenCL.
  • Template cannot be located: confirm you are in Vinyl Group Editor, the template is ungrouped, the layer count is exact, and you did not switch menus during scanning.
  • Imported result is blurry: use a higher-layer JSON, or raise Output layers / Random samples in Custom.
  • Need help debugging: use Export log in the app and attach the log to an issue.

Build from Source

You only need this section if you want to modify Forza Painter or build the EXE yourself. End users should just download the release EXE.

Prerequisites

Clone and install

git clone https://github.com/DuBistMutig/forza-painter.git
cd forza-painter

python -m venv .venv
python -m pip install --upgrade pip
pip install -r requirements.txt

cd webui
npm install
npm run build
cd ..

The pip install --upgrade pip step is important on fresh Python installs - the default pip on Python 3.11 is old enough to fall back to legacy installers that don't work with some packages.

Run from source

python src/app.py

This opens the same GUI as the release EXE, served from webui/dist/.

When to rebuild what

  • Edited Python in src/ -> just re-run python src/app.py.
  • Edited anything in webui/src/ -> cd webui && npm run build && cd .. before re-running.
  • Pulled changes that touch webui/package.json -> run npm install inside webui/ again before building.

Build the one-file EXE

Requires the .venv/ from the Clone and install step above.

powershell -ExecutionPolicy Bypass -File scripts/make_exe_release.ps1

The script rebuilds the web UI and runs PyInstaller, producing dist/forza-painter-v<version>.exe plus a ZIP package. End users only need that EXE.

Resources

Credits

Forza Painter is a fork of bvzrays/forza-painter-fh6, which itself builds on forza-painter/forza-painter by AE (A-Dawg#0001). The bundled GPU generator is based on forza-painter-geometrize-gpu by 神龟. This fork rebuilds the desktop UI and packaging while keeping the original memory-import core intact.

All upstream components are MIT-licensed - see LICENSE for the full notices.

About

Vinyl Painter Import Tool for FH6. Featuring GPU-accelerated generation, import & modern UI. Based on forza-painter

Topics

Resources

License

Stars

Watchers

Forks

Contributors