[Architecture] Best practice for "Original + Watermarked" file processing from a multi-batch uploader?

Hello Bubblers,

I’m looking for architectural advice on a core file-processing pattern.

My Requirement: For every file a user uploads, I must save two versions to the database:

  1. The Original_File (the file as uploaded)

  2. The Watermarked_File (the original + a watermark image)

I’ve tried the two logical architectures for this, and both are failing. I am stuck and need your guidance on the correct data flow.


Attempt 1: Using a Watermark Plugin (e.g., “Watermark A”)

This path fails because I lose the original file.

  • Workflow: I use the Watermark A Blob Success event to trigger a Create a new Photo... workflow.

  • The Blocker (Shown in Screenshot 1): The plugin’s output (Watermark A's Bubble URLs) only seems to provide watermarked files. As you can see in my workflow, I am forced to set both my original_file and watermark_file fields from this same watermarked source. This results in the Original_File being lost and overwritten with a watermarked copy.

Caption : Screenshot 1 - Using the plugin, I can’t access the original, non-watermarked file.


Attempt 2: Using Native Uploader + Backend Workflow

This path fails because I don’t have the tool to create the watermarked file.

  • Workflow:

    1. Use Bubble’s native uploader to get the Original_File.

    2. Pass this file to a Backend API Workflow as a parameter (original_image).

  • The Blocker (Shown in Screenshot 2): This works perfectly to get the Original_File to the server. But once there, I have no tool to create the Watermarked_File. As you can see in my list of Plugins (Server-side actions), I have no action available to “Add Watermark” to the original_image.

Caption : Screenshot 2 - Using a Backend Workflow, I have the original but no server-side action to create the watermarked version.


My Question:

I am completely stuck between these two failing methods:

  1. Method 1: Gives me the Watermarked_File but loses the Original_File.

  2. Method 2: Gives me the Original_File but I can’t create the Watermarked_File.

What is the standard, reliable architecture for this “Original + Watermark” pattern?

Is there a specific server-side plugin I am missing? Or is there a way to get the original file from the Watermark plugin that I don’t see?

Thank you for your help.

No one with this kind of issue ?

I usually just use the CloudConvert API to watermark stuff because I didn’t want to bother with plugins. Most of them are frontend plugins with elements meaning they aren’t available via backend.

If you still want to use your plugin, why do you need to set the original_file to the new watermarked file? When the original file upload is successful create your photo then. Then save the resulting Photo on the page in a custom state. Then trigger the watermark action, an then change the existing Photo and add the watermark_file to it.

1 Like

You could look into cloudflare workers / image service as well. I have no experience with this for images but I use it for watermarking music files on the fly and it works well :+1:t2:. Using a simple find and replace on the URL at the point of download I can decide whether the user gets served a clean version or a watermarked version (and the watermark is actually personalised to the user which is cool).

1 Like