# Generate Content from Text and Image — Google Gemini

> Generates content from both text and image input using the Gemini API. See the documentation

- Key: `google_gemini-generate-content-from-text-and-image`
- Type: Action (Write)
- Version: 1.0.3
- App: Google Gemini (`google_gemini`) — https://pipedream.com/apps/google-gemini.md
- This page (HTML): https://pipedream.com/apps/google-gemini/actions/generate-content-from-text-and-image
- Hints: open-world
- Source: https://github.com/PipedreamHQ/pipedream/blob/master/components/google_gemini/actions/generate-content-from-text-and-image/generate-content-from-text-and-image.mjs

## Description

Generates content from both text and image input using the Gemini API. [See the documentation](https://ai.google.dev/tutorials/rest_quickstart#text-and-image_input)

## Props

| Prop | Type | Required | Description |
|---|---|---|---|
| `model` | `string` | Yes | The model to use for content generation Options are loaded from the connected account. |
| `text` | `string` | Yes | The text to use as the prompt for content generation |
| `responseFormat` | `boolean` | No | Enable to receive responses in structured JSON format instead of plain text. Useful for automated processing, data extraction, or when you need to parse the response programmatically. You can optionally define a specific schema for the response structure. |
| `history` | `string[]` | No | Previous messages in the conversation. Each item must be a valid JSON string with text and role (either user or model). Example: {"text": "Hello", "role": "user"} |
| `safetySettings` | `string[]` | No | Configure content filtering for different harm categories. Each item must be a valid JSON string with category (one of: HARASSMENT, HATE_SPEECH, SEXUALLY_EXPLICIT, DANGEROUS, CIVIC) and threshold (one of: BLOCK_NONE, BLOCK_ONLY_HIGH, BLOCK_MEDIUM_AND_ABOVE, BLOCK_LOW_AND_ABOVE). Example: {"category": "HARASSMENT", "threshold": "BLOCK_MEDIUM_AND_ABOVE"} |
| `mediaFiles` | `string[]` | Yes | A list of file paths from the /tmp directory or URLs for the media to process. |
| `syncDir` | `dir` | No | SyncDir |

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

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: "google_gemini-generate-content-from-text-and-image",
  arguments: {
    model: "Model",
    text: "Prompt Text",
  },
})
```

**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: "google_gemini-generate-content-from-text-and-image",
  externalUserId: "{external_user_id}", // any stable ID for this user in your system
  configuredProps: {
    google_gemini: { authProvisionId: "apn_xxxxxxx" },
    model: "Model",
    text: "Prompt Text",
  },
})

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": "google_gemini-generate-content-from-text-and-image",
    "configured_props": {
      "google_gemini": { "authProvisionId": "apn_xxxxxxx" },
      "model": "Model",
      "text": "Prompt Text"
    }
  }'
```

---

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