Doug McKay

Doug McKay

Full-stack engineer and creative practitioner. I build the production systems that automate the Adobe stack.

Currently: orchestration on my own Hermes Kanban layer rather than n8n or ComfyUI · Qwen 3.8 on local hardware, which on my own workloads is now outrunning Gemini 3.1 · Fable 5 and Kimi K3 as the daily workhorses.

Adobe tools

Ps
Photoshop
Master 10/10
Ae
After Effects
Advanced 8/10
Pr
Premiere Pro
Advanced 8/10
Me
Media Encoder
Advanced 8/10
Ai
Illustrator
Proficient 7/10
Ex
Express
Proficient 7/10
Fi
Firefly
Expert 9/10
TinkerCAD Advanced8/10
three.js Proficient7/10
Maya Familiar4/10
Cinema 4D Novice3/10
Blender Novice3/10
Unreal Engine Novice3/10

Self-assessed, 1–10, master at the top. The second row is the rest of what I reach for — listed at what it honestly is, including where it is thin.

Engineering

Production systems in front of real users, not prototypes. Python, TypeScript, Next.js/Astro, Azure and Cloudflare Workers. ~25 shipped products, several with live public URLs below.

Craft

Not familiarity — practice. After Effects, Premiere, Photoshop, Illustrator, and enough of the render chain to script it end to end. Former Flash/ActionScript developer.

In the room

I run the sessions myself — whole departments at a time, in person and over Zoom, as the speaker. Discovery, architecture, deployment and training are one engagement, not four vendors.

How the engagements run

1 · I am the speaker (with 4 ears)
Discover
I host the session and do the asking — entire departments, sometimes several at once, in person or over Zoom. The questions are about their actual day: what recurs, what they dread, where the hours disappear.
2 · Design
Architect
Those answers become agentic flows, designed against the tools the team already has rather than a stack they would have to adopt.
3 · Build
Deploy
I build and ship them. Running systems in front of real users, not a deck of recommendations handed to somebody else to implement.
4 · Adoption
Enable
Then I train the department on what was built, and on the custom systems already deployed for them. The measure is whether people are still using it the week after I leave.

The seam is the whole point. Plenty of people can build an agentic pipeline; plenty of others can stand in front of a marketing department. The engagements that stick need the same person to do both — because the flow you design is only as good as your understanding of the job it replaces, and that understanding comes from being the one asking the questions.

Current work — Firefly as the product photography pipeline

Edge AI and rugged computing catalogue · in build · current contract

Purpose-built edge AI systems for machine vision, robotics and physical AI — NVIDIA Jetson, Intel Core Ultra, IP66-rated rugged platforms that put inference where the data is created. A deep SKU catalogue where every unit has to be photographed identically, and none of them are pretty out of the box.

Firefly does the product library. Every unit is upscaled and cut out of its original shot, then presented on a consistent surface across the whole catalogue — so a page of five edge computers reads as one product family rather than five different photographers' work on five different days.

Premio AI Edge Computers category hero
Category hero — the unit cut out of its original plate and placed on a generated gradient surface
Premio product grid
Product grid — five SKUs, one consistent cutout treatment across the catalogue
JCO-6000-ORN product page hero
JCO-6000-ORN — upscaled cutout on a generated circuit-trace environment
JCO-6000-ORN detail section
“Look closer” — the same unit at full resolution, which is what the upscale step is for
Engineering
  • Ingested their entire existing image library off their live site, then ran batch background removal and upscale through Firefly and handed the cleaned set back to the web design agent that builds the pages
  • That is the whole point: the asset pipeline and the site generator are one system, so a catalogue migration is a batch job rather than a design project
  • Google Veo for video generation alongside the Firefly stills
  • Astro, deployed to Cloudflare Workers via Wrangler — static-fast at the edge, which matters when the pages are this image-heavy
  • Third manufacturer on the same platform pattern — the reusable half is the point, not the individual site
Creative & roadmap
  • Cutout treatment, shadow and surface direction that holds across a catalogue of visually dissimilar hardware
  • Next: extending into their marketing function for social content generation
  • Then: building generation directly into the publishing pipeline, so campaign assets are produced as part of shipping a product page rather than as a separate request to a design queue
Adobe FireflyUpscale Background removal Google VeoAstro + Wrangler Cloudflare WorkersBatch asset ingestion Web design agentNVIDIA Jetson / IP66 domain
In build Current contract. The roadmap is the part I care about: generation moving from a production step someone runs to a stage in the publishing pipeline — which is the only version of this that survives contact with a marketing team's actual workload.

Same pattern, two more manufacturers

Teguar Computers

teguar.computer
Medical, industrial and rugged computers · live · build, then enablement

Purpose-built computers for the places ordinary hardware does not survive — medical panel PCs certified to UL 60601-1, IP69K washdown industrial units, rugged edge systems. Every SKU needs to be seen in the environment it was built for, and photographing that is not viable: three shoots per unit, in facilities you cannot get a camera crew into. So each product is shot once, clean, and Firefly removes the background and generates the deployment scene.

Teguar Computers home page
Split-environment hero — two products composited into generated industrial and clinical scenes
Teguar NVIDIA edge AI page
NVIDIA edge AI — on-premise inference on the factory floor. 0 bytes sent to the cloud
Teguar technical guides index
Guides — every editorial illustration generated: an operating theatre, a washdown line, a rugged test lab, an IP-rating diagram, a fanless cooling cutaway. Firefly first, with nano banana where it fits
What I built
  • Full commercial storefront on Astro / Cloudflare Workers — catalogue, product detail, configurator, quote flow
  • Firefly background removal and scene generation wired into the asset pipeline rather than run by hand per image
  • Art direction of every generated environment: lighting, perspective, scale and reflection have to match the product plate or a clinician spots it instantly
  • Firefly is the default because the client already pays for Adobe. A tool the marketing team already has a licence and a login for is a tool they can keep using after I leave — that argument closes faster than any quality comparison
What I sold them next
  • Agentic training for their marketing and sales departments — a paid engagement teaching staff to hand their everyday tasks to agents
  • Training on the custom systems I had already deployed for them, so the tools stopped depending on me being available
  • The build created the credibility; the enablement is what made it stick
Adobe FireflyBackground removal Generative scene replacement AstroCloudflare Workers Enablement / training deliveryUL 60601-1 / IP69K domain
Live, and expanded Shipped, in market — and then the engagement grew into training. That is the part I care about: I did not just deliver a system and leave, I sold and ran the enablement that got a marketing and sales team using agents on their own work. A tool nobody is taught to use is a tool that quietly stops being used.

Cybernet Manufacturing

cybermed-g24 (in build)
Point-of-care medical computing · in build · current contract

The same platform pattern, second manufacturer — and the clearest healthcare case. The CyberMed G24 is a fanless, antimicrobial, UL 60601-1 certified all-in-one for active hospital wards: sealed bezel so clinicians can clean it with aggressive sanitizing sprays, dielectric isolation on every port. The page has to put that unit in a ward, and the ward is generated.

Cybernet CyberMed G24 product detail page
CyberMed G24 — product detail and live configurator; the hero places the unit in a generated hospital ward
Cybernet NVIDIA edge AI page
Edge AI — “AI that never leaves the building.” Dual RTX PRO 6000, 120B-class models, zero cloud egress
Engineering
  • Catalogue, product detail and live configurator (OS, RAM, storage) with a quote flow
  • One design system serving a second brand, so a new manufacturer is a configuration rather than a rebuild
  • Specification data modelled so a SKU's certifications and I/O drive the page instead of being retyped into it
Creative
  • A believability bar higher than consumer marketing — a clinician recognises a wrong ward instantly, and a wrong scene costs the sale
  • Brand system distinct from Teguar's while sharing the same underlying structure
Adobe FireflyGenerative scene replacement AstroCloudflare Workers E-commerce / configuratorUL 60601-1 / point of care
In build Current contract. The same client also runs the lead-intelligence hub below — the website and the sales system are one engagement, not two.

Cybernet Lead Intelligence

GIS lead-enrichment hub wired into an Adobe ColdFusion CRM
Inbound lead → lookalike discovery → enriched contacts → sales strategy · current contract

A central intelligence hub for a manufacturer's marketing and sales function. An inbound lead arrives from the website; the system finds lookalike companies, sources and enriches contacts, scores buying potential, plots the whole target set on a GIS map, and drafts the actual approach — contact strategy, email sequence, call script — per account.

The part I am proudest of is the least glamorous. This did not replace anything. It was integrated into the company's existing Adobe ColdFusion custom CRM over REST endpoints and webhooks, so an enriched account appears inside the system the sales team already uses, already trusts, and already has years of history in. Nobody had to adopt a second tool.

Cybernet lead intelligence GIS dashboard
315 target accounts across 12 verticals, scored and mapped. The contact panel is cropped out of this shot on purpose — it holds real people's details
Engineering
  • Lead ingestion from the website, lookalike-company discovery, contact sourcing and enrichment, buying-potential scoring across twelve verticals
  • Apify network integration for data a marketing department cannot otherwise reach — the difference between a list and a pipeline
  • Two-way integration with the incumbent Adobe ColdFusion CRM via REST APIs and webhooks, including de-duplication against records already in the CRM
  • GIS map interface over the full target set, with filtering by vertical, geography and whether an account has been CRM-checked
  • Generated per-account playbooks — contact strategy, email sequence, call script
Why it stuck
  • Integration beat replacement. A sales team will not move to a new system to chase a lead; they will act on one that shows up where they already work
  • De-duplication against the existing CRM was the trust feature — a tool that surfaces accounts you already own gets switched off in a week
  • The map is not decoration: territory is how a field sales force actually thinks, so the interface matches the mental model rather than the data model
Adobe ColdFusion CRMREST APIs / webhooks ApifyLead enrichment GIS / LeafletCloudflare Workers Agentic sales strategy
In use Live against a real pipeline. Worth noting the shape: the interesting engineering was not the AI — it was making the AI arrive inside a legacy Adobe system the business had already standardised on, which is the difference between a tool that gets demoed and one that gets used.

Flagship — Chirps: an almost 100% Adobe render pipeline

Text → lipsynced avatar video, generated and scheduled automatically · started June 2024 · commissioned work

A platform that turns a written post into a hyper-realistic lipsynced video asset in a distinctive on-screen format, then schedules it across social networks. The product is the video. The engineering is the render pipeline behind it — and that pipeline is Adobe applications driven as headless infrastructure by Python.

Built under commission for a venture capitalist selling technology into news media and film studios. That shaped every decision in it: the output had to match a broadcast on-screen treatment rather than a social-native one, and it had to come out the far end at a volume and consistency a newsroom would accept — which is why the render chain is Adobe applications on rails instead of a person in an editor.

Chirps landing page
chirps-navy.vercel.app — the on-screen format the pipeline renders, and the avatar/copy treatment it populates per post
Ingest
User submits an image. Agentic routine removes the background, corrects lighting, upscales.
Firefly
Matte
Video clip backgrounds stripped and replaced with a green screen so downstream keying is deterministic.
Express
Composite
Layers, keying and the branded on-screen treatment assembled programmatically.
After Effects
Assemble
Parts placed on a timeline in order and cut to length, per generated script.
Premiere Pro
Encode
Final output rendered to delivery specs per destination platform.
Media Encoder
Distribute
Scheduled publication to X, Rumble, Truth Social and YouTube.
API

Orchestrated by Python. Every stage above except distribution is an Adobe application or service being called as a build step.

How the delivery tier evolved
First
Python automation inside Adobe Express
Fastest path to a finished clip. Express did the matte and the assembly, driven from Python, and it got the product working end to end.
Then
A server running Adobe Premiere
Moved off the desktop so renders were not tied to a workstation. Same creative template, now on a machine that could take a queue.
Finally
Custom headless ffmpeg + Python
At per-clip volume the encode did not need a creative application at all. The template still came out of After Effects; only the delivery tier changed.

That progression is the point, not a retreat from the stack. The creative applications are where the treatment gets designed and where a human can still open the file and change it. The encode tier is a commodity, and once volume made it the bottleneck it belonged in a headless process — which is the same reasoning behind Media Encoder watch folders and behind Firefly Services existing as an API at all. Knowing which half of a pipeline is craft and which half is throughput is most of this job.

Express keying output — subjects matted to green screen
Output of the Express stage, in my Adobe library — source clips matted and replaced with a green screen so the After Effects template keys the same way every time. Two frames here are keyed; two still show the original plate with the matte edge drawn, which is the before/after of that step.
Engineering
  • Python orchestration driving After Effects, Premiere Pro and Media Encoder as scriptable render workers
  • Agentic workflow triggered on user submission — no human touches an asset between upload and published video
  • Web app for script authoring, avatar selection and scheduling
  • Delivery tier went through three generations — Python driving Adobe Express, then a Premiere render server, then a headless ffmpeg + Python encoder as per-clip volume grew
  • Originally served from Adobe ColdFusion; migrated to Astro on Cloudflare Workers
Creative
  • Designed the proprietary on-screen video format — a recognisable, high-impact treatment styled after broadcast lower-thirds
  • Compositing and keying decisions built into the AE templates the pipeline populates
  • Avatar direction, framing and brand identity
Adobe FireflyAdobe Express After EffectsPremiere Pro Media EncoderAdobe ColdFusion PythonAstro Cloudflare WorkersffmpegVoice cloning / lipsync
On hold What worked: lipsync quality is convincing, the pipeline runs unattended end to end, and it was aimed at exactly the customer this kind of system has to survive — media and entertainment, where volume and format discipline are the whole requirement. What did not: 3–6 minutes per lipsync plus ~1 minute to render and deliver is too slow for a scheduling product, and the UI was not good enough to ship. Parked pending a faster lipsync approach rather than declared finished.
Note on this write-up. The original orchestration code is no longer in my hands, so the architecture above is a retrospective description of a system I built and ran. The render half is rebuilt clean-room as adobe-render-bridge — an aerender wrapper, ExtendScript generation for After Effects / Premiere Pro / Media Encoder, a Media Encoder watch-folder driver, and a dry-run mode so the whole pipeline runs on a machine with no Adobe software installed. It is browsable below.

Browse the code

📁 adobe-render-bridge MIT
Drive After Effects, Premiere Pro and Adobe Media Encoder from Python as headless render workers. One JSON job spec goes in; a populated comp, a master render, and every delivery encode come out.
Python15 files1,787 lines Download .zip

Production pipelines and internal tooling

USB-stick product photography pipeline

Built for an e-commerce company
Physical trigger → automated cutout, dust removal, lighting correction → a link back

A product photographer plugs a USB stick into a Raspberry Pi sitting on the desk. That is the entire user interface. The pipeline ingests every image on the stick, cuts out the product, removes dust and sensor spots, corrects lighting, and emails back a single link to the finished set. No login, no upload dialog, no training session, no new tab.

Engineering
  • Raspberry Pi as an ingestion appliance — mount detection triggers the run, so the physical act of plugging in is the submit button
  • Batch orchestration with per-image retry, and a delivery link generated on completion
  • Model-agnostic generation layer — built against the Gemini API ("nano banana"), and the call site is one adapter
Why it worked
  • The team had already rejected two web tools. The blocker was never capability — it was that a photographer mid-shoot will not stop to use a web app
  • Removing the interface entirely was the adoption strategy, not a shortcut
  • Consistent output beats best-case output: every image gets the same treatment, so the catalogue looks like one catalogue
Raspberry PiBatch orchestration Gemini API (nano banana) Firefly-swappable
In use On the model choice: this shipped against Gemini, and it would run on Firefly today with no architectural change — Firefly now serves that same model family as a partner model, selectable alongside Adobe’s own. The orchestration, the trigger and the delivery are the engineering; the generator is a line in an adapter. Saying otherwise would be dressing it up.

Adobe in production, elsewhere

DMARC Director

tangent.com/dmarc
Email authentication and security auditing platform · live

A production platform that audits email servers and enforces DMARC, SPF and DKIM, with hosted MTA-STS, BIMI, SPF flattening and TLS reporting. The Adobe angle is the go-to-market: Express and Firefly run inside agentic routines that produce the marketing team's social content, so campaign creative for a security product is generated on a schedule rather than commissioned.

DMARC Director
tangent.com/dmarc — live platform; the marketing creative around it is generated by Express and Firefly on a schedule
Adobe ExpressAdobe Firefly Agentic content routinesDMARC / SPF / DKIM / BIMI
Live Shipped and in market.

YouPost

Internal social media automation
One of several internal marketing dashboards integrating Adobe services

Social publishing automation built on Adobe APIs: Firefly image generation and video generation calls, Express for product background removal, and scheduling on top. Part of a broader pattern — I have built a number of internal marketing automation dashboards that sit directly on Adobe services and applications rather than around them.

Firefly image generation API Firefly video generation APIAdobe Express Scheduling / distribution
Internal, in use Built for and used by an internal marketing function.

Custom models, compliance and regulated domains

On-premise inference for regulated clients

Hardware, networking and compliance design
HIPAA and FedRAMP environments · ongoing practice

Some clients cannot send their data to a hosted model. Under HIPAA or FedRAMP the agentic flow has to run inside their own boundary, which turns an AI project into a hardware, networking and audit problem before it is a software one. I do that whole side: specify and build the GPU inference hardware, design the network around it, and run the cloud HIPAA and FedRAMP compliance auditing and architecture for the parts that do stay in the cloud.

Rack telemetry: power draw, throughput and cost
Live rack telemetry — 487 W at the wall, and what that costs hourly through yearly, with the solar array and battery bank sized to carry it
GPU fleet management across local and LAN machines
Fleet view — four GPUs across three machines, local and over the LAN, with per-card model loading, VRAM, thermals, clocks and power
The build
  • Low-cost, low-wattage GPU inference on Intel hardware — or Apple silicon — rather than a rack of datacentre accelerators the client cannot power or cool
  • Running Qwen3.8 at 50–100 tokens/sec, which is hosted-frontier-model speed for the orchestration and execution workloads these flows actually do
  • Speed stopped being the interesting number a while ago. On my own workloads that local Qwen 3.8 is now outrunning Gemini 3.1 — which is what makes the compliance answer viable rather than a sacrifice the client has to accept
  • Custom management dashboard driving the on-site rack directly: model loading and placement across GPUs, thermal and utilisation telemetry, and live power draw
  • Because power is the real objection, the dashboard also costs it — electrical spend hourly through yearly, and the solar array and battery capacity that would carry the load overnight
Why clients need it
  • The compliance answer to “where does our data go” is a room, not a paragraph in a vendor's terms
  • Once inference is in-house, the cost model inverts — capital and watts instead of per-token billing, which is why the energy maths sits on the same screen as the throughput
  • Same discipline as the audit work: I have done the cloud-side HIPAA and FedRAMP design too, so the boundary is drawn deliberately rather than by accident
HIPAAFedRAMP GPU inference hardwareNetwork design Intel Arc / Apple siliconllama.cpp Qwen3.8Power & solar modelling
In production Relevant well beyond the regulated clients: every enterprise creative team eventually asks where their content goes when it hits a model. I can answer that from having built the alternative, not from having read the datasheet.
Software license management with a custom-trained model · live

A centralised license and subscription management platform — real-time tracking, renewal alerts up to 90 days out, unused and underused license detection, and audit-readiness. Built on a custom model trained on license data and compliance rules, not a general-purpose LLM with a prompt. No Adobe technology in this one; included because it is the clearest example of me training a domain model against a compliance corpus and putting it in front of paying users.

CUBES AI
tangent.com/cubes — software license management on a model trained against license and compliance data
Custom trained modelCompliance / audit SaaS platform
Live Shipped and in market.

ScribesAI — original build

Healthcare dictation to charts
Ambient clinical dictation · absorbed and redirected after acquisition

I helped build the technology behind an always-listening clinical dictation system that transcribed healthcare information into patient charts — LangChain orchestration over pre-trained open weights with fine-tuning on domain data. Healthcare and life sciences, with the data-handling constraints that come with it.

LangChainOpen-weight models Fine-tuningHealthcare & life sciences Always-on ASR
Contributed to an exit The project was absorbed and redirected, and contributed to a large sale for the company I was working for. Worth saying plainly: at roughly a year old, the underlying approach is already dated by current standards. It was the right architecture then and it would not be my first choice now.

Gunhawk

Custom model, custom hardware, heavy compliance
End-to-end build taken to acquisition · sold to a third party

A project that required a purpose-built AI model, custom hardware, and substantial regulatory and compliance research before anything could ship. I built AI agents to carry each leg of the work — research, model, hardware integration, compliance — and drove it through to completion and sale.

Custom AI modelCustom hardware Regulatory researchMulti-agent delivery
Sold Completed and sold to a third party.
Political data aggregation and prediction · live tool, being productised

Built as a live tool for a California congressional candidate: aggregates data from many sources to model political outcomes and let a campaign target voters directly. The client has since asked to turn it into a SaaS product.

Prism campaign intelligence
matrix1.base44.app — the live tool delivered to the campaign, now being productised at the client's request
Multi-source aggregationPredictive modelling Agent tooling
Live, expanding Delivered to a live campaign; the customer has asked to expand it into a product — the adoption-to-expansion path, in miniature.

Azure Security Scanner (Scout)

Buy-vs-build, argued with numbers
Cloud security auditing SaaS on an open-source engine · started Sept 2025

Enterprise-grade cloud security auditing at a fraction of market cost by wrapping ScoutSuite in a purpose-built dashboard and API. The interesting part was not the code — it was making the commercial case: Wiz, Orca and Prisma Cloud start around $20–30K a year for roughly 100 workloads and scale into six figures, against an open-source engine that produces the same foundational posture data. I owned the argument and then the architecture split across a three-person delivery team.

ScoutSuiteAzure Python APICustom UI
On hold Engine deployed and validated against a live Azure environment; UI built. Parked before the multi-cloud expansion to AWS and GCP.

Twenty-seven years on this stack

1999
Photoshop 5.5
Where it started. Still the tool I reach for first.
2005
FreeHand → Illustrator
Switched after Adobe acquired Macromedia.
Macromedia era
Flash / ActionScript
Shipped as a Flash developer — creative tool as a programming target, which is still the throughline.
Then
Adobe ColdFusion
Production hosting, including the first version of Chirps.
Now
Firefly, Express, Firefly Services
Generation and compositing as API calls inside automated pipelines.
Now
AE / Premiere / Media Encoder, scripted
Creative applications driven as headless render infrastructure.