Forza painter app with python

Overview

forza-painter

Discord: A-Dawg#0001 (AE)
Supports: Forza Horizon 5
Offically (OTHER v1.405.2.0, MS STORE v3.414.967.0, STEAM v1.414.967.0)
Unofficially (most versions should work)
License: MIT

KNOWN ISSUES (None right now!):

Please contact me on Discord A-Dawg#0001 if you have issues.

What is this for?:

Image → Geometrize → Forza Horizon 5 (Vinyl Group)

Does this work for the Steam version or the Microsoft Store version?

It now supports both! And it should work for older and future releases too thanks to pattern scanning.

How does it work?:

Geometrize breaks the images down into shapes and can export a .json data file.

forza-painter deserializes this .json data file and uses some math, reverse engineering and the Windows API to push these shapes into FH5 automagically.

READ EVERYTHING BELOW BEFORE ASKING FOR HELP

Requirements

  • Geometrize (https://www.geometrize.co.uk/)
  • python 3.9 64-bit (eariler versions may work but untested)
  • The below python packages (just install from the command line):
pip install psutil
pip install pywin32
pip install opencv-python

FAQ:

  • Will this get me banned!?
To preface this:
I take no responsibility for your use of this software.

You may be reported by players if you share the vinyls as they are extremely
detailed. Some players feel that making vinyl groups in this way is unfair as
they have had to suffer through learning the tool and were not able to use an
easy starting point.

This is a completely valid opinion, and with enough time, practice and talent
you CAN recreate extremely complex images. I just don't share the opinion that
you should have to.

As for FH5 detecting this; It is not a "cheat", it is not giving any player
an unfair advantage, it is not modifying game files or game code, and it is
not taking advantage of any exploits.

Interpret that as you feel. I believe this is a missing necessary feature
from the vinyl group designer.
  • My version is older/newer or it isn't working following the steps!
For unsupported versions, forza-painter will scan for a known pattern.
If it fails to find this pattern, it will notify you.
Most versions should work fine, but others may need tweaking.
  • Will you update this to support newer versions?
It should automatically support newer versions providing the memory structures remain similar.
In the event of it failing on a new version I will revise the code.
  • I have an error that I don't understand...
Check the requirements above.
Ensure you have python 3.9 or later installed (make sure it is 64-bit) by running
`python` from the command prompt and that you have installed the python packages.
If you can't manage this, I probably can't help you.
If you are still having problems, contact me on Discord if you wish.
  • Can you make a version that just uses inputs to create the shapes?
I can, but I won't. I've open sourced this for a reason.
Feel free to take it and make changes as you wish as permitted by the MIT licence.
Just throw me [A-Dawg#0001 (AE)] a little credit.
  • My issue is not listed
Feel free to create an issue or contact me on Discord A-Dawg#0001

Making your template Vinyl Groups (reuse these)

  • Open Forza Horizon 5 and create a new Vinyl Group.
  • Just make one sphere and duplicate it for as many layers as you need. Color, size, scale, etc. DO NOT MATTER.
  • Save this as a template as something identifiable e.g. forza-painter 3000 shapes.

Note: When you load these templates the shapes will be grouped, make sure you select them and UNGROUP before using.

Using forza-painter to recreate the .json file (from Geometrize) in Forza Horizon 5:

  • First generate the .json file in Geometrize (see below steps).
  • Open a template with the number of shapes (all spheres) that you desire to represent your geometry (see above steps) then UNGROUP it.
    • e.g. if you load 500 spheres and ungroup, it will only use those 500 spheres
  • Finally, just drag the .json geometry onto the drag_geometry_file_here.bat batch script, python will do the rest.

Using Geometrize to generate your .json geometry:

  • First Disable Image Downscaling in File → Global Preferences → Performance

  • Then after loading any image, use the below settings:

  • Wait for the number of shapes you want to target (1000, 3000 or something smaller if you wish).
  • Finally click the Exporters tab at the bottom of the panel and select Save Grometry Data..

Comments
  • Base square shape (used for masks on the edges) somewhat becomes a circle ?

    Base square shape (used for masks on the edges) somewhat becomes a circle ?

    I've had this happen a few times. The final vinyl goup, instead of being square has a "pillow" shape. If I go all the way up and look at the mask shapes used for the borders, that are supposed to be squares, they do use the first (top left) vinyl shape available, but instead of being a square, it's a circle, somehow. Any idea what is happening here ? Is it a bug on Forza's end ?

    opened by SBRK 1
  • Files not appearing

    Files not appearing

    When i download the file i cant find ( 1. drag_image_file_here.bat ) and ( 2. drag_geometry_json_here.bat ) files, can anyone help me find the solution please?]

    opened by hza3als 1
  • OSError: [WinError 998] Invalid access to memory location.

    OSError: [WinError 998] Invalid access to memory location.

    Game crashes and the import fails with an OSError 998.

    Python 3.10.1 [MSC v.1929 64 bit (AMD64)] on win32

    • Steam version
    • Game was open
    • Had my 500 layer template open in Vinyl Editor (not livery editor)
    • All layers ungrouped

    <class 'OSError'> Traceback (most recent call last): File "C:\Users\user\Downloads\Games\Forza\forza-painter-master\main.py", line 219, in <module> main(sys.argv) File "C:\Users\user\Downloads\Games\Forza\forza-painter-master\main.py", line 207, in main draw_memory_shape(pid, shape, i, cLiveryLayerTable, current_livery_count) File "C:\Users\user\Downloads\Games\Forza\forza-painter-master\main.py", line 73, in draw_memory_shape write_process_memory(pid, current_layer_address + 0x18, pos_data) File "C:\Users\user\Downloads\Games\Forza\forza-painter-master\native.py", line 84, in write_process_memory kernel32.WriteProcessMemory(hProcess, address, buf, len(buf), File "C:\Users\user\Downloads\Games\Forza\forza-painter-master\native.py", line 26, in _check_zero raise ctypes.WinError(ctypes.get_last_error()) OSError: [WinError 998] Invalid access to memory location.

    opened by quinnell 1
  • error: 1copy saveAt + 944layers limit save.

    error: 1copy saveAt + 944layers limit save.

    Most setting seems to stop at 944 layers and it only save the 1st copy of setting set, eg:

    saveAt = 500,1000,1500,2000,2500,3000 only layer 500 is saved. program end at 3000, but main copy saved at 944layers,

    Suggestion: instead of selecting quality, keep all setting at "e. super slow - best quality" but selection on layers to stop, using common layers. 500, 700, 1000, 1200, 1500, 1700, 2000

    the reason: The lesser prompt the better. layer quality should be at max, due to layer limitation on FH. No extra effort to monitor script once its triggered.

    opened by febeus 0
  • Question on reduction of layers

    Question on reduction of layers

    Hi,

    So, I love your tool and as suggested, reduce the imagesize with minimal loss of quality with both/either photoshop to get rid of backgrounds and such, followed by reducing the size with tools like RIOT. But no matter how small I try to get the images and no matter what option I pick in your tool (or manually try to edit a setting with wordpad), I cannot get the layers to be like 100 and still look perfect, which is what I see with many quality layers in the Horizon 'workshop' in-game. I can only achieve that with 1000+ layers, even for small ones like....let's says this logo which is 900x900 and 36 kb so no need to reduce anything other than getting rid of the black background. Now it's 169 kb and I changed it from jpg to png (is this the issue?) and reduced it a bit to 139 kb.

    I picked option 6 Now I have to run, will be back later and see how the ~100 / ~300 layers look but will post now, maybe you or someone else have tips.

    Thanks! Greets from the Netherlands.

    opened by nlx78 0
  • Ill Pay Only For This To Become Open Source

    Ill Pay Only For This To Become Open Source

    Hey, If You Didnt Know Me Well Nows Your Chance! Ive Been A Private Developer For Custom Forza Automation And Tools For A Few Years Now, But These Need To Remain Private And Closed Source For A Reason (Mainly Due To The Major Cheating Issue Itll Cause & Possible Security Issues) But I See 0 Issue With Going Open Source With Forza Painter, This Will Also Give You Free Help With The Project By Developers Such As Myself That Are Interested In Projects Such As This :)

    Keep Up The Good Work, Hope To Help Out Soon :)

    opened by dr-NHA 2
  • Is there a way to reverse the operation?

    Is there a way to reverse the operation?

    Let's say I want to take a vinyl group from my Steam version of Forza Horizon 4 and then import it into my Forza Horizon 5 save on the Xbox app. Is there a way to make the program read each shape, color, position, size, and such on one version and create a .json file similar to the normal painter, then put that into the painter on the other version then have it recreate the vinyl group there?

    opened by TheScienceNerd 1
  • Can forza painter exploit GPU?

    Can forza painter exploit GPU?

    I think this program only utilise CPU to generate json file since my GPU is not busy. Can it be optimised to make best of GPU so that the completion time may be reduced?

    enhancement 
    opened by CallMeSaltyFish 1
Owner
null
Create a QR-code Generator app using only Python.

QR-code_Generator Create a QR-code Generator app using only Python. This apps generated a QR code for a single link. Libraryes used in this app --> py

Soham P Phasalkar 1 Oct 17, 2021
Image Compression GUI APP Python: PyQt5

Image Compression GUI APP Image Compression GUI APP Python: PyQt5 Use : f5 or debug or simply run it on your ids(vscode , pycham, anaconda etc.) socia

Sourabh Dhalia 1 May 21, 2022
Design custom QR codes with this web app!

My-QR.Art This web app lets users design their own QR codes to any domain. It can be acessed on my-qr.art. You can find some more background info abou

Marien Raat 406 Dec 20, 2022
Plots is a graph plotting app for GNOME.

Plots is a graph plotting app for GNOME. Plots makes it easy to visualise mathematical formulae. In addition to basic arithmetic operations, it supports trigonometric, hyperbolic, exponential and logarithmic functions, as well as arbitrary sums and products.Plots is designed to integrate well with the GNOME desktop and takes advantage of modern hardware using OpenGL, and currently supports OpenGL 3.3+.

Alex Huntley 138 Dec 14, 2022
Glyphtracer is an app for converting images of letters to a font

Glyphtracer takes an image that contains pictures of several letters. It recognizes all them and lets the user tag each letter to a Unicode code point. It then converts the images to vector form and writes them to a FontForge's data format. The font can then be finalized with FontForge.

Jussi Pakkanen 38 Dec 24, 2022
This Web App lets you convert your Normal Image to a SKETCHED one within a minute

This Web App lets you convert your Normal Image to a SKETCHED one within a minute

Avinash M 25 Nov 10, 2022
This is an app that allows users to upload photos and display and store the photos in a file until the user deletes them.

Qt Photo App This is an app that allows users to upload photos and display and store the photos in a file until the user deletes them. Setup python3 -

Kathy Yang 5 Jan 22, 2022
This app finds duplicate to near duplicate images by generating a hash value for each image stored with a specialized data structure called VP-Tree which makes searching an image on a dataset of 100Ks almost instantanious

Offline Reverse Image Search Overview This app finds duplicate to near duplicate images by generating a hash value for each image stored with a specia

null 53 Nov 15, 2022
Simple AI app that is guessing color of apple in picture

Apple Color Determinant Application that is guessing color of apple from image Install Pillow, sklearn and numpy, using command for your package manag

Gleb Nikitin 1 Oct 25, 2021
Qrgenerator - A qr generator app using python3

qrgenerator by Mal4D Hi welcome into qr code generator using python by Mal4d Lin

Mal4D 1 Jan 9, 2022
㊙️ Create standard barcodes with Python. No external dependencies. 100% Organic Python.

python-barcode python-barcode provides a simple way to create barcodes in Python. There are no external dependencies when generating SVG files. Pillow

Hugo Barrera 419 Dec 26, 2022
Generative Art Synthesizer - a python program that generates python programs that generates generative art

GAS - Generative Art Synthesizer Generative Art Synthesizer - a python program that generates python programs that generates generative art. Examples

Alexey Borsky 43 Dec 3, 2022
Nudity detection with Python

nude.py About Nudity detection with Python. Port of nude.js to Python. Installation from pip: $ pip install --upgrade nudepy from easy_install: $ eas

Hideo Hattori 881 Jan 6, 2023
Python avatar generator for absolute nerds

pagan Welcome to the Python Avatar Generator for Absolute Nerds. Current version: 0.4.3 View the change history here. Remember those good old days whe

David Bothe 280 Dec 16, 2022
The friendly PIL fork (Python Imaging Library)

Pillow Python Imaging Library (Fork) Pillow is the friendly PIL fork by Alex Clark and Contributors. PIL is the Python Imaging Library by Fredrik Lund

Pillow 10.4k Dec 31, 2022
Python QR Code image generator

Pure python QR Code generator Generate QR codes. For a standard install (which will include pillow for generating images), run: pip install qrcode[pil

Lincoln Loop 3.5k Dec 31, 2022
python binding for libvips using cffi

README PyPI package: https://pypi.python.org/pypi/pyvips conda package: https://anaconda.org/conda-forge/pyvips We have formatted docs online here: ht

libvips 467 Dec 30, 2022
The ctypes-based simple ImageMagick binding for Python

Wand Wand is a ctypes-based simple ImageMagick binding for Python, supporting 2.7, 3.3+, and PyPy. All functionalities of MagickWand API are implement

Eric McConville 1.2k Dec 30, 2022
Bringing vtk.js into Dash and Python

Dash VTK Dash VTK lets you integrate the vtk.js visualization pipeline directly into your Dash app. It is powered by react-vtk-js. Docs Demo Explorer

Plotly 88 Nov 29, 2022