{"id":45430949,"url":"https://github.com/felipeflohr/node-autodrawer","last_synced_at":"2026-02-22T02:00:51.375Z","repository":{"id":43374714,"uuid":"438752816","full_name":"FelipeFlohr/node-autodrawer","owner":"FelipeFlohr","description":"Autodrawer for Paint 3D. Built using Robot.js and Node","archived":false,"fork":false,"pushed_at":"2022-03-07T07:46:48.000Z","size":2197,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2023-03-16T03:21:13.040Z","etag":null,"topics":["autodrawer","node","nodejs","robotjs"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/FelipeFlohr.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-12-15T19:44:38.000Z","updated_at":"2022-10-21T20:10:08.000Z","dependencies_parsed_at":"2022-09-13T19:30:48.342Z","dependency_job_id":null,"html_url":"https://github.com/FelipeFlohr/node-autodrawer","commit_stats":null,"previous_names":[],"tags_count":null,"template":null,"template_full_name":null,"purl":"pkg:github/FelipeFlohr/node-autodrawer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FelipeFlohr%2Fnode-autodrawer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FelipeFlohr%2Fnode-autodrawer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FelipeFlohr%2Fnode-autodrawer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FelipeFlohr%2Fnode-autodrawer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/FelipeFlohr","download_url":"https://codeload.github.com/FelipeFlohr/node-autodrawer/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FelipeFlohr%2Fnode-autodrawer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29703251,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-21T23:35:04.139Z","status":"online","status_checked_at":"2026-02-22T02:00:08.193Z","response_time":110,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["autodrawer","node","nodejs","robotjs"],"created_at":"2026-02-22T02:00:26.337Z","updated_at":"2026-02-22T02:00:51.352Z","avatar_url":"https://github.com/FelipeFlohr.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003eNode.js Autodrawer for Paint 3D\u003c/h1\u003e\n\nAn Autodrawer for Paint 3D created using Node.js and Robot.js. A recreation of my [Python Autodrawer for Paint 3D](https://github.com/FelipeFlohr/python-autodrawer) but now using Node.\n\n**Sections:**\n- [Requirements](#1-requirements)\n- [Setting up](#2-setting-up)\n    - [*config.json*](#20-configjson)\n    - [*positionsLocation* / *Positions*](#21-positionslocation--positions)\n    - [Values](#22-values)\n    - [Installing dependencies](#23-installing-dependencies)\n    - [Building](#24-building)\n- [Usage](#3-usage)\n- [FAQ](#4-faq)\n- [License](#5-license)\n---\n## 1. Requirements\n- Windows 10 or 11\n- [Microsoft Paint 3D](https://www.microsoft.com/en-us/p/paint-3d/9nblggh5fv99)\n- [Node.js](https://nodejs.org/en/)\n\n## 2. Setting up\nBefore starting, it's necessary to set up some values which the drawer will rely upon.\n\n### 2.0 *config.json*\n*config.json* holds the main parameters for the program. It is located at the root folder. The default values should look like this:\n```json\n{\n    \"useDefaultPositions\": false,\n    \"useDefaultValues\": false,\n    \"delayFactor\": 1,\n    \"imageLocation\": \"../res/test4.png\",\n    \"positionsLocation\": \"../res/positions.json\",\n    \"valuesLocation\": \"../res/values.json\"\n}\n```\n- **\"useDefaultPositions\"** and **\"useDefaultValues\"**: determines if the default values (located inside \"*src/json*\") are going to be used instead of *\"positionsLocation\"* and *\"valuesLocation\"*. The default positions are based on **my monitor's resolution** (**1920x1080**) and a **4000x3000 canvas**. It might work well if you have the same resolution and canvas size as me.\n- **\"delayFactor\"**: determines the *sleep* multiplier. Inside the code, there is the \"sleep\" method, which takes a time in milliseconds as argument. This value is multiplied by this \"delayFactor\".\n- **\"imageLocation\"**: path to the image. It is recommended to use an absolute path.\n- **\"positionsLocation\"**: path to the *positions* file. This file holds the coordinates that will be used to interact with Paint 3D's UI.\n- **\"valuesLocation\"**: path to the *values* file. This file holds the values that will be used to set Paint 3D's tools.\n\n### 2.1 *positionsLocation* / *Positions*\nIt is also necessary to set up the \"positions.json\" file, a file which holds the coordinates that will be used to interact with Paint 3D's UI. The default values - as stated previously - are based on my 1920x1080 monitor and 4000x3000 canvas. Each point is based of the XY screen's position of the Paint 3D's element. Documentation for every point is available [here.](./readme/positions.md)\n\n### 2.2 Values\n*values.json* is the file that holds values which will be set on Paint 3D. The default *values* file should look like this:\n```json\n{\n    \"zoom\": 25,\n    \"brushSize\": 7,\n    \"brushOpacity\": 75,\n    \"tool\": \"graphitepencil\"\n}\n```\n- **\"zoom\"**: amount of zoom that will be set.\n- **\"brushSize\"**: thickness of the tool.\n- **\"brushOpacity\"**: opacity of the tool.\n- **\"tool\"**: tool which will be used.  Available options are: \"marker\", \"watercolor\", \"pixelpencil\", \"graphitepencil\" and \"crayon\".\n\n### 2.3 Installing dependencies\nOpen the terminal at the root folder then type `npm i`. All the dependencies will be downloaded and installed.\n\n### 2.4 Building\nOpen the terminal at the root folder then type `npm run build`. The project will be built to the \"dist\" directory.\n\n## 3. Usage\nOnce the project is built, open the terminal at the root folder and type `npm start` to execute the program. Then maximizes Paint 3D and let the drawer do its job.\n\n## 4. FAQ\nQ: Is there any hotkey to stop the drawer?\n- R: Sadly I couldn't implement this feature. I tried to use some global keyboard listeners but no one succeeded.\n\nQ: Will there ever be a GUI version of this drawer?\n- R: That's my current plan right now. I will try to use this piece of code to build a desktop app using Electron\n\n## 5. License\nFeel free to do whatever you want with this code :)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffelipeflohr%2Fnode-autodrawer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffelipeflohr%2Fnode-autodrawer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffelipeflohr%2Fnode-autodrawer/lists"}