# Generate Motion — Leonardo AI

> Generates a motion (video) from the provided image using Leonardo AI's SVD Motion Generation API. See the documentation

- Key: `leonardo_ai-generate-motion`
- Type: Action (Write)
- Version: 0.0.2
- App: Leonardo AI (`leonardo_ai`) — https://pipedream.com/apps/leonardo-ai.md
- This page (HTML): https://pipedream.com/apps/leonardo-ai/actions/generate-motion
- Hints: open-world
- Source: https://github.com/PipedreamHQ/pipedream/blob/master/components/leonardo_ai/actions/generate-motion/generate-motion.mjs

## Description

Generates a motion (video) from the provided image using Leonardo AI's SVD Motion Generation API. [See the documentation](https://docs.leonardo.ai/reference/createsvdmotiongeneration)

## Props

| Prop | Type | Required | Description |
|---|---|---|---|
| `imageId` | `string` | Yes | The ID of the image to generate motion from. You can either select from previously generated images or manually enter the ID of an uploaded image. Options are loaded from the connected account. |
| `motionStrength` | `integer` | No | The motion strength for the video generation. |
| `isPublic` | `boolean` | No | Whether the generation is public or not. |
| `isInitImage` | `boolean` | No | Whether the image being used is an init image uploaded by the user. |
| `isVariation` | `boolean` | No | Whether the image being used is a variation image. |

## 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": "leonardo_ai",
      },
    },
  },
)

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: "leonardo_ai-generate-motion",
  arguments: {
    imageId: "Image ID",
    motionStrength: 10,
  },
})
```

**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: "leonardo_ai-generate-motion",
  externalUserId: "{external_user_id}", // any stable ID for this user in your system
  configuredProps: {
    leonardo_ai: { authProvisionId: "apn_xxxxxxx" },
    imageId: "Image ID",
    motionStrength: 10,
  },
})

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": "leonardo_ai-generate-motion",
    "configured_props": {
      "leonardo_ai": { "authProvisionId": "apn_xxxxxxx" },
      "imageId": "Image ID",
      "motionStrength": 10
    }
  }'
```

---

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