76 lines
3.4 KiB
Markdown
76 lines
3.4 KiB
Markdown
|
|
# CLAUDE.md
|
|||
|
|
|
|||
|
|
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|||
|
|
|
|||
|
|
## Solution Structure
|
|||
|
|
|
|||
|
|
Three projects in `ComicCompress.sln`, all targeting .NET 8.0:
|
|||
|
|
|
|||
|
|
- **ComicCompress** (this directory) — Console application entry point. `Program.cs` handles CLI parsing via `McMaster.Extensions.CommandLineUtils` and orchestrates processing.
|
|||
|
|
- **iMGcompress-core** (`../iMGcompress-core`) — Class library containing all compression logic. Both the CLI and GUI depend on this.
|
|||
|
|
- **iMGcompress** (`../iMGcompress`) — Windows Forms GUI (`net8.0-windows`) wrapping the core library.
|
|||
|
|
|
|||
|
|
## Build & Run
|
|||
|
|
|
|||
|
|
```powershell
|
|||
|
|
# Development build
|
|||
|
|
dotnet build
|
|||
|
|
|
|||
|
|
# Run CLI (from project root)
|
|||
|
|
dotnet run -- --help
|
|||
|
|
dotnet run -- -i <input> -o <output> -q 75 -p
|
|||
|
|
|
|||
|
|
# Publish self-contained Windows executable
|
|||
|
|
dotnet publish -r win-x64 -c Release
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
`launchSettings.json` defines named profiles (e.g. `PROD`, `DEV_HOME`, `Compress Image to webp`) for common invocations.
|
|||
|
|
|
|||
|
|
## CLI Flags
|
|||
|
|
|
|||
|
|
| Flag | Description |
|
|||
|
|
|------|-------------|
|
|||
|
|
| `-i` | Input file or folder (required) |
|
|||
|
|
| `-o` | Output base path (default: `converted_comics`) |
|
|||
|
|
| `-r` | Recurse into subfolders |
|
|||
|
|
| `-s` | Skip if output already exists |
|
|||
|
|
| `-q` | WebP quality 0–100 (default: 75) |
|
|||
|
|
| `-p` | Parallel processing (all CPUs) |
|
|||
|
|
| `-c` | Parallel with N CPUs |
|
|||
|
|
| `-d` | PDF-only mode |
|
|||
|
|
| `-j` | Image-only mode |
|
|||
|
|
| `-n` | Zebra PRN mode (generates PNG + WebP Base64 URI) |
|
|||
|
|
| `-a` | Copy unprocessed files to output |
|
|||
|
|
|
|||
|
|
## Architecture
|
|||
|
|
|
|||
|
|
**Data flow:** Input (`.cbr`/`.cbz` archives or loose images) → extract → convert each image to WebP → repack as `.cbz`.
|
|||
|
|
|
|||
|
|
### Core library (`iMGcompress-core`)
|
|||
|
|
|
|||
|
|
- **`Compressor.cs`** — Central engine. Reads RAR/ZIP archives via `SharpCompress`, converts images to WebP via `Imazen.WebP`, and writes output `.cbz`. Handles solid and non-solid archives separately. The first image in an archive (cover) is preserved without conversion.
|
|||
|
|
- **`FileProcessor.cs`** — Orchestrates parallel or sequential processing over a file list. Inner class `ProcessorFlags` carries all options. Writes the final compression report.
|
|||
|
|
- **`FileParser.cs`** — Recursively enumerates input files.
|
|||
|
|
- **`ImageExtractor.cs`** — Implements `IRenderListener` (iText) to extract images from PDF pages and produce a `.cbz`.
|
|||
|
|
- **`PixelMap.cs`** — Parses Portable Bitmap formats (PBM/PGM/PPM, variants P1–P6) into `System.Drawing.Bitmap` before WebP encoding.
|
|||
|
|
- **`Logger.cs`** — Thread-safe colored console/file logger. `LogLevel`: Error, Warning, Info, Verbose.
|
|||
|
|
- **`file_stat.cs`** — Simple DTO tracking per-file uncompressed/compressed sizes for statistics.
|
|||
|
|
|
|||
|
|
### Console app (`ComicCompress`)
|
|||
|
|
|
|||
|
|
`Program.cs` parses flags, builds a `ProcessorFlags`, calls `FileParser` to enumerate targets, then hands off to `FileProcessor`. Video (MP4→WebM) conversion uses `Xabe.FFmpeg`. Zebra PRN rendering uses `BinaryKits.Zpl.Viewer`.
|
|||
|
|
|
|||
|
|
## Key Dependencies
|
|||
|
|
|
|||
|
|
| Package | Purpose |
|
|||
|
|
|---------|---------|
|
|||
|
|
| `SharpCompress` | Read/write RAR and ZIP archives |
|
|||
|
|
| `Imazen.WebP` + `libwebp.dll` | WebP encoding (requires `libwebp.dll` in output dir) |
|
|||
|
|
| `Magick.NET-Q8-x64` | Advanced image format support (TIFF, etc.) |
|
|||
|
|
| `iTextSharp` / `itext` | PDF parsing |
|
|||
|
|
| `Xabe.FFmpeg` | Video conversion |
|
|||
|
|
| `BinaryKits.Zpl.Viewer` | Zebra PRN label rendering |
|
|||
|
|
| `McMaster.Extensions.CommandLineUtils` | CLI argument parsing |
|
|||
|
|
|
|||
|
|
**`libwebp.dll` must be present** alongside the executable at runtime — it is checked into the repo root.
|