Releases: aurora7795/InkTag
Release list
v0.13.1
🚀 What's Changed in v0.13.1
Added
- Review Remediation Plan: Added
docs/review-remediation-plan-2026-09-01.md— a phased, branch-mapped implementation plan for the findings of themain@79cb9f5whole-codebase review (3 high, 8 medium, 9 low), covering MCP safety, stdio-stream purity,HttpClientlifecycle, archive-repack structure preservation, and on-disk persistence durability. Phases 1–3 are complete (see below).
Fixed
- MCP
remove_comic_pageRead-Only Bypass:RemoveComicPagenow callsEnsureWriteAccess()before removing a page and defaults todryRun = true, matching every other mutating MCP tool. Previously it committed by default and could delete pages / repack archives even when the server was started in strict read-only mode (INKTAG_MCP_READ_ONLY=true/--read-only). - MCP stdio Protocol Stream Corruption:
AppLoggernow writes console diagnostics tostderrinstead ofstdout, andInkTag.Mcpforces the host logging pipeline to stderr (LogToStandardErrorThreshold). The MCP server previously emitted initialization banners and warning/error log lines ontostdout, interleaving plain text into the JSON-RPC message stream. TheInkTag.Cli--jsonoutput is likewise no longer polluted by Core log lines. - Scraper
HttpClientSocket Exhaustion: IntroducedInkTag.Core.Net.SharedHttpClient, a process-wide pooledHttpClient(SocketsHttpHandler, 2-minutePooledConnectionLifetime).RateLimitedHttpClient,MetadataScraperServicecover-thumbnail downloads, andBulkScrapeQueueServicenow use it instead of allocating a newHttpClientper candidate / per service instance, which under a large bulk scrape could exhaust sockets and ephemeral ports. Per-request time limits are enforced with linkedCancellationTokenSources. - Scraper Cache Lost on One-Shot Runs:
MetadataScraperServiceandComicVineProviderare nowIDisposableand flush the ComicVine response cache synchronously on dispose. Previously the 7-day disk cache was only written by a 2-second debounce timer, so a singleinktag scrapecommand or MCP scrape tool call exited before the write fired and never persisted anything. The CLIscrapecommand and thesearch_external_metadata,scrape_comic_metadata, andbulk_scrape_directoryMCP tools now dispose the service. - Stale Untagged Count After Save All:
MainWindowViewModel.SaveAllAsyncnow recomputes the untagged / modified counts and re-applies the active filter once every saved item has flipped toHasEmbeddedXml = true/IsDirty = false, mirroring the refresh the bulk auto-tag apply path already performs. Previously, after auto-tagging a comic and clicking Save All, theUntagged (N)label and filter could remain stale because it relied solely on per-itemPropertyChangednotifications. - README Accuracy Pass: Corrected inaccurate claims in
README.md— test count (94 → 211), required SDK (10.0 / 9.0 / 8.0→10.0only, matching thenet10.0target), a non-existentCtrl+Mhotkey, "reading and writing.cbr" (writes always repack to.cbz), the missingremove_comic_page/strip-intro/remove-pagecommands, MCP tool parameter names (filePath/directoryPath→path/directory), the "atomically" claim onrestore_batch_job(#21), and thecheck_komga_server/audit_komga_librarydescriptions. Also dropped "Komga" from the Upcoming roadmap (already shipped in v0.11.1). - Wiki Accuracy Pass (
docs/wiki/,.agents/skills/comic-metadata-curator/SKILL.md): Reconciled the Layer 2 wiki with the current code — test count (184 → 211), MCP tool count (14 → 18, with the missingremove_comic_page/check_komga_server/sync_komga_book_or_series/audit_komga_libraryentries added), staleMetadataBackupService/PerceptualHashService/KomgaSyncService/ cover-extraction method signatures, non-existent GUI ViewModel names (ScraperMatchViewModeletc.), theLruImageCache"auto-disposes evicted bitmaps" claim (disposal was removed in v0.13.0),restore_comic_backupparameter (timestamp→backupId), the "atomic" batch-rollback wording, and the missingstrip-intro/remove-pageCLI subcommands. - Auto-Update Always Fell Back to Browser on macOS/Linux:
UpdateService.CheckForUpdatesAsyncnow gates onIsInstalledMode(manager)instead of Velopack's ownmanager.IsInstalled, matching the check already used byDownloadAndApplyUpdateAsync.manager.IsInstalledonly recognizes a Squirrel-style Windows install, so on a properly installed macOS.appbundle or Linux AppImage the check step always took the "portable" branch and queried the GitHub Releases API directly, which only returns a release page URL and never a VelopackUpdateInfo. That meant the apply step's in-place-update path — despite already being correctly gated onIsInstalledMode— was unreachable on those platforms, since it requires a non-nullUpdateInfoto run, so the user was always sent to the browser to download a new build manually. - Komga Connection False Negatives on Transient Network Blips:
KomgaClient.TestConnectionAsyncand the internalGetJsonSafeAsync<T>helper (backingGetLibrariesAsync,FindBookByFilePathAsync,FindSeriesByPathOrNameAsync,GetUntaggedOrErrorBooksAsync) now retry up to 2 additional times, 750ms apart, on a transient network exception (HttpRequestException,SocketException, orIOExceptionwrapping aSocketException) before giving up. Previously a single-shot failure like a momentary "No route to host" on the machine hostingInkTag.Mcp(e.g. its network stack not yet warm right after the MCP process starts) was surfaced immediately asconnected: falsefromcheck_komga_server, even though the very next attempt would succeed against the same reachable server. - Scrape Applied Metadata Twice with Divergent Merge Modes:
MetadataScraperService.AutoScrapeComicAsyncno longer mutates the caller'sComicInfo. It returns the raw fetched issue metadata on the newScrapeResult.FetchedMetadata, and the singleApplyMetadatacall at write time owns the merge mode. PreviouslyAutoScrapeComicAsyncpre-applied the fetched data underSettings.DefaultMergeMode, then the CLIscrapecommand / MCPscrape_comic_metadatatool re-applied the already-merged object under the user'smode, somode: "overwrite"was partially ignored and<Notes>attribution could be merged twice. The unusedScrapeResult.TargetComicproperty was removed.
📦 Downloads & Installation Notes
🍏 macOS Installation Note
Because InkTag is currently unnotarized:
- Drag
InkTag.appinto/Applications. - Run the following command in Terminal to clear the download quarantine:
xattr -cr /Applications/InkTag.app
(Alternatively, go to System Settings > Privacy & Security and click Open Anyway).
🤖 Model Context Protocol (MCP) Server Usage
- macOS (bundled):
/Applications/InkTag.app/Contents/MacOS/InkTag.Mcp - Windows / Linux / macOS (standalone downloads): Use the dedicated
InkTag-Mcp-*packages.
v0.13.0
🚀 What's Changed in v0.13.0
Added
- Provider/Scanner Title Page Detection & Fallback Matching: Multi-tier perceptual cover hashing evaluating Page 1 when Page 0 visual similarity drops below 70% or confidence threshold, matching comic covers obscured by scanner credits or provider intro advertisements.
-
Natural Numeric Image Entry Sorting: High-performance zero-allocation
NaturalStringComparerfor natural numeric sorting of archive image entries (00_intro.jpg,01_cover.jpg,page1.jpg,page2.jpg,page10.jpg). -
Atomic Archive Page Stripping & Removal: Clean removal of provider intro pages (
StripFirstPage,RemoveArchivePages) with temp extraction, ZipSlip path validation, ComicInfo.xmlPageCountdecrement andPagescollection renumbering, archive repack, and.baksafety rollback. -
Bulk Auto-Tag CBR ➔ CBZ Indicators & Badges: Displayed dynamic amber
CBR ➔ CBZbadges in theArchive File / Detected Querycolumn of the Bulk Scrape queue with explanatory conversion tooltips. -
Bulk Auto-Tag Pre-Save Confirmation Dialog: Added
BulkApplyConfirmWindowwhich prompts the user before applying bulk metadata changes whenever CBR repacking or automated file renaming (AlsoRenameFiles) is enabled, showing a live summary of all converted and renamed files. -
CLI Commands & Flags:
- Added
strip-intro <file|dir> [--dry-run]to strip provider/scanner intro pages from archives. - Added
remove-page <file> --index <n> [--dry-run]to remove specific pages by 0-based index. - Added
--page <n>option tocovercommand to extract arbitrary page images. - Added
--cover-page <n>and--strip-intro-pageoptions toscrapecommand.
- Added
-
MCP Server Tools & Enhancements:
- Added
remove_comic_pagetool for AI agent page removal with dry-run support. - Enhanced
extract_cover_imagewithpageIndexparameter. - Enhanced
scrape_and_apply_metadataandbulk_scrape_and_applywithdetectIntroPage,coverPageIndex, andstripIntroPagesoptions.
- Added
-
GUI Scraper Match Page Switcher & Stripping:
- Interactive page navigation (
◀ Page X/Y ▶) inScraperMatchWindowwith live visual similarity re-ranking against candidate covers. - Added
[x] Remove provider intro page on applycheckbox inScraperMatchWindow. - Added
Page 2 Coverbadge on bulk scrape queue items where cover was matched on page 2. - Added
[x] Strip Detected Intro Pagescheckbox inBulkScrapeQueueWindowtoolbar. - Added multi-page cover bitmap and perceptual hash caching in
ArchiveCoverService.
- Interactive page navigation (
-
Full-Series Background Cover Matching & Unified Issue List in Series Wizard:
- Automatically scans across all issues/pages in a selected series in the background (up to 500 issues per volume) with early-exit upon discovering
$\ge 90%$ visual similarity, eliminating manual pagination when matching covers for later issues in long runs. - Replaces rigid page buttons in Step 2 with a unified, continuous scrollable issue list that dynamically sorts and pins high-confidence visual matches (
$\ge 70%$ ) at the top with the ⭐ Top Visual Match badge and automatically selects$\ge 85%$ matches. - Added a quick real-time filter box in Step 2 to search/filter issues by number or title across the entire series.
- Added live local comic cover preview thumbnails in the Step 2 header and bottom action bar with side-by-side comparison (
[Local Cover] vs [Selected Candidate]) and hover-to-zoom tooltips. - Added
[x] Rematch remaining unmatched comics in queuecheckbox inSeriesSearchWizardWindowwhen launched from the bulk auto-tag queue, automatically re-matching all remaining unmatched, low-confidence, or error queue items against the selected series volume. - Added direct
🧙 Series Search Wizard...context menu option inBulkScrapeQueueWindow. - Added full-content hover tooltips (
ToolTip.ShowDelay="100") across all text fields inBulkScrapeQueueWindow(including Archive File Name, Detected Query, Matched Series Title, and Matched Issue Title), allowing users to immediately inspect full untruncated strings on hover. - Added native support for Chronological & Reading-Order Pack filenames (e.g.,
YYYYMMDD - Franchise, Season X #Y - Arc Title, Part Z.cbzandYYYY-MM-DD - Series #X - Story.cbz):- Automatically strips 8-digit ISO dates (
YYYYMMDD -/YYYY-MM-DD -) and extracts the 4-digit release year. - Accurately decomposes franchise season-arc structures (e.g.
Angel, Season 5 #14 - Smile Time, Part II$\rightarrow$ Angel: Smile Time #2,Buffy, Season 0 #1 - The Origin, Part I$\rightarrow$ Buffy: The Origin #1). - Converts Roman numeral part designations (
Part I,Part II,Part III, etc.) to issue numbers. - Expands series volume searches in ComicVine scraper with arc aliases and franchise parent volumes.
- Automatically strips 8-digit ISO dates (
- Automatically scans across all issues/pages in a selected series in the background (up to 500 issues per volume) with early-exit upon discovering
Fixed
- Dynamic File Name Column Layout with Hugging Format Badges: Replaced fixed-width truncation in the DataGrid
File Namecolumn withHuggingBadgePanel, allowing filename text to expand dynamically as the column is resized while keeping format badges (CBR,CBR ➔ CBZ) hugging the right side of the text and gracefully truncating long filenames with ellipsis only when column boundaries are reached. - Bulk Scrape Queue Window Layout & Minimum Size Enforcement: Enforced responsive minimum window dimensions (
MinWidth="1160",MinHeight="580") and refactored the bottom actions bar layout into auto-sized control columns with an elastic spacer, preventing theStrip Detected Intro Pagescheckbox and adjacent controls from getting compressed or bunched together on narrower window widths. - Inspector ScrollBar Viewport Padding: Added right viewport padding (
Padding="0,0,12,0") toScrollViewercontainers across the sidebar tabs (Details,Bulk Edit,Bulk Tools), preventing textboxes and input controls from colliding with or sitting proudly beneath the vertical scrollbar. - DataGrid Column Header MinWidth Constraints: Configured explicit
MinWidthconstraints and adjusted default widths across all 35 DataGrid columns inMainWindow.axamlandBulkScrapeQueueWindow.axaml, ensuring column headers (e.g.Black & White,Age Rating,Language ISO,Page Count,Untagged,Manga (RTL)) are never truncated on initial load or during interactive column resizing. - Prevent Premature Bitmap Disposal During Cache Eviction: Removed aggressive manual
.Dispose()invocations on evicted image cache items inArchiveCoverServiceandLruImageCache, preventing UI layout passes (Image.MeasureOverride) from encountering disposed unmanaged handles during browsing and resizing. - Bulk Scrape Queue & Rename Error Tooltips: Added interactive hover tooltips (
ToolTip.Tip="{Binding StatusTooltip}") on status badges inBulkScrapeQueueWindowandRenamePreviewWindow, surfacing the exact error or collision message when hovering overErrororCollisionbadges. - Dynamic Single vs Bulk Auto-Tag Control Enabling: Automatically disables the singular
Auto-Tagtoolbar button, context menu items, and Tools menu commands whenever multiple items are selected in the main comic DataGrid with a helpful tooltip redirecting toBulk Auto-Tag, and re-enables singular auto-tagging when exactly 1 item is chosen. - Bulk Auto-Tag Retry for Errored Items: Fixed an issue in
BulkScrapeQueueViewModelwhere clickingApply Matched to Comic Archivesa second time failed to attempt saving remaining errored items due to an overly restrictive status filter. Errored items with matched candidates remain selected and are now properly re-evaluated and retried on subsequent apply clicks.
📦 Downloads & Installation Notes
🍏 macOS Installation Note
Because InkTag is currently unnotarized:
- Drag
InkTag.appinto/Applications. - Run the following command in Terminal to clear the download quarantine:
xattr -cr /Applications/InkTag.app
(Alternatively, go to System Settings > Privacy & Security and click Open Anyway).
🤖 Model Context Protocol (MCP) Server Usage
- macOS (bundled):
/Applications/InkTag.app/Contents/MacOS/InkTag.Mcp - Windows / Linux / macOS (standalone downloads): Use the dedicated
InkTag-Mcp-*packages.
Release v0.12.3
🚀 What's Changed in v0.12.3
Added
- CBR ➔ CBZ Conversion Transparency & Pre-Save Notices:
- Dynamic In-Grid Format Badges: Added responsive format pill badges in the DataGrid
File Namecolumn displaying a subtle grayCBRbadge on unmodified CBR files that dynamically transitions to an amberCBR ➔ CBZconversion badge when modified (IsDirty). - Comprehensive Explanatory Tooltips: Added informative tooltips explaining why CBR (RAR) files are repacked into modern, open-standard CBZ (ZIP) files upon saving.
- Inspector Details Notice: Displays the format badge and conversion reminder in the File Information sidebar panel.
- Pre-Save Confirmation Dialog: Added
CbrConversionConfirmWindowmodal displaying a list of all affected CBR files prior to saving, with a "Do not ask again" preference checkbox. - Configuration Setting: Added
ConfirmCbrToCbzConversionsetting toAppSettingsand the Settings GUI window under General preferences.
- Dynamic In-Grid Format Badges: Added responsive format pill badges in the DataGrid
- Core Refactoring & Modernization (Code Review Implementation):
- Modularized Core Services: Extracted
ComicInfoXmlSanitizer(XML sanitization, coercion, and validation),ArchiveSwapService(atomic swap, rollback safety, integrity validation), andComicArchiveHandler(multi-tiered ZIP seek, non-seekable streams, SharpCompress fallback).MetadataEditoracts as a unified façade maintaining 100% backward compatibility. - Custom Domain Exception Hierarchy: Added
InkTagExceptionbase class and specialized domain exceptions (ComicArchiveException,ComicArchiveCorruptException,MetadataXmlSanitizationException,UnsafeArchiveEntryException) underInkTag.Core.Exceptions. - Native Async API Overloads: Implemented
ReadMetadataAsync,EditMetadataAsync,BulkEditMetadataAsync,ExtractCoverImageBytesAsync, andGetCoverHashAsyncwithCancellationTokenpropagation and progress reporting. - Comprehensive XML Documentation: Added standard
/// <summary>docstrings across all public schema properties inComicInfo.cs.
- Modularized Core Services: Extracted
Changed
- Save Status Bar Progress Reporting:
MainWindowViewModel.SaveAllAsyncnow explicitly reports CBR ➔ CBZ conversion counts during batch saves (e.g.Saving (1/3): Issue.cbr (CBR ➔ CBZ)...) and in the final completion message. - Cached
XmlSerializerInstances:ComicInfoXmlSanitizernow caches staticXmlSerializerinstances, eliminating runtime dictionary lookups and heap allocations per read/write cycle. - Lazy Directory File Enumeration: Replaced
Directory.GetFileswithDirectory.EnumerateFilesacrossMetadataEditor,AgentOperations, andComicScannerServiceto stream file paths lazily and eliminate large upfront array allocations when processing massive comic libraries. - Asynchronous GUI & MCP Adoption: Updated
ArchiveCoverServiceandComicScannerServiceto consume non-blocking async methods.
Fixed
-
Bulk Auto-Tag Queue Button Label: Fixed misleading
"Saving..."label on the bottom action button while the queue is actively searching and matching covers on ComicVine. It now clearly displays"Searching & Matching..."during the search phase and"Saving to Archives..."during the write phase. - Top Control Bar Overflow in Bulk Queue: Resolved control clipping where the Cancel button overflowed the top card by adopting a responsive 3-column layout and compact spacing.
-
ViewModel Path-Change False-Dirty Trigger: Fixed a bug where updating a comic's path (
.cbr$\rightarrow$ .cbzor file renaming) triggered property change notifications that erroneously markedIsDirty = true. -
Bulk Scrape CBR
$\rightarrow$ CBZ Path Synchronization: EnsuredBulkScrapeQueueServiceimmediately updates item paths to.cbzafter conversion so subsequent file renaming and in-place main grid reloads reference the correct file.
📦 Downloads & Installation Notes
🍏 macOS Installation Note
Because InkTag is currently unnotarized:
- Drag
InkTag.appinto/Applications. - Run the following command in Terminal to clear the download quarantine:
xattr -cr /Applications/InkTag.app
(Alternatively, go to System Settings > Privacy & Security and click Open Anyway).
🤖 Model Context Protocol (MCP) Server Usage
- macOS (bundled):
/Applications/InkTag.app/Contents/MacOS/InkTag.Mcp - Windows / Linux / macOS (standalone downloads): Use the dedicated
InkTag-Mcp-*packages.
v0.12.1
🚀 What's Changed in v0.12.1
Added
- Batch-Level Transaction Rollbacks:
- Assigns a unique
BatchJobId(e.g.batch_20260822_123456_a4f910) to multi-file operations across Core, GUI, and MCP. - New MCP tools
ListBatchJobsandRestoreBatchJobenabling atomic, single-command rollback of entire multi-file batches.
- Assigns a unique
- Rich Metadata Provenance & Forensic Audit Trail:
- Captures pre-write SHA-256 source hash, 64-bit cover visual
dHash, remote matched thumbnail URL, match confidence, visual similarity score, change reason, and property-level diffs in the backup manifest. - New MCP tool
GetBackupProvenanceto inspect complete forensic provenance for any snapshot. - Enhanced embedded
ComicInfo.xml<Notes>attribution tag with cover match similarity percentages (e.g.[Cover Match 97%]).
- Captures pre-write SHA-256 source hash, 64-bit cover visual
- MCP Strict Read-Only Mode (
INKTAG_MCP_READ_ONLY=true/--read-only):- Adds environment variable and command-line flag enforcement to prevent all file modifications, renames, and archive writes during audit and indexing agent sessions.
- Returns explicit
UnauthorizedAccessExceptionerror messages when write operations are attempted.
- Automated Pre-Write Metadata Backups & Disaster Recovery:
- Automatic timestamped snapshotting of
ComicInfo.xmlprior to any archive modification or metadata write across Core (EditMetadata,UpdateMetadataXml), GUI, CLI, and MCP. - Backups are stored cleanly in the user's isolated application data directory (
~/.local/share/InkTag/backups/) with automatic retention cleanup. - New MCP tools
ListMetadataBackupsandRestoreComicBackupto query history and instantly rollback comic archives to earlier metadata states.
- Automatic timestamped snapshotting of
Changed
- Safe-by-Default Dry-Runs for MCP Mutating Tools:
- Mutating tools (
UpdateComicMetadata,RenameComicFiles,ScrapeComicMetadata,BulkScrapeDirectory) now default todryRun = true, requiring AI agents to explicitly passdryRun = falseto commit disk changes.
- Mutating tools (
📦 Downloads & Installation Notes
🍏 macOS Installation Note
Because InkTag is currently unnotarized:
- Drag
InkTag.appinto/Applications. - Run the following command in Terminal to clear the download quarantine:
xattr -cr /Applications/InkTag.app
(Alternatively, go to System Settings > Privacy & Security and click Open Anyway).
🤖 Model Context Protocol (MCP) Server Usage
- macOS (bundled):
/Applications/InkTag.app/Contents/MacOS/InkTag.Mcp - Windows / Linux / macOS (standalone downloads): Use the dedicated
InkTag-Mcp-*packages.
v0.12.0
🚀 What's Changed in v0.12.0
Added
- Light Mode, Dark Mode & System Default Theme Support:
- Added configurable
ThemeMode(System,Dark,Light) inAppSettingswith instant, dynamic runtime theme switching without application restarts. - Added Appearance & Theme card in the General Settings tab with real-time live preview on dropdown selection and rollback on Cancel.
- Added quick View > Theme submenu (
System Default,Dark Mode,Light Mode) to both the desktop menu bar and macOS native menus. - Created complete semantic
ThemeDictionariesfor Avalonia (AppBackgroundBrush,AppCardBrush,AppSurfaceBrush,AppBorderBrush,AppTextPrimaryBrush,AppTextSecondaryBrush,AppTextMutedBrush,AppInputBackgroundBrush,AppAccentBrush, etc.). - Added theme-aware dirty row highlighting with soft pastel mint (
#E6F4EA) in Light Mode and deep emerald (#1A3828) in Dark Mode. - Refactored all modal dialogs (
SettingsWindow,AboutWindow,ScraperMatchWindow,BulkScrapeQueueWindow,RenamePreviewWindow,SeriesSearchWizardWindow,PromptWindow,ApiKeyRequiredWindow,ErrorSummaryWindow,ThirdPartyLicensesWindow) to adapt seamlessly across themes.
- Added configurable
Changed
- Targeted UI Polish & Visual Harmony:
- Unified Toolbar Actions: Converted utility tools (
Save All,Auto-Tag,Bulk Auto-Tag,Sync to Komga,Refresh,Inspector) to clean neutral outline buttons with subtle borders, reserving solid accent highlights strictly for the primary action (Open Folder...). - Segmented Filter Pill Control: Encapsulated
All,Untagged, andModifiedfilters into a unified segmented pill group with clean active highlight fill and neutral typography. - Soft Neutral Framed Status Bar: Transformed the bottom status bar from solid saturated blue into a framed soft neutral (
#F8FAFCin Light Mode with#64748Bslate text;#18181Bin Dark Mode with#94A3B8text) with slim accent progress tracking.
- Unified Toolbar Actions: Converted utility tools (
- Scraper & Queue DataGrid Fixes:
- Re-added dedicated Status badge column in Bulk Auto-Tag Queue DataGrid displaying real-time colored status badges (
Matched,Review Needed,Unmatched,Error). - Fixed property bindings for candidate thumbnails, series titles, confidence percentages, and visual match indicators in single and bulk match dialogs.
- Normalized consecutive whitespace in
ComicVineProvider.CleanStringto ensure high-confidence matching for series titles with non-standard spacing.
- Re-added dedicated Status badge column in Bulk Auto-Tag Queue DataGrid displaying real-time colored status badges (
📦 Downloads & Installation Notes
🍏 macOS Installation Note
Because InkTag is currently unnotarized:
- Drag
InkTag.appinto/Applications. - Run the following command in Terminal to clear the download quarantine:
xattr -cr /Applications/InkTag.app
(Alternatively, go to System Settings > Privacy & Security and click Open Anyway).
🤖 Model Context Protocol (MCP) Server Usage
- macOS (bundled):
/Applications/InkTag.app/Contents/MacOS/InkTag.Mcp - Windows / Linux / macOS (standalone downloads): Use the dedicated
InkTag-Mcp-*packages.
v0.11.1
🚀 What's Changed in v0.11.1
Added
- Standardized Tagging Notes Attribution: Automatically generate standard attribution notes in the
<Notes>metadata field when scraping from ComicVine (Tagged with InkTag <version> using info from Comic Vine on YYYY-MM-DD HH:MM:SS. [Issue ID <id>] [Volume ID <volId>]). Smartly preserves user custom comments and previous notes, with a toggle in Settings > Scraping. - Interactive DataGrid Column Resizing: Enabled user column width resizing on the main spreadsheet (
CanUserResizeColumns="True") and widened compact date columns (Month,Day,Year) to prevent header clipping. - Modern Tabbed Settings Interface: Re-architected the Settings dialog into 4 focused categories (
⚙️ General,🔍 Scraping,🌐 Komga Server, and🛠️ Diagnostics & Advanced) using rounded card containers. - Session Tab Persistence: Settings window remembers the active tab across opens during the application session.
- Diagnostics & Log Utilities: Added direct "Open Logs Directory" action and "Reset to Defaults" button in the Advanced settings tab.
- Komga Media Server REST API Integration: Direct REST API integration with self-hosted Komga servers (
KomgaClient,KomgaSyncService). - Targeted Sub-Second Cache Invalidation: Automatic and manual targeted book/series analysis (
POST /api/v1/books/{id}/analyze,POST /api/v1/series/{id}/analyze) updating web and mobile readers instantly without full-library rescans. - StoryArc & SeriesGroup to Komga Collection Sync: Automatic creation and synchronization of Komga Collections from
<StoryArc>and<SeriesGroup>tags. - Smart Path Translation: Relative hierarchy resolution across Komga library roots with support for optional local-to-server path prefix mapping (
KomgaPathMappings). - Komga Desktop GUI Controls: Added dedicated Komga server configuration in Settings with live connectivity testing, "Sync to Komga" toolbar button, menu items, and DataGrid context menu integration.
- Komga MCP Server Tools: Exposed
CheckKomgaServer,SyncKomgaBookOrSeries, andAuditKomgaLibraryfor AI agent remote server management.
Fixed
- MacOS Application Settings Menu: Added
Settings...(Cmd+,) to the macOS Application menu (InkTag Desktop) andToolsNativeMenu. - Komga URL & Auth Redirect Resilience: Automatically normalize server base URLs (stripping
/login,/dashboard), passX-Requested-Withheaders to prevent HTML redirect loops, and handle API authentication errors gracefully. - MacOS Logs Directory Revealer: Fixed Finder log folder opening on macOS by invoking
/usr/bin/openwith direct file reveal (-R) arguments. - Series Wizard Issue Pluralization: Display "1 Issue" (or "1 total issue") instead of "1 Issues" when a series contains only a single issue.
📦 Downloads & Installation Notes
🍏 macOS Installation Note
Because InkTag is currently unnotarized:
- Drag
InkTag.appinto/Applications. - Run the following command in Terminal to clear the download quarantine:
xattr -cr /Applications/InkTag.app
(Alternatively, go to System Settings > Privacy & Security and click Open Anyway).
🤖 Model Context Protocol (MCP) Server Usage
- macOS (bundled):
/Applications/InkTag.app/Contents/MacOS/InkTag.Mcp - Windows / Linux / macOS (standalone downloads): Use the dedicated
InkTag-Mcp-*packages.
v0.11.0
🚀 What's Changed in v0.11.0
Added
- Legacy ComicBookInfo (CBI) Ingestion: Support for reading legacy ComicBookInfo JSON embedded in ZIP archive comments and internal
ComicBookInfo.jsonfiles. - Automated Upgrade to ComicInfo.xml v2.1: Ingests CBI metadata and upgrades archives to modern, schema-compliant
ComicInfo.xml v2.1upon saving. - Dual-Format Merging: Prioritizes
ComicInfo.xmlwhen present, while backfilling missing/empty fields from legacy CBI comments. - CBI Setting Toggle: Added
ClearLegacyZipCommentsOnUpgradein Settings (defaulttrue) to strip obsolete ZIP comments on upgrade. - Hierarchical Path Inference: Multi-level ancestor folder walking in
ComicFilenameParserto resolve Series, Year, and Volume from folder structures likeBatman (2016)/Vol 1/001.cbzwith category directory filtering. - MCP Path Sandboxing: Strict security root sandboxing (
AllowedRootPaths/INKTAG_ALLOWED_ROOT_PATHS) confining AI agent tool access to safe workspace directories. - Rate-Limit Backoff: Automatic exponential backoff retry (HTTP 420 / 429) in
RateLimitedHttpClientwithRetry-Afterheader support. - Scraper Cache Write Debouncing: 2-second debounced dirty buffer flush in
ScraperCacheServiceto prevent O(n²) disk serialization.
Changed
- Recursive Scan Default: "Scan Subfolders Recursively" is now enabled by default on application launch.
- Filter-Aware Bulk Actions: Bulk Auto-Tag, Batch Rename, and Inspector bulk edits operate strictly on filtered items (
DisplayedComics) when filtering by Untagged or search queries.
📦 Downloads & Installation Notes
🍏 macOS Installation Note
Because InkTag is currently unnotarized:
- Drag
InkTag.appinto/Applications. - Run the following command in Terminal to clear the download quarantine:
xattr -cr /Applications/InkTag.app
(Alternatively, go to System Settings > Privacy & Security and click Open Anyway).
🤖 Model Context Protocol (MCP) Server Usage
- macOS (bundled):
/Applications/InkTag.app/Contents/MacOS/InkTag.Mcp - Windows / Linux / macOS (standalone downloads): Use the dedicated
InkTag-Mcp-*packages.
v0.10.3
🚀 What's Changed in v0.10.3
Fixed
- Windows Path Parsing in MCP: Fixed path separator normalization and splitting for Windows runners during MCP root validation.
- Test Isolation: Isolated unit test temporary directories to prevent filesystem collisions on CI runners.
📦 Downloads & Installation Notes
🍏 macOS Installation Note
Because InkTag is currently unnotarized:
- Drag
InkTag.appinto/Applications. - Run the following command in Terminal to clear the download quarantine:
xattr -cr /Applications/InkTag.app
(Alternatively, go to System Settings > Privacy & Security and click Open Anyway).
🤖 Model Context Protocol (MCP) Server Usage
- macOS (bundled):
/Applications/InkTag.app/Contents/MacOS/InkTag.Mcp - Windows / Linux / macOS (standalone downloads): Use the dedicated
InkTag-Mcp-*packages.
v0.10.0
🚀 What's Changed in v0.10.0
Added
- Bulk Auto-Tag Queue Pipeline: Streaming parallel identification queue with cover visual hashing (
dHash), series volume clustering, and duplicate protection. - Template-Based File Renamer:
ComicFileRenamerengine supporting tokenized renaming templates ({Series} #{Number:3} ({Year})) with collision prevention across Core, GUI, CLI, and MCP.
📦 Downloads & Installation Notes
🍏 macOS Installation Note
Because InkTag is currently unnotarized:
- Drag
InkTag.appinto/Applications. - Run the following command in Terminal to clear the download quarantine:
xattr -cr /Applications/InkTag.app
(Alternatively, go to System Settings > Privacy & Security and click Open Anyway).
🤖 Model Context Protocol (MCP) Server Usage
- macOS (bundled):
/Applications/InkTag.app/Contents/MacOS/InkTag.Mcp - Windows / Linux / macOS (standalone downloads): Use the dedicated
InkTag-Mcp-*packages.
v0.9.1
🚀 What's Changed in v0.9.1
Fixed
- Malformed XML Auto-Recovery: Resilient handling of malformed, unordered, or corrupted
ComicInfo.xmlduring metadata edit operations, guaranteeing XML schema compliance upon repack.
📦 Downloads & Installation Notes
🍏 macOS Installation Note
Because InkTag is currently unnotarized:
- Drag
InkTag.appinto/Applications. - Run the following command in Terminal to clear the download quarantine:
xattr -cr /Applications/InkTag.app
(Alternatively, go to System Settings > Privacy & Security and click Open Anyway).
🤖 Model Context Protocol (MCP) Server Usage
- macOS (bundled):
/Applications/InkTag.app/Contents/MacOS/InkTag.Mcp - Windows / Linux / macOS (standalone downloads): Use the dedicated
InkTag-Mcp-*packages.