No description
| lib | ||
| linux | ||
| src | ||
| test | ||
| windows | ||
| .gitignore | ||
| analysis_options.yaml | ||
| Cargo.lock | ||
| Cargo.toml | ||
| flake.lock | ||
| flake.nix | ||
| pubspec.lock | ||
| pubspec.yaml | ||
| README.md | ||
recipe-to-epub
Scan recipe cards via CUPS/SANE, OCR them with Tesseract, manage them in a graphical app, and compile into a richly styled EPUB recipe book.
Components
- GUI — Flutter-based graphical recipe manager (cross-platform: Linux, Windows)
- CLI — Rust backend for scanning, OCR, and EPUB compilation
Workflow
Recipe card → [Scanner] → [OCR] → [Edit] → [Export EPUB]
GUI CLI GUI CLI
GUI (Flutter)
Manage recipes, trigger scanning/OCR, and export to EPUB.
Linux
# Build
flutter build linux --release
# Run
./build/linux/x64/release/bundle/recipe_manager
Windows
flutter build windows --release
# Output: build\windows\x64\release\recipe_manager.exe
Or open the windows/ folder in Visual Studio and build with CMake.
From Nix
nix develop # enters a shell with Flutter, Rust, tesseract, and sane-backends
flutter build linux --release
CLI (Rust)
The CLI backend handles scanning, OCR, and EPUB compilation. The GUI calls this automatically if it's in PATH.
Install
cargo install --path .
Or via Nix:
nix run .# -- --help
Usage
recipe-to-epub list-scanners # List available scanners
recipe-to-epub scan --output scan.png # Scan a recipe card
recipe-to-epub ocr scan.png # OCR a scanned image
recipe-to-epub compile recipes/ --output cookbook.epub --title "My Recipes" # Compile to EPUB
Recipe format
Each recipe is a markdown file with YAML frontmatter:
---
title: Chocolate Chip Cookies
source: Family Recipe Box
prep_time: 15 minutes
cook_time: 10 minutes
servings: 24 cookies
date_scanned: 2026-06-07
---
## Ingredients
- 2 1/4 cups all-purpose flour
- 1 cup butter
## Instructions
1. Preheat oven to 375°F.
2. Mix ingredients.
Project structure
├── lib/ # Flutter/Dart GUI source
│ ├── main.dart
│ ├── app.dart
│ ├── models/ # Data models
│ ├── screens/ # UI screens
│ ├── services/ # Backend integration
│ └── widgets/ # Reusable widgets
├── src/ # Rust CLI source
│ ├── main.rs
│ ├── epub.rs
│ ├── ocr.rs
│ ├── recipe.rs
│ └── scanner.rs
├── linux/ # Linux Flutter runner
├── windows/ # Windows Flutter runner
├── pubspec.yaml # Flutter config
├── Cargo.toml # Rust config
└── flake.nix # Nix flake
License
MIT