AutoCurved is a standalone, browser-based tool designed to digitize scientific plots and extract data curves from images.
This tool is tailored for researchers who need to validate their solvers against established literature or simply wish to present existing data with their own stylistic flair. If you have ever suffered from the time-consuming process of manually digitizing curves, your struggle ends here (or at least, it will make your life easier).
AutoCurved is optimized for single-valued functions
It runs entirely in your browser, and no installation is required. Simply download or clone the repository to your local preferred folder and run AutoCurved.html
Image for example extracted from Catalán, J. M., Arranz, G., Moriche, M., Guerrero-Hurtado, M., García-Villalba, M., & Flores, O. (2025). Aerodynamic performance and robustness of a nature-inspired concept for a micro-scale wind turbine. arXiv preprint arXiv:2509.24998.
Created by Cayetano Martínez-Muriel. This application was architected and developed with a huge assistance of Google Gemini 3.0.
If you use or modify this tool, cite this work as:
- Martínez-Muriel, C. AutoCurved (2025), GitHub Repository, https://github.com/cayetanomarmur/AutoCurved
- Runs directly as a single HTML file by copying and pasting a figure.
- Automatically finds X and Y axes using histogram density analysis.
- Detects curves based on color, continuity, and geometric heuristics.
- Magic Wand Tool: Selects connected curve segments with a single click (Flood Fill).
- Generates a live preview of the digitized data and exports ready-to-run Python (matplotlib) code or raw data arrays.
- All processing happens locally in your browser. No images are uploaded to any server.
-
Upload: Paste an image directly into the window or click to upload a file.
-
Calibrate: The app will attempt to auto-detect the axes. Ensure the Blue dots (X-axis) and Red dots (Y-axis) are at the correct position, not necessarily the extreme of the axes. If needed, click the target icon next to a coordinate to manually re-select it on the image. Enter the numerical values for X1, X2, Y1, and Y2 (again, not necessarily the extremes of the axes).
-
Extract: Select the curves you want to digitize.
- Magic Wand: Click on a curve to select all connected pixels of that color. If the figure plots curves with similar colors, the user can set the color tolerance to a lower value.
- Global Color: Select all pixels in the image matching a specific color.
- Pen/Eraser: Manually add or remove points.
- Thin Current Curve: If the selection is thick and include markers, click this to calculate the center line. Ends of the curve might deviate from their actual value, and some erasing and manual introduction of additional points must be done. Moreover, depending on the curvature or hidden intervals of the curves, it might miss some points that shall be included manually to allow for a proper reconstruction.
- Manual selection of additional points: If you miss points, you can add them easily by clicking on the curve using the manual feature. You could select the entire curve using this feature, as you wish.
- Auto-detect curves: give it a try, this automatic feature works reasonably well in many cases where the colors of the curves deviates from the background color of the figure.
Tip: Use the "Curves" panel on the left to manage multiple datasets (Curve 1, Curve 2, etc.). You can modify the name of the curve, and that will be the name for the legend of the generated output. It is also possible to modify colors and markers. The user can manually add points wherever felt necessary. So if the automatic selection fails, the app can still be used.
-
Annotate & Preview: Add metadata like Chart Title and Axis Labels. Use "Auto-Read Text" to attempt OCR extraction of labels. Check the Preview tab to see the reconstructed plot before exporting. This metadata will also be added to the output, so you can just plug-and-play into Python afterwards.
-
Export: Copy the generated Python code or raw Arrays from the right-hand panel. You can use the "Copy output" button on the left bottom corner.
MIT License. See LICENSE file for details.
It is known by the developer that the app currently faces some challenges:
-
Automatic detection of the beginning and end of the axes might not be perfect. Besides, their value must be adjusted manually.
-
Automatic detection of curves might fail and select white background areas, and fails capturing dashed curves.
-
Crossing or dashed lines are difficult to automatically detect, as the algorithm is based on continuity.
-
Magic wand also detects markers. They can be removed using the "Thin Current Curve" with a high value of the threshold, but it will modify the ends of the curves.
-
As said in the intro, AutoCurved is optimized for single-valued functions
$y=f(x)$ . It is not intended for parametric curves, loops, or closed shapes where multiple$y$ values exist for a single$x$ coordinate (i.e., curves that fail the vertical line test). In those cases, manual reconstruction of the curve is the only solution here.Please note that is not intended to maintain the tool/solve bugs ASAP due to time availability, but the developer welcomes user suggestions and modification proposals.

