# Resource Transformation — Cloudinary

> Transforms image or video resources on-the-fly. It allows transformation options for resource optimization (i.e. web viewing), resize and crop the resources, etc. Image transformation documentation. Video transformation documentation

- Key: `cloudinary-resource-transformation`
- Type: Action (Write)
- Version: 0.2.2
- App: Cloudinary (`cloudinary`) — https://pipedream.com/apps/cloudinary.md
- This page (HTML): https://pipedream.com/apps/cloudinary/actions/resource-transformation
- Source: https://github.com/PipedreamHQ/pipedream/blob/master/components/cloudinary/actions/resource-transformation/resource-transformation.mjs

## Description

Transforms image or video resources on-the-fly.  It allows transformation options for resource optimization (i.e. web viewing), resize and crop the resources, etc. [Image transformation documentation](https://cloudinary.com/documentation/image_transformations). [Video transformation documentation](https://cloudinary.com/documentation/video_transformation_reference)

## Props

| Prop | Type | Required | Description |
|---|---|---|---|
| `resourceType` | `string` | No | Type of the resource to upload. Valid values: image, video. |
| `options` | `string` | Yes | For an image resourceType, use this parameter to set the image transformation options to apply and/or the URL parameters supported by Cloudinary API. For all transformation options, please check Image transformation API reference, for URL parameters, please check Transforming media assets using dynamic URLs. For a video resourceType, use this parameter to set video transformation options to apply and/or the URL parameters supported by Cloudinary API. For all transformation options, please check Video transformation API reference, for URL parameters, please check Transforming media assets using dynamic URLs. |
| `imageSource` | `string` | No | If resourceType is an image, use this parameter to point to the source of the image to apply transformations on. It can be a local file, the actual image data, a remote FTP, HTTP or HTTPS URL address of an existing image. For details and examples, see: file source options. |
| `videoPublicId` | `string` | No | If resourceType is a video, use this parameter to set the public id of the video to apply transformations on. The public id is the unique identifier of the video, and is either specified when uploading the video to your Cloudinary account, or automatically assigned by Cloudinary. For more details on the options for specifying the public id, see Public ID - the image identifier. |

## Run it

**MCP**

```ts
import { Client } from "@modelcontextprotocol/sdk/client/index.js"
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js"
import { PipedreamClient } from "@pipedream/sdk"

const pd = new PipedreamClient({
  projectId: process.env.PIPEDREAM_PROJECT_ID!,
  clientId: process.env.PIPEDREAM_CLIENT_ID!,
  clientSecret: process.env.PIPEDREAM_CLIENT_SECRET!,
  projectEnvironment: "production",
})

const accessToken = await pd.rawAccessToken

const transport = new StreamableHTTPClientTransport(
  new URL("https://remote.mcp.pipedream.net/v3"),
  {
    requestInit: {
      headers: {
        Authorization: `Bearer ${accessToken}`,
        "x-pd-project-id": process.env.PIPEDREAM_PROJECT_ID!,
        "x-pd-environment": "production",
        "x-pd-external-user-id": "{external_user_id}", // any stable ID for this user in your system
        "x-pd-app-slug": "cloudinary",
      },
    },
  },
)

const mcp = new Client({ name: "my-agent", version: "1.0.0" })
await mcp.connect(transport)

const { tools } = await mcp.listTools()

// listTools() hands your model this tool's input schema, so it can
// fill the arguments itself:
const result = await mcp.callTool({
  name: "cloudinary-resource-transformation",
  arguments: {
    resourceType: "Resource Type",
    options: "Options",
  },
})
```

**TypeScript**

```ts
import { PipedreamClient } from "@pipedream/sdk"

const pd = new PipedreamClient({
  projectId: process.env.PIPEDREAM_PROJECT_ID!,
  clientId: process.env.PIPEDREAM_CLIENT_ID!,
  clientSecret: process.env.PIPEDREAM_CLIENT_SECRET!,
  projectEnvironment: "production",
})

const result = await pd.actions.run({
  id: "cloudinary-resource-transformation",
  externalUserId: "{external_user_id}", // any stable ID for this user in your system
  configuredProps: {
    cloudinary: { authProvisionId: "apn_xxxxxxx" },
    resourceType: "Resource Type",
    options: "Options",
  },
})

console.log(result)
```

**cURL**

```bash
curl -X POST https://api.pipedream.com/v1/connect/{project_id}/actions/run \
  -H "Content-Type: application/json" \
  -H "X-PD-Environment: production" \
  -H "Authorization: Bearer {access_token}" \
  -d '{
    "external_user_id": "{external_user_id}",
    "id": "cloudinary-resource-transformation",
    "configured_props": {
      "cloudinary": { "authProvisionId": "apn_xxxxxxx" },
      "resourceType": "Resource Type",
      "options": "Options"
    }
  }'
```

---

- App: https://pipedream.com/apps/cloudinary.md · All apps: https://pipedream.com/apps
