Desktop Cloud Transform (DCT)

  • report
    Click for Disclaimer
    This Project is over a year old (first published about 3 years ago). As such, please keep in mind that some of the information may no longer be accurate, best practice, or a reflection of how I would approach the same thing today.
  • infoFull Project Details
    info_outlineClick for Full Project Details
    Date Posted:
    Apr. 24, 2019
    Last Updated:
    Apr. 24, 2019
  • classTags
    classClick for Tags

I created Desktop Cloud Transform, from scratch to fully functional prototype, in about a week (about 40-50 hours of logged time before feature complete). I used Qt/C++, Cloudinary’s API, SQLite, Javascript, and other technologies. I decided to build it for my own needs, and also as an opportunity to get up to speed on QT and C++.

Github repo & readme:

What is Desktop Cloud Transform (DCT)?

Elevator pitch: Desktop Cloud Transform (or DCT) is a desktop application that allows you to upload and apply complex transformations to images in the cloud, simply by dragging and dropping. It uses the power of Cloudinary’s transformation engine, which means you can apply almost any combination of alterations to your images just like you could in Photoshop, but since it is all done in the cloud, you don’t need a powerful computer, expensive software, and more importantly,  you don’t need to know how to use complicated image editing software.

Here is a sample configuration – taking any local image file, and turning it into a fun Polaroid style image:

Here is a more practical business application – showing off UI mockups on actual physical hardware that would normally cumbersome to deploy to and take a picture of, such as a Tesla screen:

User Interface

I used QML for creating the user interface, which I think turned out nicely. Here is the main UI / home screen:

Desktop Cloud Transform - Main UI

And configuration editor :

Desktop Cloud Transform - Config Editor - Editing Existing Config

What is supported? What are DCT “Configurations”?

DCT configurations are combinations of DCT settings (such as “overwrite existing file”) and Cloudinary transformation settings (such as “crop to 200 x 200 pixels, blur faces, etc”). Once you save a configuration, you can drag and drop images onto its row and the image you dropped will be uploaded to Cloudinary, have the configuration applied, and then the result downloaded back to your local computer folder.

Cloudinary does all the heavy lifting for DCT – storing images, transforming, applying effects, etc. So pretty much any transformation that Cloudinary supports can be saved within a DCT “Configuration”. If you are looking to create some complicated presets, I highly recommend taking a look at Cloudinary’s massive “Transformation Reference” documentation. You can also take a look at my other Cloudinary project, which explored some unique ways to combine Cloudinary transformations.

Extra Feature: Macro support

An extra feature of DCT is the ability to use “macros” within transformation strings. For example, if you put “{UPLOADED}” inside an outgoing transformation string, my program will replace it with the correct string to represent an overlay layer that references the public ID of the image you dragged onto the configuration row. Some other currently supported macros are {filenameNoExt}, to insert the filename of your uploaded image, without the extension (e.g. “My File” instead of “My File.jpg”).

For an up-to-date list of supported macros, make sure you have the most recent version of the software, and check the documentation here.

Cloudinary SDK for C++:

As a technical side note, if you are a fellow developer looking to integrate Cloudinary into your C++ based application, unfortunately I have to tell you that they do not have an existing C++ SDK. However, their API is just as powerful – most of their SDK libraries are basically just translating SDK calls into API calls. In addition, you might find some of the code I have written helpful in getting started; I have some helper functions to do things like generate the special secure API upload signature (see here, for example). I’ve used a decent amount of QT specific classes, but it should be moderately easy to convert to std libraries or something using boost.


I built this application as a learning experience to get up to speed on QT/C++ and solve some repetitive image manipulation needs of my own. Not a lot of development time has gone into it so far, so it still has some rough edges and hopefully will see improvements over time.

In addition, although I have a fondness for Cloudinary and this application is mostly a wrapper around their services, it is not officially endorsed, supported by, or associated with Cloudinary in any manner. Cloudinary is a registered trademark of Cloudinary Ltd.

Leave a Reply

Your email address will not be published.