issues/completed/10-015a-migrate-image-manager-to-sources-loader.md
Issue 10-015a: Migrate image-manager to sources-loader
Priority: Medium
Phase: 10 (Developer Experience & Tooling)
Status: Open
Created: 2026-01-30
Parent Issue: 10-015
Current Behavior
src/image-manager.lua reads image directories from the legacy input_sources config:
-- Lines 44-57 of image-manager.lua
local function load_config()
local config = unified_config.image_integration or {}
local media_path = unified_config.input_sources and unified_config.input_sources.media_attachments_path
if media_path then
config.image_directories = {media_path}
else
config.image_directories = {"input/media_attachments"} -- fallback
end
return config
end
This is the only remaining dependency on input_sources in the codebase, blocking full completion of 10-015.
Intended Behavior
image-manager.lua should use sources-loader to get image directories from the unified sources.images config:
sources = {
images = {
enabled = true,
directories = {
{ name = "my-art", path = "input/media_attachments/my-art" },
{ name = "things-I-almost-posted", path = "input/media_attachments/things-i-almost-posted" },
{ name = "poem-pictures", path = "input/media_attachments/poem-pictures" },
},
supported_formats = {"png", "jpg", "jpeg", "gif", "webp", "svg"},
max_file_size_mb = 100,
},
}
Benefits:
- No fallbacks - Errors clearly if config is missing (follows "no fallbacks" design principle)
- Multi-directory support - Already supports multiple named directories
- Unified config - All source paths in one place
- Enables removal of legacy
input_sourcessection
Suggested Implementation Steps
- [x] Add sources-loader require to image-manager.lua
- [x] Update load_config() to use sources-loader.get_directories("images")
- [x] Use sources.images settings for supported_formats and max_file_size_mb
- [x] Remove fallback logic - error if sources.images not configured
- [x] Test image discovery with updated config
- [x] Remove input_sources section from config.lua
Related Documents
/issues/10-015-unified-input-sources-config.md- Parent issue/src/image-manager.lua- Image cataloging system/libs/sources-loader.lua- Sources config reader module/config.lua- Unified configuration
Implementation Notes (2026-01-30)
Files Modified
src/image-manager.lua- Added sources-loader require, rewrote load_config() to use sources-loaderconfig.lua- Removedinput_sourcessection, added fediverse-media directory to sources.imagesscripts/extract-fediverse.lua- Removed fallback to input_sources, errors if sources.fediverse not configuredscripts/extract-messages.lua- Removed fallback to input_sources, errors if sources.messages not configuredscripts/extract-notes.lua- Removed fallback to input_sources, errors if sources.notes not configured
Key Changes
- image-manager.lua load_config():
- Now uses
sources_loader.get_source("images")andsources_loader.get_directories("images") - Errors clearly if sources.images not configured (no fallback)
- Reads supported_formats and max_file_size_mb from sources.images
- config.lua sources.images:
- Added
fediverse-mediadirectory pointing toinput/media_attachments/files - Marked user image directories (my-art, things-i-almost-posted, poem-pictures) as optional
- All extractors:
- Removed
config.input_sources.*fallback code - Now error with clear message if sources section not configured
- Follow "no fallbacks" design principle
Design Decisions
- No fallbacks: Following user's "no fallbacks" preference, all scripts now error clearly if sources config is missing rather than silently using defaults
- Optional directories: User image directories marked as optional (warn on missing, don't error)
- Fediverse media path: Added
input/media_attachments/filesto match actual Mastodon archive structure
ISSUE STATUS: ✅ COMPLETE