Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/DoubleCouponDay/Chunkus
Discord bot that converts your chat image to a Scalable Vector Graphic.
https://github.com/DoubleCouponDay/Chunkus
c cpp docker hacktoberfest rust
Last synced: 3 months ago
JSON representation
Discord bot that converts your chat image to a Scalable Vector Graphic.
- Host: GitHub
- URL: https://github.com/DoubleCouponDay/Chunkus
- Owner: DoubleCouponDay
- Created: 2020-07-13T05:21:35.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2024-02-10T19:55:00.000Z (11 months ago)
- Last Synced: 2024-10-14T13:01:35.931Z (3 months ago)
- Topics: c, cpp, docker, hacktoberfest, rust
- Language: C
- Homepage:
- Size: 15.2 MB
- Stars: 6
- Watchers: 3
- Forks: 4
- Open Issues: 8
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-xmake - Vectorizer
README
# Chunkus #
Converts PNG and JPEG image files to Scalable Vector Graphic (SVG) image files.
The main algorithm is written in C. It is linked with a discord bot written in Rust. The "vec_step" debugger is written in C++ which can be used for debugging the svg output.
This was a group project written by Samuel, Joshua, Matthew.
## Requirements
WARNING: Please note that SIMD instructions are used and Intel Microprocessors without the MMX extension will not work.
Set the `CHUNKUS` environment variable to the value of your discord bot's secret token.
### Installing C requirements on Windows
On Windows:
+ Install Visual Studio Community Edition
+ Add the MSVC C++ Build Tools Individual Component
+ Add the Windows SDK Individual Component
+ Install Git using Chocolateychoco install git
+ Install Cmake using Chocolatey
choco install cmake --installargs 'ADD_CMAKE_TO_PATH=System'
+ Set the `CMAKE_C_COMPILER` to this:
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.37.32822\bin\Hostx64\x64\cl.exe
the path may vary depending on your MSVC version.
### Installing C requirements on Linux
On Debian Linux:
sudo apt update -y
sudo apt install git cmake build-essential
On Arch Linux:
sudo snap install --classic cmake
### Installing Rust requirements on Windows
if you are on windows:
+ Download and run the rustup installer.
+ run the following commands:
rustup toolchain install stable-msvcrustup default stable-msvc
### Installing Rust Requirements on Linux
On Linux, run the follow commands:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
rustup default stable
sudo apt install build-essential libssl-dev
### Installing OpenGL on Linux
On linux, run the following to install OpenGL:
sudo apt install mesa-common-dev libxi-dev libx11-dev libgl1-mesa-dev libglu1-mesa-dev -yOn Windows, OpenGL should already be available.
## Building the C part
Use a terminal to execute the `build.bat` / `build.sh` depending on your operating system type. It must be executed from the root directory.
linux:
./build.sh
windows:
.\build.bat
The C code builds to `C_part\build`. It has to build all the dependencies and link them which can take about a minute. For a faster build time, run `debug.bat|sh` instead.
## Building the Rust part
The rust component links to the C code, which depends on libpng, which depends on zlib.
In the `Rust_part` folder, run:
cargo build
The rust part builds to `/Rust_part/target/{BUILD_MODE}/` where BUILD_MODE = (debug|release)
## Running Chunkus
`cargo run --bin trampoline`
## Commands
### Vec:
Goes through all attachments of the command message, executes the algorithm on them and returns the output`!vec [attachment or URL]`
!vec https://cdn.discordapp.com/attachments/787470274261549056/807847299752394773/ginormous.png
You will receive a message with `output.svg.xz` compressed file and a preview png attached.
### Params:
Sets the parameters to use with the algorithm.`!params [chunk size] [thresholds] [colours]`
@Chunkus !params 1 20 256
- [chunk size]
Chunk size is amount of width and height in the algorithm's smallest image unit. An image is broken up into chunks, where a higher number improves speed while reducing quality (and losing information).
Increase this if reducing the output image size would increase the speed of image processing.
- [thresholds]
Thresholds is an int between 0 and 441. It is the number of threshold layers to be taking from an exponential curve.
one threshold layer is the magnitude of the difference between colours with 3 components (RGB).
you can use the pythagorean theorem in 3 dimensions to calculate this by:
mag3 = sqrt(255^2 * 3)- A threshold determines how easily another colour is considered a separate shape
- A Threshold of 0 means any color that is not EXACTLY the same will be considered separate
- A threshold of 441.67 means the only color values considered different are rgb(0,0,0) and rgb(255,255,255) (white and black).Use this if you want increase the accuracy of the output image.
- [colours]
The number of colours that are available for an output image.
Use this if reducing the colour complexity would increase the speed of image processing.
## C Tests
---The C code contains a test suite `vec_test.exe` which can run all C tests or just one, when given a test name. The test names can be found in `C_part/tests/main.c`.
`vec_test.exe` is designed to be executed from the root folder.
install\bin\vec_test read_png
You can easily debug the C tests with Visual Studio Code, on Linux.
+ run the `.\build.bat` script at least once then run `.\debug.bat` to generate debugging symbols.
+ In the `Run and Debug` side menu, select the launch task `Linux: Launch Tests`, which can be configured in the `.vscode/launch.json file`.
## Rust Tests
---Rust tests have been pretty much abandoned because a test cant send a discord chat message which triggers itself.
The Rust tests must be run in series.
```
cargo test -- --test-threads 1
```## Running and Deployment
---
you can run the bot on your computer or inside a docker container.You will need to provide a docker-compose.yml file that fills the `CHUNKUS` environment variable with your discord bot token.
build C code, then Rust code, then run `sudo docker build`. once the image is built, push it to dockerhub.
Fill in the blanks in the dockercompose.yml file to pass the environment variables into the container.
`sudo docker-compose up --build --detach`
## Debugging the C Algorithm
---You can use the `vec_step` GUI to step through frames on a specified iteration count of the vectorizer algorithm.
Open the Desktop App by running this:
./build/bin/vec_step ./build/bin/test.png
## Debugging on Windows
Ensure the Desktop Development for C++ package is installed through VS Installer.
Build in CMake with the Visual Studio Generator.
Open the `Chunkus` solution in visual studio, from the `build` folder.
In VS, set the startup project to `vec`.
In the Debugging settings, set the Current Working Directory to `${project}../../`. This allows running tests from the root folder.
Press F5 to start debugging.
## FAQ
### Why do we need .a library files from our Windows build instead of our Linux Build?
Our current Rust build script will not link with .dll files as we are static linking.
### Why did we initially choose MingW for our Build Generator?
Visual Studio Code is our primary IDE and it can only debug C/C++ if you build with MingW.
### Why are we using MSBuild instead of MingW on Windows?
We could potentially be using OpenCL in the future. Its CmakeLists.txt only works with MSBuild.
### Why can't I see printfs in the console?
Running `vec_text` will smother calls to `printf`` but you can still use `LOG_INFO()`.