> ## Documentation Index
> Fetch the complete documentation index at: https://docs.reactor.inc/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> Reactor hosts multiple models, each with its own connect slug (modelName) and command/event schema. The catalog of every model — slug, typed SDK package, and links to its schema — is at /model-api-reference/overview. Some models expose one slug per experience (e.g. HappyOyster); always take the slug from the model's own pages, never guess it.
> Fastest path to a working app: `npx create-reactor-app my-app --model=<slug>` scaffolds a complete app with secure auth wired up. Typed TypeScript SDKs are published as @reactor-models/<model>; Python uses the base reactor-sdk package.
> Auth: exchange an API key (rk_...) for a JWT via POST https://api.reactor.inc/tokens from your server. Never put the API key in client-side code.
> Append .md to any docs URL for clean Markdown. Search these docs via the MCP server at https://docs.reactor.inc/mcp.

# reactor weights upload

> Upload model weights to the Reactor platform

```sh theme={"theme":{"light":"github-light","dark":"github-dark-high-contrast"}}
reactor weights upload [<model>:<release>] [<path>] [flags]
```

## Description

Upload local weights for a registered model release.

**Both arguments are optional inside a workspace:**

* With no `<model>:<release>`, the identity is read from the nearest
  enclosing `reactor.yaml`'s `model.name` and `model.version` (walking
  up from the current directory, stopping at the repository root).
* With no \<path>, the source defaults to `runtime.weights_path` from
  the same `reactor.yaml` (the path `reactor model publish` and
  `reactor run` use), else `./weights/`.
* A single argument is treated as `<model>:<release>` when it contains
  a colon and no such file exists on disk; otherwise it is the \<path>.

\<path> may be a single file or a directory of files. When it is a directory,
the CLI walks the entire tree, computes a SHA-256 manifest, uploads every
file preserving its relative path, and finally writes the manifest as the
"bundle complete" sentinel.

The model release must already be registered (use: reactor model publish).
Files are uploaded directly to object storage via presigned URLs.

Dedupe: when a previous bundle with identical content already
exists for the target release, the upload is skipped with a clear message.
Pass `--force` to bypass the check and re-upload unconditionally.

Carry-over (`--from`): assert that this release reuses the bundle of an
existing release of the SAME model, with no local bytes. The CLI fetches the
source release's manifest from the server and asks the server to copy each
weight file into the new release's prefix server-side. No \<path> is read;
`--from` is mutually exclusive with \<path> and `--force`. The source release must
still be reachable via the server's per-file dedupe window (typically the 8
most-recent prior releases for the same model).

Symlinks are rejected (resolve them with `cp -L` or
`tar --dereference` first).

**Examples:**

```sh theme={"theme":{"light":"github-light","dark":"github-dark-high-contrast"}}
reactor weights upload                                   # identity + path from reactor.yaml
reactor weights upload ./bundle/                         # identity from reactor.yaml
reactor weights upload my-model:v1.0.0-gabcdef0          # path from reactor.yaml
reactor weights upload my-model:v1.0.0-gabcdef0 ./weights.safetensors
reactor weights upload my-model:v1.0.0-gabcdef0 ./bundle/ --force
reactor weights upload my-model:v1.1.0 --from v1.0.0       # carry over from v1.0.0
```

## Options

| Flag            | Description                                                                                 |
| --------------- | ------------------------------------------------------------------------------------------- |
| `--force`       | Re-upload weights even when the target release already has a matching bundle on the server  |
| `--from string` | Carry over the bundle from this existing release of the same model; no local bytes are read |
| `--workers int` | Parallel workers for bundle hashing and per-file uploads (default 4)                        |

## Global options

| Flag              | Description                                                                           |
| ----------------- | ------------------------------------------------------------------------------------- |
| `--server string` | Reactor API server URL (default "[https://api.reactor.inc](https://api.reactor.inc)") |
| `-v, --verbose`   | Enable verbose output                                                                 |

## See also

* [reactor weights](/deploy/cli-reference/reactor_weights) - Upload and inspect model weights
