CLIENT WORKPRODUCTION

Watch Catalogue Operations Hub

A 240-variant watch collection composited in under 5 minutes — and a hub any successor can pick up cold.

AT A GLANCE

AT A GLANCEWATCH-CATALOGUE-HUB
STATUS
PRODUCTION
TIMELINE
2026-05 — 2026-05 · 16 DAYS
LANGUAGES
Python / AutoHotkey / Markdown
CATEGORY
CLIENT WORK
~0

RENDERS DELIVERED

OUTCOME

Delivered ~290 renders across 4 collections; a 240-variant collection now composites in under 5 minutes, and the client re-engaged after a 14-month gap with zero discovery phase.

Watch Catalogue Operations Hub cover

METRICS

~0

M.01RENDERS DELIVERED

Finished catalogue renders across 4 watch collections (2024-25), transparent-background, 2600×4000 px and above. Sum of per-collection folder labels (12 + 10 + 240 + 28); the largest batch has ~209 image files vs its 240 label — see source.

240 variants

M.02LARGEST SINGLE COLLECTION

One collection automated end-to-end via the Python batch-render and compositor pipeline

<5 min

M.03FULL-COLLECTION COMPOSITOR RUNTIME

Composites the full ~240-variant collection once layer PNGs are exported — down from manual work measured in days. Per engagement-history.md.

0

M.04LINES OF PRODUCTION PYTHON

Across the repo's scripts (reference parser, batch renderer, scene utilities); excludes the production compositor script held locally

THE CASE, CHAPTER BY CHAPTER

CH.01

The problem

A Swiss luxury watchmaker (Geneva) needed hundreds of catalogue renders per collection, but every brief was an undocumented code string and the work ran inside a locked-down remote desktop.

Each watch variant — case material, dial colour, diamond setting — needs a studio render at 2600 × 4000 px or larger, and the largest collection runs to 240+ variants. The reference codes pack all of that into one opaque string, and the same variant could appear under three different codes depending on the folder. There was no clipboard access and no documented process.

CH.02

What I built

A documented operations hub that turned an ad-hoc, in-one-person's-head process into a repeatable, auditable pipeline.

A reference decoder maps every code's four positional blocks to render specs, with a Python parser that flags unknown tokens instead of guessing. A workflow layer standardises how jobs arrive, get briefed, and get delivered. A scripted pipeline runs the rendering and compositing — all backed by an engagement history readable cold by anyone who takes over.

CH.03

The automation that pays off

A Python batch pipeline composites a full 240-variant collection in under 5 minutes — work that was previously manual and days long.

An AutoHotkey autotyper types scripts character-by-character into the remote desktop, bypassing the clipboard block. The Blender renderer chains scenes through a render_complete handler and timer, staying stable under heavy Cycles loads where a naive loop deadlocks the UI. A CSV-driven compositor then stacks the case, numbers, and hands layers into finished PNGs, resumable via lock-files if interrupted.

CH.04

Built to survive a handoff

When the contract resumed after a 14-month gap, the full context was available on day one — no discovery phase.

Every fact lives in one Markdown file, tagged Confirmed / Draft / Placeholder so nothing unverified gets promoted silently. The engagement history is a dated audit trail of every rate change, milestone, and open risk. A successor designer can read the hub cold and take over a collection without three weeks of rediscovery.

CH.05

Results and scale

~290 photorealistic renders delivered across 4 collections — and the cost per variant dropped sharply once the automation was in place.

The largest collection ran to ~240 variants, where the batch pipeline made the work cost-efficient; a later collection reused the same scene setup almost for free. 61 documents and 758 lines of Python make up the hub itself — the deliverable that makes re-engagement cheap and any handoff clean.

THE BUILD, WEEK BY WEEK

14 COMMITS — PEAK WEEK11 MAY 202625 MAY 2026

18 COMMITS — IN 17 DAYS — AVG 1/DAY

Docs
79.2% 3.9K
Python
15.2% 758
HTML
5.6% 278

FEATURES

Reference number decoderSplits any opaque watch reference string into case family, complication, material, and dial/finish — flagging unknown tokens instead of guessing, with confidence tags on every code.
Clipboard-free script deliveryTypes Python scripts character-by-character into the remote desktop, delivering code into a secure environment that blocks all clipboard transfer.
Blender batch-render pipelineRenders every scene in a file by chaining a render-complete handler and timer, staying stable under heavy Cycles loads where a direct Python loop deadlocks the UI.
CSV-driven layer compositorReads a variant table and stacks three render passes (case, numbers, hands) into finished PNGs inside Blender's bundled Python, resuming from lock-files if a batch is interrupted.
Single-scene variant architectureHolds every variant in one Blender scene with materials swapped by an embedded script, so one edit propagates to all variants and a successor can take over with no context transfer.
Docs-as-code knowledge baseKeeps product knowledge, workflow standards, and client history in one place, tagged by confidence and updated alongside the work, so the engagement resumes after any gap without rediscovery.

ARCHITECTURE

Reference knowledge baseDecodes the client's proprietary reference-number grammar and diamond-setting notation; source of truth for all abbreviation lookups
parse_reference.pyLightweight command-line parser that splits a reference string into its four blocks using the same tables as the reference docs
SendToRDP.ahkAutoHotkey autotyper: types a clipboard-loaded text file into the remote desktop session to bypass the clipboard restriction
batch_render_all_scenes_ui.pyBlender batch renderer: chains scene renders via a render_complete handler + timer, avoiding UI-thread deadlocks on heavy Cycles scenes
CSV compositor (keystroke.txt / batch_render.py)Reads a per-variant CSV, alpha-composites case/numbers/hands layer PNGs in Blender's bundled Python, outputs finished watch images with lock-file resumption
Scripted-scene architecture docBlueprint for single-scene multi-variant .blend files: one scene, named collections per variant axis, embedded Python driver, fully manual fallback
Engagement historyDated audit trail of every rate change, project milestone, scope conversation, and open risk — structured for cold readability across multi-month gaps

STACK

LANGPythonAutoHotkeyMarkdown
FXBlender Python API (bpy)Blender Compositor
INFRABlender 4.5RDP (remote desktop)Upwork

SKILLS DEMONSTRATED

Turning manual, repetitive production work into Python batch automation · Decoding undocumented client systems into clear, shared references · Building knowledge bases that survive handoffs and multi-month gaps · Photorealistic 3D rendering for product catalogues (Blender, Cycles) · Blender Python scripting (batch rendering, layer compositing) · Working inside locked-down, security-constrained client environments · Designing briefing, delivery, and audit-trail workflows for solo client work

THE CODE, MAPPED

72 NODES · 45 EDGES · 40 COMMUNITIES — EXTRACTED FROM THE CODEBASE BY TREE-SITTER

GRAPH