Last updated: April 13

<span aria-hidden="true" id="node-sdk-intents-cli-commands-for-common-tasks"></span>

# Node SDK Intents: CLI commands for common tasks

![Kevin van Zonneveld](/assets/images/teammates/avatar-kvz-4.jpg?dpl=dpl_7kibEao2BYN7CAhZRsbwkyFkShjF)

**Kevin van Zonneveld**

Co-founder · Amsterdam, The Netherlands · Show bio

[](https://x.com/kvz)[](https://github.com/kvz)

The Node SDK now ships with Intent commands: high-level CLI commands for quick, common Transloadit jobs.

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

The idea of outfitting our Node SDK with some command-line convenience 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 realized 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 precisely that.

So I started to wonder what an integration should be able to do 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](/docs/sdks/node-sdk.md)’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 not organized 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`.

<span aria-hidden="true" id="run-one-off-jobs-from-the-cli"></span>

## 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:

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

```

And get output like:

```plaintext
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, rather than exclusively as an embedded back-end integration.

<span aria-hidden="true" id="use-high-level-commands-instead-of-json-for-common-tasks"></span>

## Use high-level commands instead of JSON for common tasks

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

```bash
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:

```bash
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⁠](https://github.com/transloadit/node-sdk/blob/main/packages/node/docs/intent-commands.md)or the [Node SDK docs](/docs/sdks/node-sdk.md).

<span aria-hidden="true" id="convenience-as-the-most-important-design-principle"></span>

## 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 to keep you informed of 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.

<span aria-hidden="true" id="use-intents-for-quick-jobs-and-json-for-custom-workflows"></span>

## Use Intents for quick jobs, and JSON for custom workflows

Intents are not a replacement for Transloadit’s lower-level model. JSONInstructions 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](/docs/sdks.md).

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.

<span aria-hidden="true" id="try-it"></span>

## Try it

If you already have a Transloadit account, copy[your Workspace’s credentials](/c/template-credentials/) as `TRANSLOADIT_KEY` and`TRANSLOADIT_SECRET` into `~/.transloadit/credentials`, and you’re good to go:

```bash
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:

```bash
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⁠](https://github.com/transloadit/node-sdk/issues) if it lacks a feature, or if it could be even more convenient.

[#node-js](/blog/tags/node-js.md)[#cli](/blog/tags/cli.md)[#integrations](/blog/tags/integrations.md)[#ai](/blog/tags/ai.md)

### 👩‍💻 Join 20k+ developers

Sign up for our [monthly newsletter](/newsletters.md) to receive direct links to 3 exclusive tech — and 2 product updates. No less, no more.

Your email:

Get access

## File uploading and encoding. Made simple.

Transloadit streamlines file handling for developers, trusted by brands like Coursera and The New York Times. We’re known for a reliable API, top-notch support, and a strong commitment to open source, with projects like [Uppy⁠](https://uppy.io) and [Tus⁠](https://tus.io) setting standards in file processing.

[Sign up](/c/)[Book a Demo](https://survey.typeform.com/to/kRg47Xi5)

No credit card needed

Cancel anytime
