The Node SDK now ships with Intent commands: high-level CLI commands for common Transloadit tasks. They make it much easier to reach for Transloadit for one-off jobs, without first writing Assembly Instructions JSON by hand.

Demo: converting a Markdown file to PDF from the command line through a Node SDK Intent.

This grew out of a practical problem on our side. When we are building lasting integrations, JSON Instructions and reusable Templates are exactly the right abstraction. They are expressive, stable, and well suited to custom multi-step workflows. For quick command-line jobs, though, they can feel like overhead.

In my own day to day as a co-founder, I noticed I wasn't reaching for Transloadit when I wanted to quickly convert a Markdown file to PDF, even though we have a very capable service for exactly that.

So I started to wonder what an integration should look like in order for me to reach for it.

I wrote down the commands I wanted to use, and then worked my way back to an implementation. We're calling it: Intents.

Intents live in our Node SDK's CLI as an extra high-level abstraction layer on top of our primitives like Robots, Assemblies, and Builtin Templates.

Where the CLI previously gave you raw access to these primitives, the new Intents layer is organized not around our internals, but around your one-off use case, with guessable commands such as markdown pdf, markdown docx, image remove-background, image generate, and image describe.

Run one-off jobs from the CLI

If your TRANSLOADIT_KEY and TRANSLOADIT_SECRET credentials are available in the shell, in a local .env, or in ~/.transloadit/credentials, you can now run:

npx -y transloadit markdown pdf --input ~/code/uppy/README.md --print-urls

And get output like:

STEP     NAME        URL
convert  README.pdf  https://pub-9974528f53db4a839e95f7e6ce9adb68.r2.dev/836b8ecaed114779b02cb99d4540d81f/37053087fe38475ea3fba78d87dbdfd3/9af5485747b446c5ab737b64db23afc4.pdf

That means you can use Transloadit as a practical CLI tool for quick jobs, not only as an embedded back-end integration.

Use high-level commands instead of JSON for common tasks

Intents cover common workflows with short, predictable command names. A few examples:

npx -y transloadit image remove-background --input ./photo.jpg --print-urls
npx -y transloadit image generate --prompt "A red bicycle in a studio" --output bicycle.png
npx -y transloadit image describe --input ./hero.jpg --for wordpress --output fields.json
npx -y transloadit markdown docx --input ./plan.md --output plan.docx

Or how about input-guided image generation:

npx -y transloadit image generate \
  --input ./person1.jpg \
  --input ./person2.jpg \
  --input ./background.jpg \
  --prompt "Place person1.jpg feeding person2.jpg in front of background.jpg" \
  --output scene.png

For the full reference, see the Intent Commands reference on GitHub or the Node SDK docs.

Convenience as the most important design principle

Intents try to settle on powerful defaults. Today, image generate still defaults to google/nano-banana-2. OpenAI's gpt-image-2, announced on April 21, 2026, is already supported via --model openai/gpt-image-2, but we're keeping it opt-in until it has a few weeks of real-world mileage and users have had time to learn whether it rewards different prompting. Image-model SOTA moves too quickly for this post to chase every daily change; what you should expect from us instead is that once a model has actually proved itself in practice, we update the default to the consensus best choice for our users.

As said there is a strong emphasis on convenience. If you omit --output, the CLI will go through some lengths to determine a sensible location to put the output file (or error out). If there is a single file input, it chooses that directory. If there are multiple input files, it picks the current working directory. If it's a directory operation involving many files, it treads more cautiously and makes --output mandatory. That is, unless you'd rather have a URL to a temporary location, in which case you can specify --print-urls.

For readability, I'm using longform --output in this post, but naturally there are quick aliases like -o as well.

Use Intents for quick jobs, and JSON for custom workflows

Intents are not a replacement for Transloadit's lower-level model. JSON instructions remain the right long-term abstraction for integrated media pipelines. They let you build flows tailored to your use case, and they are intended to be saved as Templates and reused many times in production via our SDKs.

But when you're a command line warrior (or maybe your agent is), with a quick need to process some media, this may be just the thing.

And remember, even if your CLI need outgrows Intents, our CLI still supports npx -y transloadit assemblies create, so you can eject into building your own media pipelines anytime you want.

Try it

If you already have a Transloadit account, copy your Workspace's credentials as TRANSLOADIT_KEY and TRANSLOADIT_SECRET into ~/.transloadit/credentials, and you're good to go:

npx -y transloadit --help

Optionally, if you want to help your agent (Cursor, Codex, Claude Code, etc.) find these Intents and give it media processing superpowers, you can install our skills globally via:

npx -y skills add https://github.com/transloadit/skills -g --all --copy

I hope you'll have a much easier time creating and managing media files with this. Do let me know in the issue tracker on GitHub if we miss a feature, or if it could be even more convenient.