Skip to content

RESOURCES / BLOG

How to Personalize Videos by Adding Logos and Names

Why It Matters

The shift to dynamic overlays delivers measurable business value:

  • No manual editing after setup.
  • Unlimited, on-brand variants from a single video.
  • Faster campaign launches.
  • Lower asset management load.

Personalized video converts 8x better than generic content. What the stats don’t mention is that manually customizing hundreds of videos can inflate production timelines and spend.

I’ll guide you through building a system that delivers tailored video content to thousands of customers, all without having to open a video editor or source new files.

You’ll learn how to transform video by using:

  • Dynamic text overlays for names and coupon codes.
  • Logo swapping for partner co-branding.
  • Conditional rendering based on user data.
  • Real-time generation via transformation URLs.

Personalized video overlays are dynamic elements, such as text, images, or graphics, added to videos in real time based on viewer data. It’s like Netflix’s “Top Pick for [Your Name]” or a sales video that displays your company’s logo in the corner.

Creating these overlays, traditionally, is manual and expensive. Your team exports hundreds of video variations, each with different names or logos baked in. File management can be a nightmare, storage costs explode, and making changes means re-rendering everything. 

By using dynamic overlays, you can eliminate manual editing after the initial setup. You’ll serve infinite variations from one master video, generate personalized content in real time via URL parameters, and update all the variations instantly without re-uploading.

The impact on campaign velocity is substantial. Teams using dynamic overlays launch personalized video campaigns in hours instead of weeks. Next, you’ll learn how Cloudinary handles dynamic overlays and how you can use it for product transformation.

Cloudinary’s architecture treats personalization as a transformation chain applied at request time.

With Cloudinary, the process is simple:

  • Upload once. Add your master video to Cloudinary.
  • Define transformations. Use l_text or l_image parameters for overlays.
  • Generate URLs. Create unique links with personalization data.
  • Deliver instantly. Cloudinary renders personalized versions on demand.

Behind the scenes, you’re creating transformation instructions that Cloudinary applies when someone requests the video, which means you can serve millions of personalized videos without storing millions of files.

The transformation chain works like this:

Base Video → Apply Overlay → Position/Style → Deliver Personalized Version

Each transformation parameter builds upon the previous one, allowing you to compose complex personalizations from simple building blocks. With this transformation chain in place, you need to choose the right overlay type and its placement:

  1. Text overlays (l_text). This is perfect for names, coupon codes, or dynamic messages:
  • Font family and size using Google Fonts or custom uploads.
  • Color and opacity for brand consistency.
  • Stroke and shadow for readability over video.
  • Animation effects like fade-in or typewriter.
  1. Image overlays (l_image). This is ideal for logos, badges, or profile pictures:
  • Relative sizing to maintain proportions.
  • Opacity control for watermark effects.
  • Chroma key for transparent backgrounds.
  • Multiple overlays for complex compositions.
  1. Video overlays (l_video). For picture-in-picture or animated logos:
  • Trimming controls to show specific segments.
  • Audio mixing options.
  • Synchronized playback with the master video.
  1. Placement Control. For placement control, you can position overlays by using:
  • Gravity (center, north_east, south_west, etc.).
  • X/Y offsets in pixels or percentages.
  • Relative positioning based on video dimensions.
  • Face detection for smart placement around subjects.

One of the benefits of using Cloudinary for personalized video is that you can extend the implementation to create infinite variations via URLs. We’ll look into that in the following section.

You don’t need to write a single line of code to start personalizing your videos. Cloudinary’s transformation URLs work like templates; you change the parameters to create different variations.

You should have:

  • A Cloudinary account (free tier works).
  • A sample video uploaded to Cloudinary (or use Cloudinary demo assets).
  • Basic understanding of how URLs work.

You need environment credentials from your Cloudinary dashboard to use Cloudinary video transformations and create optimized video delivery.

Log in to your Cloudinary dashboard to retrieve your cloud name.

Get environment variables from Cloudinary dashboard
Get environment variables from Cloudinary

Every Cloudinary video URL follows this pattern:

https://res.cloudinary.com/<your_cloud_name>/video/upload/<transformations>/<video_id>.mp4Code language: HTML, XML (xml)
  • <your_cloud_name>. Your Cloud name from Cloudinary Dashboard.
  • <transformations>. Replace with your transformation parameters.
  • <video_id>. Replace with the video ID.

To add personalization, you insert transformation parameters in the middle. That’s it, no rendering, no editing software, just Cloudinary transformations that can be applied in real time.

Start with your base video URL, for example:

https://res.cloudinary.com/demo/video/upload/docs/walking_talking.mp4Code language: JavaScript (javascript)

To add an overlay with the viewer’s name, like “Hello Sarah!”, insert these transformation parameters:

<code>https://res.cloudinary.com/demo/video/upload/           // Your base video URL</code>
<code>l_text:arial_200:Hello%20Sarah!,co_white,g_north,y_50   // Transformation</code>
<code>/docs/walking_talking.mp4 /// Video ID</code>Code language: HTML, XML (xml)
GIF of two men walking side by side with the text "Hello Sarah!" overlayed at the top

This is the transformation syntax:

  • l_text:arial_200:Hello%20Sarah! adds text in Arial font, size 200.
  • co_white makes the text white.
  • g_north positions at top center.
  • y_50 is 50 pixels from the top edge.

To try it yourself, copy the Cloudinary transformation URL, replace “Sarah” with any name, and paste it into your browser. The video will instantly show the new name with infinite variants from one master video.

First, upload logos to your Cloudinary account using consistent names like:

`adidas-logo` 

`nike-logo` 

`amc-logo`Code language: JavaScript (javascript)

To upload the logos, navigate to your Cloudinary dashboard and click the Upload button shown below:

Cloudinary dashboard with the Upload button outlined in red at the top right
Navigate to your Cloudinary dashboard

Next, add a logo to any video by inserting:

<code>https://res.cloudinary.com/<your_cloud_name>/video/upload/        // Your base video URL</code>
<code>l_Onyx___Linen-white_lnu8yj,w_550,g_north_east,x_30,y_30,o_80/ // Transformation</code>
<code>v1763034720/8344923-uhd_3840_2160_25fps_echink.mp4</code>Code language: HTML, XML (xml)

The transformation explained:

  • l_adidas-logo overlays the adidas logo.
  • w_150 sets width to 150 pixels.
  • g_north_east top-right corner.
  • x_30,y_30 is 30 pixels from edges.
  • o_80 is 80% opacity for subtle branding.

You should obtain a result similar to the one shown below.

Add both name and logo by chaining transformations with fl_layer_apply:

https://res.cloudinary.com/<your_cloud_name>/video/upload

l_text:montserrat_200_bold:New%20Collection,co_white/

fl_layer_apply,g_south_west,x_40,y_60/

l_Onyx___Linen-white_lnu8yj/w_450/fl_layer_apply,g_north_east,x_30,y_30/

v1763034720/8344923-uhd_3840_2160_25fps_echink.mp4Code language: PHP (php)

Each forward slash (/) and fl_layer_apply adds another personalization layer. This declarative API-driven approach means no manual video editing, just URL parameters.

For example, you can show special offers or greetings only at the beginning of a video for a personalized experience:

https://res.cloudinary.com/<your_cloud_name>/video/upload

<code>l_text:arial_120:Special%20Offer%20for%20You!,co_rgb:ffcc00,g_center,so_0,eo_5/</code>
<code>v1763034720/8344923-uhd_3840_2160_25fps_echink.mp4</code>Code language: HTML, XML (xml)

New timing parameters:

  • so_0: Start overlay at 0 seconds.
  • eo_5: End overlay at 5 seconds.

Make overlays scale with video dimensions using fl_relative:

https://res.cloudinary.com/<your_cloud_name>/video/upload

l_Onyx___Linen-white_lnu8yj/c_scale,fl_relative,w_0.15/

fl_layer_apply,g_north_east,o_70,x_0.05,y_0.05/

v1763034720/8344923-uhd_3840_2160_25fps_echink.mp4Code language: HTML, XML (xml)

The fl_relative flag makes:

  • w_0.15: Logo width is 15% of video width.
  • x_0.05,y_0.05: Position 5% from edges.

This ensures your overlays look perfect on any screen size. Next, you’ll create a simple personalization tool that is typically used for campaigns.

For campaign operations teams, here’s how to manage personalization at scale using just a spreadsheet:

1. Create a spreadsheet with these columns:

  • Column A: Customer Name
  • Column B: Company
  • Column C: Coupon Code
  • Column D: Generated Video URL
  1. Add this formula in Column D2 (adjust for your cloud name):
<code>=CONCATENATE( "<a href="https://res.cloudinary.com/yourcloud/video/upload/" target="_blank" rel="noreferrer noopener">https://res.cloudinary.com/<your_cloud_name>/video/upload/</a>", IF(A2<>"", "l_text:arial_60:Hi%20" & ENCODEURL(A2) & ",co_white,g_north,y_50/", ""), IF(B2<>"", "fl_layer_apply,l_logos:" & LOWER(B2) & ",w_100,g_north_east,x_30,y_30/", ""), IF(C2<>"", "fl_layer_apply,l_text:arial_45:Code%3A%20" & C2 & ",co_yellow,g_south,y_60,so_8/", ""), "campaign_video.mp4" )</code>Code language: HTML, XML (xml)
  1. Fill in your data, and the formula automatically generates personalized URLs.
  2. Copy URLs to your email platform or CRM.

This approach can efficiently handle hundreds of personalization variants. In the following section are some use cases and transformation syntax for you to create a declarative, personalized experience.

Let’s explore how you can create a declarative personalization experience for users.

This is a perfect use case for onboarding videos or campaigns for returning customers. The greeting appears briefly at the start, then disappears to let your main content shine through.

Personalized welcome message URL:

<code>https://res.cloudinary.com/demo/video/upload/l_text:montserrat_80_bold:Welcome%20back%20Jane!,co_white,e_shadow:50,g_north,y_100,so_1s,eo_6s/docs/walking_talking.mp4</code>Code language: HTML, XML (xml)

Let’s break it down.

https://res.cloudinary.com/demo/video/upload

l_text:montserrat_80_bold:Welcome%20back%20Jane!,  // Large, bold greeting

co_white,                                           // White text for contrast

e_shadow:50,                                        // Shadow effect for readability

g_north,                                            // Position at top center

y_100,                                              // 100 pixels from top edge

so_1,eo_6                                          // Show from 1-6 seconds only

/docs/walking_talking.mp4Code language: JavaScript (javascript)

Ideal for promotional campaigns where you need the discount code to be easily visible. The background opacity (dd in rgb:000000dd) can be adjusted from 00 (transparent) to ff (opaque) based on your video content, while the timing parameter (so_10) controls when your offer appears for maximum impact. 

Coupon overlay transformation URL:

<code>https://res.cloudinary.com/demo/video/upload/l_text:arial_65_bold:Code%3A%20SAVE30,co_rgb:ffff00,b_rgb:000000dd,r_20,g_south,y_150,so_10,w_350,h_80/docs/walking_talking.mp4</code>Code language: HTML, XML (xml)

Here’s how each parameter works:

https://res.cloudinary.com/demo/video/upload

l_text:arial_65_bold:Code%3A%20SAVE30,  // Bold text with "Code: SAVE30"

co_rgb:ffff00,                          // Bright yellow for urgency

b_rgb:000000dd,                         // Semi-transparent black background

r_20,                                    // 20px rounded corners for modern look

g_south,                                 // Position at bottom center

y_150,                                   // 150 pixels from bottom

so_10                                    // Appear after 10 seconds (perfect timing)

/docs/walking_talking.mp4Code language: JavaScript (javascript)

This type of personalization is ideal for account-based marketing or partner campaigns that need to reflect both individual and company-specific details. Each layer appears at strategic moments to maximize engagement without overwhelming the viewer.

Multi-layer personalization URL:

<code>https://res.cloudinary.com/demo/video/upload/l_text:arial_80_bold:Welcome%20Sarah,co_white,g_north,y_100,so_0,eo_4/fl_layer_apply,l_text:arial_60_bold:IBM%20Partner%20Discount,co_rgb:ffcc00,g_south,y_100,so_8/docs/walking_talking.mp4</code>Code language: HTML, XML (xml)

Understanding the layer structure:

https://res.cloudinary.com/demo/video/upload

l_text:arial_80_bold:Welcome%20Sarah,   // Personal greeting layer

co_white,                                // Clean white text

g_north,y_100,                          // Top position, 100px down

so_0,eo_4/                              // Shows 0-4 seconds, then disappears

fl_layer_apply,                         // Apply first layer, then add next

l_text:arial_60_bold:IBM%20Partner%20Discount,  // Business context layer

co_rgb:ffcc00,                         // Yellow for the offer

g_south,y_100,                          // Bottom position (no overlap)

so_8                                    // Appears at 8 seconds for CTA

/docs/walking_talking.mp4Code language: JavaScript (javascript)

Each parameter is declarative; you’re describing what you want, not how to render it. Cloudinary handles complex video processing, delivering infinite variants from a single master video in real-time.

So what should you consider, and what does this actually mean for your campaigns? Let’s look at some best practices and their benefits.

1. Use reliable naming conventions. Create consistent patterns for your overlay assets to prevent broken personalizations:

<code>/overlays/logos/partner_[company-name].png /overlays/badges/tier_[level].png /overlays/watermarks/campaign_[id].png</code>Code language: HTML, XML (xml)

This structure makes dynamic references predictable and reduces 404 errors.

2. Sanitize input for text overlays. Always clean user-generated content before adding to URLs. Replace special characters that break transformations:

BAD: Hi Sarah's Team! // Apostrophe breaks URL 

GOOD: Hi Sarah Team! // Clean and safe

BAD: Welcome, John & Jane // Special characters cause issues

GOOD: Welcome John and Jane // Works perfectlyCode language: HTTP (http)

For names with special characters, use URL encoding twice and %2527 for apostrophes.

3. Monitor your transformation quota. Each dynamic request uses transformation credits. To optimize usage:

  • Cache frequently used personalizations for 24 hours.
  • Pregenerate URLs for your top 100 customers.
  • Use CDN caching for repeated requests.

4. Implement smart caching. Store generated URLs to reduce repeated transformations:

Spreadsheet approach: 

Column A: Customer Name 

Column B: Generated URL (cached) 

Column C: Expiry Date (24 hours)Code language: JavaScript (javascript)

Only regenerate when URLs expire or data changes.

5. Build fallback logic. If a logo doesn’t exist, show a default:

Primary: l_logos:acme_corp

Fallback: l_logos:default_partner

If personalization data is missing:

  • Name missing → Use “Valued Customer”
  • Logo missing → Show generic branding
  • Code missing → Display general offer

6. Test edge cases before launch. Before going live, verify these scenarios:

  • Names with apostrophes (O’Brien, D’Angelo).
  • Very long names (more than 30 characters).
  • Missing personalization data.
  • Non-Latin characters.
  • Different video resolutions.

The shift to dynamic overlays delivers measurable business value:

  • No manual editing after setup. Skip the tedious cycle of opening your video editor, swapping out names, adjusting logos, waiting for renders, and managing export queues for every single personalization.
  • Unlimited variants from a single video. Generate millions of personalized videos from a single master file. Create platform-specific versions (square for Instagram, 16:9 for YouTube, vertical for Stories), localize for different regions with translated text overlays, customize for each customer segment with relevant offers, and even run A/B tests with different CTAs. You can do all of this without creating new video files.
  • Consistent branding. Your logos always appear in the correct position. Typography standards maintain themselves across all variations. Brand guidelines apply programmatically.
  • Faster campaign turnaround. Launch personalized campaigns in hours, not weeks, and test different personalization strategies quickly.
  • Lower asset management load. One video file instead of hundreds means reduced storage costs, simplified version control, and easier compliance tracking. Your digital asset management (DAM) no longer explodes with variations.

You’ve just built a comprehensive video personalization system that transforms a single video into an infinite number of variations. Instead of editing hundreds of files and managing storage chaos, you can now use simple URL transformations to deliver personalized content at any scale. Every name, logo, and discount code is applied on demand through transformation URLs, without rendering or waiting, for instant personalization.

Start with your highest-value campaigns, such as welcome videos, product demos, or seasonal promos. Test a small segment, use the Google spreadsheet method, then measure the increase in engagement and scale with developer tools if needed.

Sign up for Cloudinary today to transform your video campaigns with dynamic personalization that scales.


Resources:

Start Using Cloudinary

Sign up for our free plan and start creating stunning visual experiences in minutes.

Sign Up for Free