CFSReader (Comic Funscript Reader) is a reader that brings comics to life.
It stores motion parameters for each comic page in a .cfs file and drives an OSR device through a USB serial connection.
A .cfs file is essentially a JSON file and must have the same name as its corresponding comic folder.
{
"1.jpg": {
"max": 100,
"min": 50,
"freq": 1.5,
"decline_ratio": 0.4
},
"2.jpg": {
"max": 70,
"min": 0,
"freq": 2.3,
"decline_ratio": 0.5
}
}Parameter descriptions:
- max: Highest position.
- min: Lowest position.
- freq: Frequency (number of back-and-forth movements per second).
- decline_ratio: Proportion of the downward phase within one cycle (the time spent moving from the highest position to the lowest position).
Download the latest installer from the Releases page and install it locally.
git clone https://github.com/Karasukaigan/CFSReader.git
cd CFSReader
python -m venv venv
.\venv\Scripts\activate
pip install -r requirements.txt
python main.py- Connect the OSR device to your computer via USB.
- Place the folder containing comic images into the
comicsdirectory. (If you cannot find thecomicsdirectory, open it viaFile→Open Comics Directory.) Alternatively, openPreferencesfrom theFilemenu, clickSelect Directoryto choose a custom folder, and clickSaveto apply. - Open
Preferencesfrom theFilemenu, select the correct serial port underSerial Port Device, and clickSave. - Click a comic on the left side of the main window to load it on the right.
- Press
F10to open the CFS Editor, which will appear on the far right side of the window. - Click
Export CFS Filein theFilemenu to export the current comic’s.cfsfile, allowing you to share it with others. .cfsfiles should be placed in thecfsdirectory. You can open thecfsdirectory by clickingOpen CFS Directoryin theFilemenu. However, following the Funscript convention,.cfsfiles can also be placed in thecomicsdirectory or inside the comic’s folder (alongside the images).
Issues and Pull Requests are welcome to help improve this project.
This project is licensed under the MIT License.
This project is free and open source, developed and maintained in my spare time by me. If you find it helpful or inspiring, please consider supporting its continued development.
Your donation helps cover development time, feature improvements, and maintenance costs.
| Ethereum | Bitcoin |
|---|---|
| 0x3E709387db900c47C6726e4CFa40A5a51bC9Fb97 | bc1qguk59xapemd3k0a8hen229av3vs5aywq9gzk6e |
![]() |
![]() |
Every contribution, no matter the amount, is greatly appreciated. Thank you for supporting open-source!



