Node SDK Intents: CLI commands for common tasks
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.
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.