Evergreen Digital Assets: Dynamic Images & Smart URL Redirects

A compact 19-node n8n workflow that keeps distributed images and links evergreen — fixing their addresses while updating their content on a schedule, so published assets never go stale.

19

workflow nodes
Deployment:

Self-Hosted

THE BRIEF

What the system needed to do.

This project is a lightweight n8n automation that keeps already-published digital assets permanently up to date. Instead of re-editing emails, forms, and templates after they ship, it gives an image a fixed hosting URL and a link a fixed redirect alias, then refreshes what each one points to on a schedule. A daily job repoints the link to current content, while an hourly job regenerates the image and commits it over the same GitHub path. The same stable addresses can be embedded in workflow stickers, n8n forms, or HTML emails — and updated years later without touching the originals.

The scope

Keep already-distributed images and links permanently up to date by making their content swappable without changing the asset itself.

DESIGN CHOICES

What makes the build interesting.

Marketers & automation builders

Permanent address, swappable content

Two independent update cadences

Three ready-made embedding patterns

THE ARCHITECTURE

Follow the flow.

  1. Initialise the redirect alias (run once) — create a short-link alias via the URL-redirect service to serve as the permanent, shareable link.
  2. Initialise the hosted image (run once) — commit an initial image file to a public GitHub repository to establish its permanent raw-content URL.
  3. Capture the download URL (run once) — read the committed file back from GitHub to obtain the embeddable image link.
  4. Daily link refresh — a scheduled trigger issues a PUT to repoint the same alias at new, current content (e.g. the day's Wikipedia article).
  5. Hourly image refresh — a scheduled trigger generates a new image (background, border, live date/time text) and commits it over the existing GitHub path.
  6. Embed and distribute — reference the stable image URL and link inside workflow stickers, n8n forms, or HTML emails, which then always display the latest content.

Tools and platforms

  • n8n — workflow orchestration (19 nodes, self-hosted)
  • GitHub — public image hosting via committed files and raw-content URLs (swappable for S3 or any static host)
  • shorten.rest (or equivalent) — URL shortening with dynamic, updatable redirect targets (swappable for any redirect service)
  • n8n Edit Image node — on-the-fly generation of the dynamic PNG (shapes, borders, live text)
  • n8n Form Trigger — registration form with an embedded clickable dynamic image (custom HTML + CSS)
  • Gmail — HTML email delivery with a dynamic, clickable image banner/footer
  • Schedule Triggers — independent daily and hourly update cadences

What the design enables.

  • Future-proofs an entire content library — distribute a stable image and link once and keep delivering current messages to audiences who find your assets months or years later, with zero edits to the originals.
  • Minimal and dependency-light — no AI, no database, no complex state; just two scheduled jobs and two public addresses, built on services with free tiers.
  • Fully swappable infrastructure — the URL-redirect provider can be replaced with any redirect service, and GitHub image hosting with an S3 bucket or any static host, avoiding lock-in.

The difficult parts.

  • Keeping the asset address stable while the content changes. The whole pattern fails if the URL shifts. We solved it by committing the image over the exact same GitHub file path and issuing PUT updates to the same redirect alias, so the public addresses never move.
  • Making the embedded image display correctly across surfaces. Forms and emails render images inconsistently. We added a custom HTML element with targeted CSS (max-width, auto height, block display) so the dynamic image sizes cleanly inside n8n forms and email clients.
  • Avoiding ongoing maintenance overhead. A solution that itself needs babysitting defeats the purpose. We separated a run-once setup from two self-contained scheduled loops, so once initialised the system refreshes content indefinitely with no human intervention.

Build notes and context.

The brief: assets that stay fresh long after you publish them.

When you publish a workflow template, build a registration form, or send a marketing email, those assets stop being yours the moment they go out. They keep living in inboxes, browser tabs, and template galleries — and people keep finding them long after creation. The problem is that everything embedded in them is frozen: the banner image shows last season's promotion, the link points to an offer that ended months ago. The naive fix is to maintain and re-edit the entire content library, which is impractical and, for assets already sitting in someone else's inbox, impossible.

This project solves that with a deliberately lightweight pattern: make the asset's address permanent, but its content dynamic. An image lives at a fixed URL and a link lives at a fixed alias, but what they actually resolve to can be updated on a schedule, forever. Distribute the stable address once, and you can change the message behind it years later — no need to touch the original email, form, or template ever again.

The build is compact — just 19 nodes in n8n — and splits cleanly into a one-time setup and two recurring update loops.

One-time setup (run once). Three nodes establish the permanent assets. First, a call to a URL-shortening and redirect service creates an initial short link alias — the stable address you'll hand out. Second, a GitHub node commits an initial image file to a public repository, giving the image a permanent raw-content URL. Third, a follow-up GitHub read fetches that file's downloadable URL so it can be embedded anywhere. After this runs once, the two public addresses never change again.

Update loop 1 — the dynamic link (daily). A schedule trigger fires once a day and issues a PUT to the redirect service, repointing the same alias to a new destination. In the reference implementation the alias always resolves to the current day's Wikipedia "on this day" article, so a single unchanging link delivers fresh, date-relevant content every day. Swap that logic for your own and the same link can rotate through seasonal promotions, your latest blog post, or whatever offer is live right now.

Update loop 2 — the dynamic image (hourly). A second schedule trigger fires hourly. An image-editing node generates a fresh PNG on the fly — drawing a background, borders, and live text such as the current date and time — and a GitHub node commits it over the existing file at the same path. Because the file path is unchanged, every email, form, and template that references that image URL instantly shows the updated graphic the next time it loads. The cadence is fully tunable; hourly is simply the default.

Three ways to use it. The workflow ships with three demonstrations of the pattern in the wild. The first embeds the dynamic, clickable image directly inside n8n workflow stickers, so anyone opening the template sees current content. The second places it inside an n8n form via a custom HTML element with CSS to size the image correctly — turning a static registration form into a live billboard. The third drops it into an HTML email as a clickable banner or footer, letting an email sent today carry a message you write next month.

Why this design works. It is intentionally minimal and dependency-light. The two external services — a redirect/URL-shortening provider and GitHub for image hosting — both have free tiers, and the pattern is explicitly built to be swappable: any URL-redirect service works in place of the first, and an S3 bucket (or any static host) works in place of GitHub. There are no AI models, no databases, and no fragile state to manage — just two public addresses and two scheduled jobs keeping them current. The result is a "set it once" mechanism that quietly future-proofs an entire library of distributed assets, letting you stay in contact with an audience that hasn't even arrived yet.

Have a related process in mind?

Tell me what goes in, what should come out and where the current process gets stuck.