How A 15-Column Dreamstime CSV And A Upload Tracker Fixed My Rejection And Double-Post Problems
Description and use
Automated scripts make_metadata.py and upload_tracker.py eliminate CSV header errors and double uploads, enabling smooth submissions to Dreamstime, Adobe Stock, and Vecteezy.
Problem
Hand‑edited CSVs with incorrect column order caused Dreamstime to reject uploads and led to double‑posting when re‑running pipelines.
Outcome
The two scripts eliminated CSV header rejections and prevented duplicate uploads, enabling the author to ship 39 products (856 MB) from a single 1 vCPU, 2 GB RAM server.
Workflow
- 1. Run
make_metadata.py ./my-assets --platform dreamstime --out dreamstime.csv --ext .jpgto generate a 15‑column CSV matching Dreamstime’s exact header order. - 2. Use
upload_tracker.py pending items.txtto list assets not yet uploaded. - 3. Upload each asset, then immediately run
upload_tracker.py done "asset-001.jpg"to mark it as posted. - 4. Run
upload_tracker.py statusto verify all items are completed. - 5. Repeat for other platforms with appropriate
--platformflag.
Evidence
Dreamstime's importer doesn't guess. It reads the header row, checks it against its expected 15-column layout, and fails the whole file if one column is missing or renamed.
The script knows the exact header each platform demands and writes that header and nothing else.
The key habit is marking done immediately after each successful upload, before the next one starts, not at the end of the batch.
Both scripts run on nothing but Python.
- Record date: 2026-10-15T20:40:59.203Z