A visual node-based file processing pipeline tool. Build reusable workflows for renaming, resizing, converting, and filtering files — no scripting required.
FlowForge lets you visually connect source, transform, and output nodes to build file processing pipelines:
- Visual Node Editor — Drag-and-drop canvas with pan, zoom, and wire connections
- 11 Built-in Nodes — Sources, transforms, and outputs covering common file operations
- Real-time Preview — Simulate runs without touching any files
- Pipeline Templates — Pre-wired workflows for common tasks (photo import, batch rename, web export, compression)
- CLI Runner — Execute pipelines from the command line for automation and scripting
- Cross-platform — Runs on Windows, macOS, and Linux via Avalonia UI
| Category | Node | Description |
|---|---|---|
| Input | Folder Input | Enumerate files from a directory with recursive and filter options |
| Process | Rename Pattern | Token-based renaming ({name}, {date}, {counter}, {meta}) |
| Process | Rename Regex | Regex find-and-replace with capture group support |
| Process | Rename Add Affix | Add prefix and/or suffix to filenames |
| Process | Filter | Conditional filtering by extension, size, date, or regex |
| Process | Sort | Reorder files by name, extension, or size |
| Process | Image Resize | Resize images with aspect ratio control |
| Process | Image Convert | Convert between JPEG, PNG, WebP, BMP, and TIFF |
| Process | Image Compress | Quality-based compression for JPEG, PNG, and WebP |
| Process | Metadata Extract | Read EXIF and file metadata into pipeline variables |
| Save To | Folder Output | Copy or move processed files to a destination directory |
- Canvas — Nodify-powered node graph with pan, zoom, drag, and rubber-band selection
- Node Library — Categorized sidebar with search and drag-to-canvas support
- Properties Panel — Auto-generated config forms from node schemas (text, number, boolean, file/folder picker, dropdown)
- Execution Log — Live progress with success/fail/skip counts and per-file details
- Templates — One-click pipeline starters: Photo Import, Batch Rename, Web Export, Compress
- Midnight Theme — Custom dark theme with GitHub Dark-inspired color palette
flowforge run pipeline.ffpipe [--input <dir>] [--output <dir>] [--dry-run] [--verbose]- Override input/output directories per run
- Dry-run mode for safe previewing
- Structured logging with Serilog
- Exit codes: 0 (success), 1 (pipeline error), 2 (invalid arguments)
Pipelines are saved as .ffpipe files (human-readable JSON, UTF-8):
{
"name": "Photo Import",
"nodes": [
{ "id": "...", "typeKey": "FolderInput", "config": { "path": "/photos" } }
],
"connections": [
{ "sourceId": "...", "targetId": "..." }
]
}| Technology | Purpose |
|---|---|
| .NET 10 | Runtime and build system |
| Avalonia 11 | Cross-platform desktop UI framework |
| Nodify.Avalonia | Node graph editor control |
| CommunityToolkit.Mvvm | MVVM framework |
| SixLabors.ImageSharp | Image processing (resize, convert, compress) |
| MetadataExtractor | EXIF and file metadata reading |
| Serilog | Structured logging |
| System.CommandLine | CLI argument parsing |
| xUnit + FluentAssertions | Testing framework |
FlowForge/
├── FlowForge.sln
├── src/
│ ├── FlowForge.Core/ # Business logic (no UI references)
│ │ ├── Execution/ # PipelineRunner, NodeRegistry
│ │ ├── Models/ # FileJob, ExecutionResult
│ │ ├── Nodes/
│ │ │ ├── Base/ # Interfaces, ConfigField, exceptions
│ │ │ ├── Sources/ # FolderInputNode
│ │ │ ├── Transforms/ # 8 transform nodes
│ │ │ └── Outputs/ # FolderOutputNode
│ │ ├── Pipeline/ # PipelineGraph, Serializer, Templates
│ │ └── Settings/ # AppSettings, AppSettingsManager
│ ├── FlowForge.UI/ # Avalonia desktop app (MVVM)
│ │ ├── ViewModels/ # 14 view models
│ │ ├── Views/ # 5 view pairs + template selector
│ │ ├── Themes/ # MidnightTheme.axaml
│ │ └── Services/ # DialogService
│ └── FlowForge.CLI/ # CLI runner (System.CommandLine)
└── tests/
└── FlowForge.Tests/ # 202 xUnit tests
├── Nodes/ # 11 node test files
├── Execution/ # Runner + registry tests
├── Pipeline/ # Serializer + template tests
├── Models/ # FileJob tests
├── Settings/ # AppSettings tests
└── Helpers/ # TempDirectory, TestFileFactory, PipelineBuilder
- .NET 10 SDK or later
# Clone the repository
git clone https://github.com/Wintersta7e/FlowForge.git
cd FlowForge
# Build all projects
dotnet build
# Run the desktop app
dotnet run --project src/FlowForge.UI
# Run the CLI
dotnet run --project src/FlowForge.CLI -- run pipeline.ffpipe --dry-run# Run all 202 tests
dotnet test --logger "console;verbosity=normal"
# Run specific test class
dotnet test --filter "FullyQualifiedName~RenamePatternNodeTests"- Launch the app —
dotnet run --project src/FlowForge.UI - Use a template — Click a template button on the empty canvas (Photo Import, Batch Rename, Web Export, or Compress)
- Or build from scratch — Drag nodes from the sidebar onto the canvas
- Connect nodes — Drag from an output pin to an input pin to create a wire
- Configure — Select a node and edit its settings in the Properties panel
- Preview — Click Preview to simulate the run without changing any files
- Run — Click Run to execute the pipeline
- Save — Save your pipeline as a
.ffpipefile to reuse later
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch
- Make your changes
- Ensure
dotnet buildpasses with zero warnings - Ensure
dotnet testpasses - Submit a pull request
MIT License — see LICENSE for details.
- Report issues or suggest features
- Star this repository if you find it useful


