
Version 0.1
artcurator 0.1.0
Major Release - Unified AI Interface
This release consolidates artwork analysis functions from artgemini and artopenai into a single, provider-agnostic interface.
Artwork Analysis Functions - Now Implemented
-
Reimplemented all
art_*functions with direct low-level API calls:-
art_about_ai()- Natural language artwork descriptions -
art_style_ai()- Extract stylistic features as structured data -
classify_styles_ai()- Standardize tags into categories -
art_profile_ai()- Concise artwork profiles -
art_profile_full_ai()- Comprehensive profiles with context
-
-
Provider abstraction - All functions support both Gemini and OpenAI:
# Auto-detect (defaults to gemini) art_about_ai("artwork.png") # Explicit provider art_about_ai("artwork.png", provider = "gemini") art_about_ai("artwork.png", provider = "openai") Centralized prompts - All prompts now in
inst/prompts/with version trackingUnified schemas - JSON validation schemas in
data-raw/schema-definitions.R
Implementation Details
- Functions call
artgemini::gemini_generate()orartopenai::openai_responses()low-level APIs - Provider-specific request builders in
R/internal-provider.R - Uses
artcore::b64EncodeImage()for image encoding - Uses
artcore::%||%for null coalescing
Dependencies
- Added to Imports:
artcore (>= 1.4.0)- Shared utilities - Updated to Imports:
artgemini (>= 0.2.0),artopenai (>= 0.10.0)- Low-level API exports - Removed from Imports:
base64enc,magick- Now provided by artcore
Bug Fixes
-
Cache configuration - Fixed
curator_cache_config()locked binding error:- Changed
.cache_configfrom list to environment - Replaced
<<-with direct environment assignment - Resolves “cannot change value of locked binding” error
- Changed
-
Context compression - Fixed
decompressAgentContext()lossless round-trip:- Restores
artworksas character vector (not list) after JSON deserialization - Restores
jsonclass on JSON string fields - Test now strips
from_cacheattribute before comparison
- Restores
-
httptest2 fixture recording - Fixed
path_mocks()preventing fixture generation:- Removed
fs::dir_create()that pre-created empty directories - httptest2 now correctly enters record mode when fixtures don’t exist
- Removed
Tests
- Updated httptest2 mocks to reference
artcorepackage forb64EncodeImage()mocking - All artwork analysis tests updated to use artcurator implementations
Documentation
-
New vignette:
quickstart.qmd- Comprehensive guide to artwork analysis functions -
Updated vignette:
artpipelines-integration.qmd- Migration guide from artopenai to artcurator -
Updated vignette:
advanced-ai-workflows.qmd- Fixed all gpt-4o → gpt-5.1 references - Updated: README.md, PLANS.md - Fixed model references
Migration from artgemini/artopenai
Consumers should migrate to artcurator functions. The art_* functions in artgemini/artopenai are now deprecated:
# Old (deprecated)
artgemini::art_style_ai(img)
artopenai::art_style_ai(img)
# New (recommended)
artcurator::art_style_ai(img, provider = "gemini")
artcurator::art_style_ai(img, provider = "openai")See vignette("artpipelines-integration") for complete migration guide.