This is a script to draw an image onto r/place (https://www.reddit.com/r/place/).
- Support for multiple accounts
- Determines the cooldown time remaining for each account
- Detects existing matching pixels on the r/place map and skips them
- Automatically converts colors to the r/place color palette
- Easy(ish) to read output with colors
- SOCKS proxy support
- No client id and secret needed
If you are using MacOSX and encounter an SSL_CERTIFICATE error. Please apply the fix detailed https://stackoverflow.com/questions/42098126/mac-osx-python-ssl-sslerror-ssl-certificate-verify-failed-certificate-verify
Move the file 'config_example.json' to config.json
Edit the values to replace with actual credentials and values
Note: Please use https://jsonlint.com/ to check that your JSON file is correctly formatted
{
//Where the image's path is
"image_path":"image.png",
// [x,y] where you want the top left pixel of the local image to be drawn on canvas
"image_start_coords": [741, 610],
// delay between starting threads (can be 0)
"thread_delay": 2,
// array of accounts to use
"workers": {
// username of account 1
"worker1username": {
// password of account 1
"password": "password",
// which pixel of the image to draw first
"start_coords": [0, 0]
},
// username of account 2
"worker1username": {
// password of account 2
"password": "password",
// which pixel of the image to draw first
"start_coords": [0, 0]
}
// etc... add as many accounts as you want (but reddit may detect you the more you add)
}
}
- Change image.jpg/png to specify what image to draw. One pixel is drawn every 5 minutes. PNG takes priority over JPG.
start.bat or startverbose.bat
chmod +x start.sh startverbose.sh
./start.sh or ./startverbose.sh
python3 main.py -d
or python3 main.py --debug
Just create multiple child arrays to "workers" in the .json
{
"image_path":"image.png",
"image_start_coords": [741, 610],
"thread_delay": 2,
"workers": {
"worker1username": {
"password": "password",
"start_coords": [0, 0]
},
"worker2username": {
"password": "password",
"start_coords": [0, 50]
}
}
}
In this case, the first worker will start drawing from (0, 0) and the second worker will start drawing from (0, 50) from the input image.jpg file.
This is useful if you want different threads drawing different parts of the image with different accounts.
If any JSON decoders errors are found, the config.json
needs a fix. Make sure to add the below 2 lines in the file.
{
"thread_delay": 2,
"unverified_place_frequency": false,
"proxies": ["1.1.1.1:8080","2.2.2.2:1234"]
}
-
thread_delay - Adds a delay between starting a new thread. Can be used to avoid ratelimiting
-
unverified_place_frequency - Sets the pixel place frequency to the unverified account limit
-
proxies - Sets proxies to use for sending requests to reddit. The proxy used is randomly selected for each request. Can be used to avoid ratelimiting
-
Transparency can be achieved by using the RGB value (69, 42, 0) in any part of your image
-
If you'd like, you can enable Verbose Mode by adding --verbose to "python main.py". This will output a lot more information, and not neccessarily in the right order, but it is useful for development and debugging.
A dockerfile is provided. Instructions on installing docker are outside the scope of this guide.
To build: After editing your config.json, run docker build . -t place-bot
. and wait for the image to build
You can now run with
docker run place-bot
The nox CI job will run flake8 and black on the code. You can also do this locally by pip installing nox on your system and running nox
in the repository directory.