Two Packages, One Server: Metadata CSVs, Covers and PDFs for 39 Products
Description and use
An automated toolkit that generates platform‑specific CSV headers, tracks uploads, converts Markdown to styled PDFs, creates covers and thumbnails, and packages assets into ZIPs, enabling the successful publication of 39 products on a single‑core, 2 GB RAM server.
Problem
Rejections from stock platforms due to incorrect CSV headers and duplicate uploads caused wasted time and effort.
Outcome
Produced 39 compliant product packages (856 MB) on a 1 vCPU, 2 GB server, eliminating manual errors and duplicate uploads.
Workflow
- Generate metadata CSV with make_metadata.py specifying platform and file extensions
- Supply real titles and keywords via titles.json if needed
- Track pending uploads with upload_tracker.py pending items.txt
- Mark items as done with upload_tracker.py done "asset-001.jpg"
- Check status with upload_tracker.py status
- Convert Markdown documentation to PDF using md2pdf.py content.md product.pdf "My Product Title"
- Package product assets, cover, and thumbnail into a zip with pack_product.py my-product "My Product" "A short subtitle" 9
- Use environment variable PACK_ROOT or --dir to control output location
- Run entire pipeline on a single-core server, ensuring one process at a time, freeing memory with gc.collect(), measuring peak RSS, isolating heavy renders in subprocesses, and rendering at required resolution
Evidence
One column was out of order in the CSV. That's it.
I built one script, make_metadata.py, that writes the exact header each platform demands and nothing else.
It remembers what you posted: python upload_tracker.py pending items.txt ... python upload_tracker.py done "asset-001.jpg"
md2pdf.py turns a Markdown file into a clean styled PDF with headings, tables, lists and links
pack_product.py zips the files and renders two images: a cover at 1280×720 and a thumbnail at 600×600.
The full pipeline produced 39 products, 856 MB of output, from a single-core server with no GPU.
- Record date: 2026-10-24T14:41:08.853Z