Skip to content
dsh.fish
Bundle

dsh-nanobananapro

Generate images and videos in DeepSeek Harness through the NanoBananaPro API

Source
synmindai
stars
1 stars
License
MIT
Updated
Updated 5 days ago

Readme

# NanoBananaPro for DeepSeek Harness

[![npm](https://img.shields.io/npm/v/dsh-nanobananapro.svg)](https://www.npmjs.com/package/dsh-nanobananapro)
[![DeepSeek Harness](https://img.shields.io/badge/DeepSeek-Harness-4D6BFE)](https://github.com/deepseek-ai/deepseek-harness)
[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](./LICENSE)

`dsh-nanobananapro` adds native image and video generation to DeepSeek Harness
through the NanoBananaPro public API. It uses a user-owned NanoBananaPro API key;
provider, billing, database, and storage credentials stay on the NanoBananaPro
service.

Tools:

- `nanobananapro_generate_image`
- `nanobananapro_generate_video`
- `nanobananapro_get_task`
- `nanobananapro_get_balance`
- `nanobananapro_account_help`

[中文说明](./README.zh-CN.md)

## Account, API key, and recharge

1. Sign in at <https://api.bananapro.site>.
2. Buy **API credits** at <https://api.bananapro.site/api-pricing>.
3. Create an API key at <https://api.bananapro.site/api-keys>.
4. Keep the key private. Set it in the environment that launches Harness:

   ```bash
   export NANOBANANAPRO_API_KEY='sk-...'
   ```

5. Restart Harness and ask it to call `nanobananapro_get_balance`.

NanoBananaPro has separate web-playground and API wallets. This plugin consumes
the **API** wallet, so purchasing ordinary web credits does not fund API calls.
The balance tool returns both values and the correct recharge link.

Official API documentation: <https://api.bananapro.site/api-docs>

## Install

```bash
npx -y @deepseek-ai/dsh plugin --profile web add dsh-nanobananapro
npx -y @deepseek-ai/dsh --profile web --dump-config
npx -y @deepseek-ai/dsh web --profile web
```

The config dump should contain a `nanobananapro` bundle layer.

To install a cloned checkout instead:

```bash
npx -y @deepseek-ai/dsh plugin --profile web add .
```

## Try it

```text
Check my NanoBananaPro API balance. Then create a 16:9, 2K cinematic hero
image of a transparent running shoe on chrome. Wait for the result.
```

```text
Use NanoBananaPro Veo 3 Fast to create a cinematic 16:9 video of a yellow paper
airplane gliding through a clean blue studio. Wait for the final video link.
```

Reference media must be reachable through public HTTPS URLs. The plugin does
not upload local files; upload them to a public object store or the product UI
first, then pass the resulting URL.

## Safety and billing behavior

- Paid image and video tools ask for approval by default.
- The API key is resolved through Harness credentials and is never a model tool
  argument.
- Every paid submission sends an `Idempotency-Key`; automatic retries reuse it.
- Retryable `429` and `5xx` responses are retried with bounded backoff.
- Cancellation aborts requests and foreground polling.
- `401` errors point to API-key management; `402` errors point to API recharge.
- If the foreground wait expires, the task is returned with `timed_out: true`.
  Continue with `nanobananapro_get_task`; do not submit a duplicate request.

## Configuration

Override the bundle in `$DSH_HOME/profiles/web/cordis.patch.yml` only when
needed:

```yaml
- id: nanobananapro
  config:
    apiBaseUrl: https://gateway.bananapro.site
    apiKeyEnv: NANOBANANAPRO_API_KEY
    requestTimeoutMs: 30000
    pollIntervalMs: 3000
    imageWaitTimeoutMs: 300000
    videoWaitTimeoutMs: 900000
    maxRetries: 2
    retryDelayMs: 500
    requireApproval: true
    allowLocalHttp: false
```

Harness config rows are replaced as a whole, so retain every setting when
overriding the row. Disable `requireApproval` only for a trusted automation with
an intentional spending limit.

## Validate

```bash
npm run check
npm test
npm run pack:check
```

The package ships plain JavaScript and does not need an install-time build
script.

Install

dsh plugin --profile web add github:synmindai/dsh-nanobananapro

Profile: web

  • This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.
Source