diff --git a/README.md b/README.md index f81c0dc..2d52424 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ A command-line tool for interacting with the [Runware](https://runware.ai) API. Built in Go, distributed as a single static binary. -Run image generation, video generation, audio generation, 3D, upscaling, background removal, captioning, search models, and more. +Run image generation, video generation, audio generation, 3D, upscaling, background removal, captioning, search models, deploy serverless applications, and more. ## Install @@ -45,6 +45,9 @@ runware ping # Generate an image runware run runware:400@1 positivePrompt="a chess match in the park" width=1024 height=1024 +# Deploy a serverless application +runware serverless deploy ./app.py --id my-app --gpu-type h100 --wait + # Check your account details runware account details ``` @@ -128,6 +131,54 @@ runware run tencent:hunyuan-3d@3.1-pro positivePrompt="A red vintage sports car" runware run tencent:hunyuan-3d@3.1-pro inputs.images.0="https://example.com/product.jpg" ``` +### `runware serverless` — applications + +Deploy, invoke, and manage Runware serverless applications. Full command reference is in [docs/runware_serverless.md](./docs/runware_serverless.md). + +```shell +# List GPU types and per-second pricing +runware serverless gpus + +# Create from a Python entry file (the working directory, or --src-dir, is zipped and uploaded) +runware serverless deploy ./app.py --id my-app --gpu-type h100 --wait + +# Create from a container source (Dockerfile + container.yaml at the directory root) +runware serverless deploy --id my-app --gpu-type h100 --container ./wrapper --wait + +# Later deploys with the same --id upload a new source and roll version N+1 +runware serverless deploy ./app.py --id my-app --wait + +# Inspect +runware serverless apps list +runware serverless apps show my-app +runware serverless apps endpoints my-app +runware serverless apps workers my-app --state live + +# Invoke an endpoint (path is a bare segment, e.g. infer) +runware serverless apps invoke my-app infer -f payload.json --wait + +# Logs, events, and usage +runware serverless apps logs my-app --follow +runware serverless apps events my-app +runware serverless usage --for this-month --group-by app,day +runware serverless apps usage my-app --for this-month + +# Environment, secrets, and scale +runware serverless apps env set my-app MY_KEY --value-file ./value.txt +runware serverless secrets set FOO --value-file ./foo.txt +runware serverless secrets attach my-app FOO +runware serverless apps scale my-app --max-workers 2 + +# Lifecycle +runware serverless apps stop my-app +runware serverless apps resume my-app +runware serverless open my-app +``` + +`--volume`, `--env`, `--env-file`, and `--name` apply on create only. Change `--gpu-type` and other worker settings with `apps scale`, and environment with `apps env`. An environment change or a secret attach, detach, or rotation records a new version (or rolls live workers) — you do not need to redeploy source to apply them. + +`.env` files are never packed into the source archive. Prefer `--env-file` and `secrets set --value-file` so values stay out of the process list. + ### Authentication ```shell @@ -238,6 +289,7 @@ All commands support `--format json` for piping into `jq` or scripts. | Variable | Description | |----------|-------------| | `RUNWARE_API_KEY` | API key (overrides config file) | +| `RUNWARE_DASHBOARD_URL` | Dashboard base URL for `serverless open` (default `https://my.runware.ai`) | ### Config file @@ -354,9 +406,9 @@ Once installed, `Tab` works at every level: ``` # Complete subcommands $ runware -auth account completion config model -ping preset result run upload -version +auth account completion config media +model ping preset result run +serverless upload version # Complete model AIR identifiers for `run` $ runware run