[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-77389":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":25,"hasPages":23,"topics":26,"createdAt":10,"pushedAt":10,"updatedAt":27,"readmeContent":28,"aiSummary":29,"trendingCount":16,"starSnapshotCount":16,"syncStatus":14,"lastSyncTime":30,"discoverSource":31},77389,"forza-painter-fh6","bvzrays\u002Fforza-painter-fh6","bvzrays","Vinyl Painter Import Tool for FH6. Featuring GPU-accelerated generation & import. Based on forza-painter","",null,"Python",379,37,2,7,0,4,39,330,21,82.24,"Other",false,"main",true,[],"2026-06-12 04:01:21","\u003Cp align=\"center\">\n  \u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Fd4f48f71-d76e-4ffe-9fb1-0b075d79bf05\" alt=\"forza-painter FH6 logo\" width=\"720\">\n\u003C\u002Fp>\n\n\u003Ch1 align=\"center\">forza-painter FH6\u003C\u002Fh1>\n\n\u003Cp align=\"center\">\n  \u003Cstrong>Image to Forza Horizon 6 Vinyl Group generator and importer.\u003C\u002Fstrong>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"README.md\">English\u003C\u002Fa> ·\n  \u003Ca href=\"README.zh-CN.md\">中文\u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ccode>v1.2.0\u003C\u002Fcode> · \u003Ccode>Windows\u003C\u002Fcode> · \u003Ccode>Forza Horizon 6\u003C\u002Fcode> · \u003Ccode>GPU\u002FOpenCL\u003C\u002Fcode>\n\u003C\u002Fp>\n\nGenerate Forza Horizon 6 Vinyl Group layers from PNG\u002FJPG\u002FBMP images. The desktop app handles generation, preview, and import in one place; normal users do not need to type memory addresses.\n\n> **If the result looks blurry:** raise `Random samples` first. Values above **200000** usually make a major quality difference; higher values are clearer but take much longer to generate.\n\n| What it does | Details |\n| --- | --- |\n| Generate JSON | Convert images into geometry JSON with the bundled GPU\u002FOpenCL generator. |\n| Preview output | Show source and generated geometry previews inside the app. |\n| Import to FH6 | Import JSON into the currently open FH6 Vinyl Group Editor. |\n| Safe FH6 workflow | Auto-locate and verify the current editable layer table before writing. |\n\n## Resources\n\n- Import walkthrough video: https:\u002F\u002Fwww.bilibili.com\u002Fvideo\u002FBV1hG5Z6nENZ\n- Bundled GPU generator source\u002Freference: https:\u002F\u002Fgithub.com\u002Fzjl88858\u002Fforza-painter-geometrize-gpu\n\n## Preview\n\n\u003Ctable>\n  \u003Ctr>\n    \u003Ctd align=\"center\" width=\"50%\">\n      \u003Cimg src=\"docs\u002Fscreenshots\u002Fapp-import-preview.png\" alt=\"App import page\">\u003Cbr>\n      \u003Cstrong>App import page\u003C\u002Fstrong>\n    \u003C\u002Ftd>\n    \u003Ctd align=\"center\" width=\"50%\">\n      \u003Cimg src=\"docs\u002Fscreenshots\u002Ffh6-template-ready.png\" alt=\"FH6 template ready\">\u003Cbr>\n      \u003Cstrong>Template ready in FH6\u003C\u002Fstrong>\n    \u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd align=\"center\" width=\"50%\">\n      \u003Cimg src=\"docs\u002Fscreenshots\u002Ffh6-import-result.png\" alt=\"FH6 import result\">\u003Cbr>\n      \u003Cstrong>Imported result\u003C\u002Fstrong>\n    \u003C\u002Ftd>\n    \u003Ctd align=\"center\" width=\"50%\">\n      \u003Cimg src=\"docs\u002Fscreenshots\u002Ffh6-car-applied.png\" alt=\"FH6 car applied result\">\u003Cbr>\n      \u003Cstrong>Applied to car\u003C\u002Fstrong>\n    \u003C\u002Ftd>\n  \u003C\u002Ftr>\n\u003C\u002Ftable>\n\n## Quick Start\n\n1. Download this repository as a ZIP and extract it.\n2. Install 64-bit Python. Python 3.12 is recommended.\n3. Double-click `install_dependencies.bat`.\n4. Double-click `start_app.bat`.\n5. In FH6, open Vinyl Group Editor, load a sphere template, then Ungroup it.\n6. Generate JSON in the app, open the Import page, enter the template layer count, then import.\n\n## Setup\n\nMost users only need to run:\n\n```text\ninstall_dependencies.bat\nstart_app.bat\n```\n\nIf the app does not start, run:\n\n```text\ncheck_environment.bat\n```\n\nThe core Python app only needs `psutil` and `pywin32`. Image\u002FJSON preview uses optional NumPy\u002FOpenCV dependencies; the installer may skip them on Python versions where preview packages are likely to conflict.\n\n## Generate JSON\n\n1. Open the `Generate JSON` page.\n2. Click `Add images` and choose PNG\u002FJPG\u002FBMP images.\n3. Select a quality preset.\n4. Optional: enable `Use custom settings` to change output layers, resolution, random samples, and mutated samples in the app.\n5. Click the fixed bottom `Start generating` button.\n6. Wait for the preview and logs to update.\n\nGenerated files are saved beside the source image, for example:\n\n```text\nimage.500.json\nimage.1000.json\nimage.3000.json\n```\n\nOne image can generate multiple checkpoint JSON files. Prefer the highest-layer JSON that matches your template; for example, use `image.3000.json` or the final `image.json` with a 3000-layer template. Importing a 500-layer JSON into a 3000-layer template will look blurry.\n\nCurrent preset differences:\n\n| Preset | Output layers | Random samples | Use case |\n| --- | ---: | ---: | --- |\n| extremely fast | 500 | 30000 | Quick composition checks |\n| fast | 1000 | 60000 | Quick usable drafts |\n| balanced | 1800 | 120000 | Recommended default |\n| slow | 2500 | 220000 | Final quality; starts using the 200k+ quality range |\n| super slow | 3000 | 350000 | Best clarity, very slow |\n\n## Quality And Custom Settings\n\nLater presets are usually slower and cleaner.\n\n- `extremely fast`: quick composition tests.\n- `fast`: quick usable output.\n- `balanced`: recommended default.\n- `slow`: higher quality and 200k+ random samples.\n- `super slow`: slowest bundled preset for final output.\n\nCustom settings only affect the current run. Common fields:\n\n- `Output layers`: maximum layer count.\n- `Max resolution`: maximum processing resolution.\n- `Random samples`: more candidates, slower generation.\n- `Mutated samples`: more optimization, slower generation.\n- `Save checkpoints`: JSON checkpoints to save, for example `500,1000,1500,3000`.\n\n## Prepare FH6\n\n1. Start Forza Horizon 6.\n2. Open `Create Vinyl Group` \u002F `Vinyl Group Editor`.\n3. Load a template made from many simple sphere layers.\n4. `Ungroup` the template.\n5. Remember the exact layer count shown in game.\n6. Keep this editor open while importing.\n\nRecommended template size: 500 to 3000 layers.\n\n## Import JSON\n\n1. Open the `Import` page.\n2. Click `Refresh` and select the running `forzahorizon6.exe`.\n3. Enter the current in-game template layer count.\n4. Add the generated `.json`, or click `Use generated JSON`.\n5. Leave advanced address fields empty.\n6. Click `Import JSON`.\n\nThe app locates and verifies the current FH6 layer table before writing. If the target cannot be verified safely, it stops before writing.\n\n> FH needs 4 extra boundary layers to save the cover and apply bounds correctly.  \n> Example: a 1000-layer JSON should use at least a 1004-layer template; a 3000-layer template can import about 2996 drawable shapes.\n\n## Rules\n\n- The template must be ungrouped.\n- The layer count in the app must exactly match the game.\n- Do not switch game menus while importing.\n- After restarting the game, reloading the template, or changing layer count, import again with the new correct count.\n- If JSON has fewer layers than the template, unused template layers are hidden.\n- If JSON has more layers than the template, extra shapes are trimmed.\n- If the imported image looks blurry, you probably imported a low-layer checkpoint or generated too few output layers.\n- Transparent PNG backgrounds are not imported as visible backgrounds.\n\n## Changelog\n\n### v1.2.0 \u002F 2026-05-20\n\n- Updated the app version to `v1.2.0`; release packages now use `forza-painter-fh6-v1.2.0.zip`.\n- Updated the bundled GPU\u002FOpenCL generator to upstream `canary-26052001`, including the OpenCL slot deadlock fix, progressive scale decay, and occluded-geometry recycling.\n- Added explicit `forceOpaqueShapes = true` to bundled and custom generation settings for compatibility with the current generator.\n- Refreshed the README layout with a centered logo, clearer resource links, and a compact preview grid.\n\n### v1.1.1 \u002F 2026-05-20\n\n- Added centralized version management. The window title, command-line `--version`, and release package name now use `v1.1.1`.\n- Reorganized the repository layout: source code moved to `src\u002F`, the generator moved to `bin\u002F`, presets moved to `config\u002Fsettings\u002F`, and release scripts moved to `scripts\u002F`.\n- Updated the release script to build `forza-painter-fh6-v1.1.1.zip` and exclude caches, logs, and `__pycache__`.\n- Merged license notices into the root `LICENSE`, including the bundled GPU\u002FOpenCL generator notice.\n- Added a `Stop current generation` button so the current GPU generator can be stopped safely.\n- Added ETA display for generation progress, using rolling speed and smoothing to avoid large ETA jumps.\n- Fixed a shutdown issue where the GPU generator could keep running after the app window was closed.\n- Retuned bundled quality presets with clearer layer, random sample, and resolution tiers; added the `I hate my GPU` heavy preset.\n\n### 2026-05-19\n\n- The GPU\u002FOpenCL generator was updated to the upstream canary build to improve transparent PNG edges and large overhang artifacts.\n- Import and preview now normalize geometry JSON first, improving compatibility with common legacy forza-painter JSON field formats.\n\n### 2026-05-18\n\n- JSON generation now uses the bundled GPU\u002FOpenCL generator to reduce artifacts from the old generator.\n- The app now uses a standalone desktop window with generation, import, preview, and tutorial pages in one place.\n- The Generate page has quality presets plus in-app custom settings, so users no longer need to edit config files manually.\n- The Import page is simplified for normal users: select the game process, enter the template layer count, choose JSON, then import.\n- Fixed an FH6 issue where the design was visible in the editor but saved with a blank cover, pasted blank onto the car, or appeared blank after copying to another vinyl.\n- FH import now reserves 4 boundary layers so FH can calculate the saved cover and apply bounds correctly.\n- Added environment checks and troubleshooting notes for Python, OpenCL, permissions, and optional preview dependencies.\n\n## Troubleshooting\n\n### GPU Generator Or OpenCL Error\n\nUpdate the NVIDIA\u002FAMD\u002FIntel graphics driver. The bundled generator is `bin\u002Fforza-painter-geometrize-go.exe` and uses OpenCL.\n\n### Python Or Dependency Error\n\nRun:\n\n```powershell\ninstall_dependencies.bat\n```\n\nThen run:\n\n```powershell\ncheck_environment.bat\n```\n\n`Core OK` means the Python dependencies are installed.\n\n### `_ARRAY_API not found`, NumPy, Or OpenCV Error\n\nThis is an optional preview dependency issue. It does not block JSON generation or FH6 import. Reinstall core dependencies first:\n\n```powershell\npython -m pip install -r requirements.txt\n```\n\n### `OpenProcess` Or Permission Error\n\nClose the app and run `start_app.bat` as administrator.\n\nJSON generation does not need administrator permission. FH6 import usually does.\n\n### Game Process Not Found\n\nStart FH6 first, then click `Refresh`. If it still does not appear, restart the app.\n\n### No Safe Template Found\n\nCheck:\n\n- You are in Vinyl Group Editor.\n- The template is ungrouped.\n- The layer count is exact.\n- You did not switch menus after entering the count.\n\n### Import Looks Cut Off\n\nThe template has too few layers. Use a larger template or generate fewer JSON layers.\n\n## Files\n\nMost users only need:\n\n- `install_dependencies.bat`: install Python dependencies.\n- `start_app.bat`: start the app.\n- `check_environment.bat`: check the environment.\n- `clean_runtime_data.bat`: remove runtime caches before publishing or re-zipping.\n- `1. drag_image_file_here.bat`: optional shortcut for dragging an image into the app.\n\nDo not publish runtime cache folders such as `webui-data`, `runtime`, `__pycache__`, or `dist`.\n\n## Directory Layout\n\n- `src\u002F`: application source code; normal users do not need to open it.\n- `bin\u002F`: bundled GPU\u002FOpenCL generator.\n- `config\u002Fsettings\u002F`: generation quality presets.\n- `assets\u002F`: sample assets.\n- `docs\u002Fscreenshots\u002F`: screenshots used by the README.\n- `scripts\u002F`: development and release scripts.\n","forza-painter FH6 是一个将图片转换为《极限竞速：地平线6》（Forza Horizon 6）贴花组的工具。它通过集成的GPU\u002FOpenCL生成器将PNG、JPG或BMP格式的图像转化为几何JSON文件，并在同一应用程序内提供预览和导入功能，用户无需手动输入内存地址即可完成操作。该工具特别适用于想要自定义游戏内车辆贴花的设计者，支持在Windows环境下运行，且版本1.2.0已经过优化，可以更高效地处理高质量图像转换。对于追求细节表现力的游戏爱好者来说，此项目提供了一个安全且便捷的工作流程来增强游戏体验。","2026-06-11 03:55:23","CREATED_QUERY"]