From Filenames to Ranked Keywords: Casing and Title Rules in a Stdlib-Only Metadata Script
Description and use
The script generates CSVs with exact headers and normalizes titles and keywords, eliminating upload errors and rejections, and runs on minimal hardware.
Problem
Uploading image assets to stock platforms fails when CSV headers or metadata are incorrect, causing wasted rendering time and rejection.
Outcome
The workflow eliminates header‑related upload failures, reduces keyword rejection rates to near zero, and runs on a 1 vCPU, 2 GB RAM server without external dependencies.
Workflow
- Generate asset filenames programmatically
- Run make_metadata.py to create CSV with platform‑specific headers
- Optionally provide titles.json to override filename titles and keywords
- Ensure titles are title‑cased and keywords are lowercase, ordered by relevance
- Use upload_tracker.py to record submitted assets and avoid duplicates
- Submit CSV to stock platform
- Review any rejection notes and adjust titles.json if needed
Evidence
I once submitted a batch of 40 vectors to Adobe Stock and watched 11 of them bounce for the same dumb reason: my CSV had a header column in the wrong position.
The script writes the header row the platform demands and nothing else. No extra columns, no reordered fields, no BOM surprises from whatever editor touched the file last.
Adobe allows up to 49 keywords per asset, but the first ten carry the most weight in their relevance ranking.
The rule I follow: first keyword matches the title, next nine are the strongest literal descriptors, everything after that is style and use case.
The whole pipeline ran on a 1 vCPU, 2 GB RAM server with no GPU. Pandas alone would have eaten a chunk of that 2 GB for a job that is fundamentally reading and writing text rows.
- Record date: 2026-10-16T16:41:22.427Z