# Passpartout Printer Draws images into the game [Passpartout: The Starving Artist](http://store.steampowered.com/app/582550/Passpartout_The_Starving_Artist/). ![Drawing our favorite crab. Original draw time 7 minutes.](https://thumbs.gfycat.com/SevereViciousBittern-size_restricted.gif) This application has one of two main operating modes: * Image Drawing Mode: takes an input image and draws it to the easel in-game. * Shape Drawing Mode: takes a list of coordinates and draws that shape in-game. # Dependencies On Linux, you may need to install the libxdo development libraries. On Ubuntu: ``` apt install libxdo-dev ``` On Fedora: ``` dnf install libxdo-devel ``` # Downloading and Compiling The easiest way to get passpartout_printer installed is to use `cargo install`: ``` cargo install passpartout_printer ``` If you have a need to build from source, you can build it as follows: ``` git clone https://github.com/ostrosco/passpartout_printer.git cd passpartout_printer cargo build --release ``` # Configuration Before the application can draw to the easel in-game, a configuration file needs to be created with the screen coordinates of in-game elements. To do this: * Start Passpartout. * Select Endless Mode in the main menu. Pick any of the unlocked scenarios. * Click on the easel to bring up the drawing interface. * Run `cargo run --release -- --configure` to start the configuration process. A prompt will appear in the console to walk through the elements to click to configure the program. Upon completion, a "coords.json" file will be created in the top-level directory. ## Configuration Tips * It's better to click on the white part of the easel than along the edge. If a click is too far off the easel, some line draws starting or ending near the edges will fail. * Try to click on the direct center of the colors. # Usage ``` Passpartout Printer 1.1.0 USAGE: passpartout_printer [FLAGS] [OPTIONS] FLAGS: --configure Configures the application with coordinates in-game. --enable-dither Enables dithering to reduce color banding but increase draw time -h, --help Prints help information --no-scale Disable scaling of the input image. -V, --version Prints version information OPTIONS: -i, --image Input image to use -w, --mouse-wait Specify the time to wait between mouse actions ``` Pressing Left Control + Space will pause or resume printing. # Deciding on a Wait Time The speed in which passpartout_printer can draw to the easel is limited by the frame rate in-game. The default wait time between mouse operations is 7ms which assumes a frame rate of around 142 FPS. To measure your in-game frame rate, ensure that the Steam overlay is enabled and that the In-Game FPS Counter is enabled. Initial observations have shown that the FPS can drop between 5% to 15% when drawing, so it's best to go a little slower than the max FPS. Wait times of 5ms or less seem to cause severe input errors regardless of FPS. ![Window to enable the FPS counter](screenshots/fps_counter.png) # Dithering [Dithering](https://en.wikipedia.org/wiki/Dither) can greatly improve the image quality at a significant performance tradeoff by reducing color banding. Expect dithering to increase the draw time by 2 to 4 times depending on the complexity of the input image. Without Dithering | With Dithering :---------------------------------------------:|:------------------------------------------: ![](screenshots/mona_lisa_no_dither_easel.jpg) | ![](screenshots/mona_lisa_dither_easel.jpg) Draw Time: 1 hour at 7ms wait time | Draw Time: 3.5 hours at 7ms wait time # Examples There are examples in the project that demonstrate the Shape Drawing Mode of the application. To run them: ``` cargo run --release --example draw_house ``` # In-Game Screenshots Graffiti - Artist Unknown. Dithering disabled. 1 hour draw time at 6ms wait. Lotus Pond - [Jessica T. Hamilton](https://www.reddit.com/user/JessicaTHamilton). Dithering enabled. 2 hour 45 minute draw time at 6ms wait. Mona Lisa - Leonardo da Vinci. Dithering enabled. 3 hour 30 minute draw time at 7ms wait.