# Uniform Siphon - Sitecore Push Command Reference

> Command-line reference for the Uniform Siphon Sitecore load (push) commands — asset upload, releases, and the @uniformdev/cli push scripts

Source: https://docs.uniform.app/docs/guides/migration/sitecore/push-reference

This page is the command-line reference for the **load phase** of a Sitecore migration — pushing the generated files into your Uniform project. Three of these commands belong to `Siphon.Migration.exe` (`uniform-upload-assets`, `post-process-assets`, `uniform-push-releases`); the Canvas and Content serialization is pushed with the Uniform Sync CLI (`@uniformdev/cli`), wired up as npm scripts in the migration output folder.

The executables, configuration/environment-variable rules, logging, and the [common options](https://docs.uniform.app/docs/guides/migration/sitecore/common-reference#common-options) shared by every command are documented on the [common reference](https://docs.uniform.app/docs/guides/migration/sitecore/common-reference). Each switch below lists its environment variable.

If you are migrating for the first time, start with the [Sitecore migration walkthrough](https://docs.uniform.app/docs/guides/migration/sitecore/walkthrough).

> **Uniform connection settings:**
>
> The `--UNIFORM_API_KEY`, `--UNIFORM_PROJECT_ID` and `--UNIFORM_CLI_BASE_URL` parameters are shared by every command that talks to Uniform, so they are normally set once as the **global** variables `SIPHON_UNIFORM_API_KEY`, `SIPHON_UNIFORM_PROJECT_ID` and `SIPHON_UNIFORM_CLI_BASE_URL`. The API key needs the `Developer` role.

---

## uniform-upload-assets

Upload the downloaded media binaries to the **Uniform Asset Library**. Run it once the media has been downloaded; `--skipUnusedMedia` limits the upload to media your content actually references, and `--mediaFolders` limits it to specific media-library folders. `--labelAssets` additionally tags each uploaded asset with the folder it came from, so editors can filter the library by source (see [Labelling assets](#labelling-uploaded-assets)).

```powershell
PS C:\migration> C:\siphon\Siphon.Migration.exe uniform-upload-assets `
  --inputDir C:\migration\data\items `
  --mediaRootDir "C:\migration\data\media" `
  --UNIFORM_API_KEY "your_api_key" `
  --UNIFORM_PROJECT_ID "your_project_id" `
  --skipUnusedMedia
```

### Required parameters

**`SIPHON_UNIFORM_UPLOAD_ASSETS_INPUTDIR`** = `<path>` (`--inputDir`)  
Folder of the downloaded Sitecore items (used to resolve which media exist and, with `--skipUnusedMedia`, which are referenced).

**`SIPHON_UNIFORM_API_KEY`** = `<string>` (`--UNIFORM_API_KEY`)  
Uniform API key (Developer role).

**`SIPHON_UNIFORM_PROJECT_ID`** = `<string>` (`--UNIFORM_PROJECT_ID`)  
Target Uniform project ID.

### Optional parameters

**`SIPHON_UNIFORM_UPLOAD_ASSETS_MEDIAROOTDIR`** = `(empty)|<path>` (`--mediaRootDir`)  
Folder holding the downloaded binaries (the `download-media` `--mediaRootDir`).

**`SIPHON_UNIFORM_UPLOAD_ASSETS_STARTPATH`** = `(empty)|<path>` (`--startPath`)  
Scope the upload to a **single** media subtree, given as a **full** `/sitecore/media library/…` path. Matched on a path boundary, so a sibling that merely shares the prefix (`…/Images` vs `…/ImagesArchive`) is not pulled in. Note it also limits which items are loaded into memory and scopes `--skipUnusedMedia`'s reference lookup — so it is a broader control than `--mediaFolders`. Use `--mediaFolders` when you just want to pick one or more folders off disk to upload.

**`SIPHON_UNIFORM_UPLOAD_ASSETS_MEDIAFOLDERS`** = `(empty)|<string>` (`--mediaFolders`)  
Upload only media that lives under one of these folders, given relative to the media library root as they appear on disk under `--mediaRootDir` (lower-cased, dashed; nested folders use `/`). Delimiters: `,;|`. Use it to skip the internal Sitecore media a full media library carries, and to test on a subset. Composes with `--startPath`, `--skipUnusedMedia` and `--mediaExtensions`. Example: `project|images/global`.

> **--startPath vs --mediaFolders:**
>
> Both scope which media are uploaded, and for a single folder they largely overlap. Differences: `--startPath` is **one** full `/sitecore/media library/…` path, matched case-sensitively, and it **also limits item loading** and the `--skipUnusedMedia` reference scope. `--mediaFolders` is **one or more** folders given in **disk-relative** form, matched case-insensitively, and only filters the upload (no effect on loading). Reach for `--startPath` when you want to narrow the whole run to a subtree; reach for `--mediaFolders` to pick folders to upload/label, e.g. for subset testing.

**`SIPHON_UNIFORM_UPLOAD_ASSETS_SKIPUNUSEDMEDIA`** = `true|false` (`--skipUnusedMedia`)  
Upload only media directly referenced by previously-downloaded content. Default: `false`.

**`SIPHON_UNIFORM_UPLOAD_ASSETS_SKIPUNSUPPORTEDMIMETYPES`** = `true|false` (`--skipUnsupportedMimeTypes`)  
Controls what happens to media whose MIME type Uniform does not support. By **default (flag off)** each unsupported file is zipped **individually** into its own `application/zip` archive — a type Uniform accepts — and that zip is uploaded in the asset's place (the asset name gains a `.zip` suffix), so the file still lands in the library instead of being lost. Set the flag to restore the **legacy** behavior: skip every unsupported file with a warning and upload nothing for it.

**`SIPHON_UNIFORM_UPLOAD_ASSETS_UNSUCCESSFULUPLOADMEDIAFILENAME`** = `(empty)|<string>` (`--unsuccessfulUploadMediaFileName`)  
Override the name of the `_unsuccessful-upload-media-{timestamp}.json` report.

**`SIPHON_UNIFORM_UPLOAD_ASSETS_FORCEASSETUPDATE`** = `true|false` (`--forceAssetUpdate`)  
Re-PUT the asset object even when it already exists in Uniform, and ignore the assets cache. The already-uploaded **blob is not re-uploaded**, so this is a fast way to re-apply changed metadata/labels on an already-populated project — the asset PUT replaces the labels array, so a re-run also corrects labels an earlier run got wrong. Without it a re-run leaves an existing asset untouched. Default: `false`.

**`SIPHON_UNIFORM_CLI_BASE_URL`** = `(empty)|<url>` (`--UNIFORM_CLI_BASE_URL`)  
Uniform API base URL. Default: `https://uniform.app`.

**`SIPHON_UNIFORM_UPLOAD_ASSETS_THREADS`** = `(empty)|<int>` (`--threads`)  
Number of parallel asset uploads. Default: `4`.

**`SIPHON_UNIFORM_UPLOAD_ASSETS_RETRYCOUNT`** = `(empty)|<int>` (`--RetryCount`)  
Retry attempts for each media upload before it is recorded as unsuccessful. Default: `3`.

**`SIPHON_UNIFORM_UPLOAD_ASSETS_TIMEOUT`** = `(empty)|<int>` ms (`--Timeout`)  
Timeout for each Uniform API request, in milliseconds. Default: `60000` (must be > 100).

**`SIPHON_UNIFORM_UPLOAD_ASSETS_SKIPCLEARINGFOLDERS`** = `true|false` (`--skipClearingFolders`)  
Do not clear the output sub-folders before writing — use it when combining several runs into one folder. Default: `false`.

**`SIPHON_UNIFORM_UPLOAD_ASSETS_CACHEDIR`** = `(empty)|<path>` (`--cacheDir`)  
Folder for the asset caches; defaults to `--inputDir`.

Plus the [common options](https://docs.uniform.app/docs/guides/migration/sitecore/common-reference#common-options) (`--languages`, logging).

### Labelling uploaded assets

With `--labelAssets`, each uploaded asset is tagged with a Uniform **label** derived from the media-library folder it sits in, so editors can filter the Asset Library by where the content came from. A label must exist in the project before an asset can reference it, so the run creates the labels first — it derives the set from the media it is about to upload, reads the existing labels, creates the missing ones, and only then uploads the assets.

```powershell
PS C:\migration> C:\siphon\Siphon.Migration.exe uniform-upload-assets `
  --inputDir C:\migration\data\items `
  --mediaRootDir "C:\migration\data\media" `
  --UNIFORM_API_KEY "your_api_key" `
  --UNIFORM_PROJECT_ID "your_project_id" `
  --labelAssets
```

By default the leading **container-only** folders — those that hold only sub-folders and no media of their own (for example `project/acme` before the first real media folder) — are stripped, so a file at `project/acme/website/logos/logo.svg` is labelled `website` and `logos`, not `project` or `acme`.

A nested asset carries **both** labels (`website` and `logos`), so in the Asset Library filter use the **"is all of"** (AND) operator to isolate exactly that sub-folder; the default **"is any of"** (OR) operator widens the result instead.

**`SIPHON_UNIFORM_UPLOAD_ASSETS_LABELASSETS`** = `true|false` (`--labelAssets`)  
Attach folder-derived labels to each uploaded asset, creating the labels in the project first. Default: `false`.

**`SIPHON_UNIFORM_UPLOAD_ASSETS_LABELFORMAT`** = `segments|folder|path|both` (`--labelFormat`). Default: `segments`.  
What each folder becomes (after the container-only prefix is stripped). `segments` (default) — each remaining folder as its own flat label (`website`, `logos`). `folder` — the deepest folder only (`logos`). `path` — the remaining path joined with dashes (`website-logos`), one unique label per folder. `both` — `folder` plus `path`. Labels are coerced to Uniform's public-id pattern `^[a-z0-9_-]{1,40}$` (lower-cased, invalid characters become `-`, capped at 40 characters).

**`SIPHON_UNIFORM_UPLOAD_ASSETS_LABELKEEPCONTAINERFOLDERS`** = `true|false` (`--labelKeepContainerFolders`)  
Keep the leading container-only folders as labels instead of stripping them (every folder segment becomes a label). Default: `false`.

**`SIPHON_UNIFORM_UPLOAD_ASSETS_LABELSKIPSEGMENTS`** = `(empty)|<string>` (`--labelSkipSegments`)  
Folder segment names to never turn into a label (case-insensitive), on top of the container-folder auto-skip. Delimiters: `,;|`. Example: `media|system`.

**`SIPHON_UNIFORM_UPLOAD_ASSETS_LABELCOLOR`** = `(empty)|<string>` (`--labelColor`)  
Color for created labels. Uniform requires a **named** color, not a hex — one of `default`, `gray`, `brown`, `orange`, `yellow`, `green`, `blue`, `purple`, etc. When unset, an existing project label's color is reused, else `gray`.

**`SIPHON_UNIFORM_UPLOAD_ASSETS_LABELSCOPE`** = `(empty)|<string>` (`--labelScope`)  
Optional `scope` value(s) to set on created labels. Delimiters: `,;|`. Leave unset (assets take the label without a scope).

---

## post-process-assets

Resolve the asset placeholder URLs left in the generated serialization to real Uniform delivery URLs.

During Canvas/Content generation, media embedded in **rich-text fields, general links, and image fields** is written as a placeholder of the form `/uniform_asset/{uniform-asset-id}` — the real delivery URL isn't known at generation time. `post-process-assets` scans every generated `*.json` file, looks each asset up in Uniform by that id, and rewrites the placeholder to the asset's real URL. **Without this step those references stay as `/uniform_asset/…` placeholders and the site renders broken images and media links** — and nothing in validate/deploy/publish flags it, so it is easy to miss.

Run it **after** the assets have been uploaded (with [`uniform-upload-assets`](#uniform-upload-assets), so every id resolves) and **before** pushing the Canvas/Content, so the pushed serialization already carries real URLs. Ids that were never uploaded are left untouched, with a warning in the log.

```powershell
PS C:\migration> C:\siphon\Siphon.Migration.exe post-process-assets `
  --inputDir C:\migration\uniform `
  --UNIFORM_API_KEY "your_api_key" `
  --UNIFORM_PROJECT_ID "your_project_id"
```

### Required parameters

**`SIPHON_POST_PROCESS_ASSETS_INPUTDIR`** = `<path>` (`--inputDir`)  
Folder of the generated Uniform serialization to rewrite in place (the migration `--outputDir`).

**`SIPHON_UNIFORM_API_KEY`** = `<string>` (`--UNIFORM_API_KEY`)  
Uniform API key (Developer role); used to look up each asset.

**`SIPHON_UNIFORM_PROJECT_ID`** = `<string>` (`--UNIFORM_PROJECT_ID`)  
Project the assets were uploaded to.

### Optional parameters

**`SIPHON_POST_PROCESS_ASSETS_CACHEASSETS`** = `true|false` (`--cacheAssets`)  
Cache the asset lookups (in `.assets.cache`) to speed up re-runs on the same data. Invalidate it if the assets are re-uploaded. Default: `false`.

**`SIPHON_UNIFORM_CLI_BASE_URL`** = `(empty)|<url>` (`--UNIFORM_CLI_BASE_URL`)  
Uniform API base URL. Default: `https://uniform.app`.

**`SIPHON_POST_PROCESS_ASSETS_THREADS`** = `(empty)|<int>` (`--threads`)  
Number of parallel workers rewriting the serialization files. Default: `4`.

**`SIPHON_POST_PROCESS_ASSETS_RETRYCOUNT`** = `(empty)|<int>` (`--RetryCount`)  
Retry attempts for each asset lookup before it is recorded as unsuccessful. Default: `3`.

**`SIPHON_POST_PROCESS_ASSETS_TIMEOUT`** = `(empty)|<int>` ms (`--Timeout`)  
Timeout for each Uniform API request, in milliseconds. Default: `60000` (must be > 100).

**`SIPHON_POST_PROCESS_ASSETS_SKIPCLEARINGFOLDERS`** = `true|false` (`--skipClearingFolders`)  
Do not clear the output sub-folders before writing — use it when combining several runs into one folder. Default: `false`.

**`SIPHON_POST_PROCESS_ASSETS_CACHEDIR`** = `(empty)|<path>` (`--cacheDir`)  
Folder for the asset-lookup cache (`.assets.cache`); defaults to `--inputDir`.

Plus the [common options](https://docs.uniform.app/docs/guides/migration/sitecore/common-reference#common-options) (`--languages`, logging).

---

## uniform-push-releases

Push the releases generated by `uniform-canvas --releases` to Uniform.

```powershell
PS C:\migration> C:\siphon\Siphon.Migration.exe uniform-push-releases `
  --inputDir C:\migration\uniform `
  --timezone "Europe/London" `
  --UNIFORM_API_KEY "your_api_key" `
  --UNIFORM_PROJECT_ID "your_project_id"
```

### Required parameters

**`SIPHON_UNIFORM_PUSH_RELEASES_INPUTDIR`** = `<path>` (`--inputDir`)  
Folder holding the generated Uniform files (the migration `--outputDir`, which contains the releases).

**`SIPHON_UNIFORM_PUSH_RELEASES_TIMEZONE`** = `<string>` (`--timezone`)  
A timezone from the Uniform platform; the release schedule is interpreted in it, e.g. `Europe/London`.

**`SIPHON_UNIFORM_API_KEY`** = `<string>` (`--UNIFORM_API_KEY`)  
Uniform API key (Developer role).

**`SIPHON_UNIFORM_PROJECT_ID`** = `<string>` (`--UNIFORM_PROJECT_ID`)  
Target Uniform project ID.

### Optional parameters

**`SIPHON_UNIFORM_CLI_BASE_URL`** = `(empty)|<url>` (`--UNIFORM_CLI_BASE_URL`)  
Uniform API base URL. Default: `https://uniform.app`.

**`SIPHON_UNIFORM_PUSH_RELEASES_TIMEOUT`** = `(empty)|<int>` ms (`--Timeout`)  
Timeout for each Uniform API request, in milliseconds. Default: `60000` (must be > 100).

**`SIPHON_UNIFORM_PUSH_RELEASES_SKIPCLEARINGFOLDERS`** = `true|false` (`--skipClearingFolders`)  
Do not clear the output sub-folders before writing — use it when combining several runs into one folder. Default: `false`.

**`SIPHON_UNIFORM_PUSH_RELEASES_CACHEDIR`** = `(empty)|<path>` (`--cacheDir`)  
Folder for the caches; defaults to `--inputDir`.

Plus the [common options](https://docs.uniform.app/docs/guides/migration/sitecore/common-reference#common-options) (`--defaultLanguage`, `--languages`, logging).

---

## Pushing Canvas & Content (@uniformdev/cli)

The generated Canvas and Content serialization is pushed with the Uniform Sync CLI, exposed as npm scripts in the migration output folder. Run `npm install` there once before the first push.

### uniform:push:canvas

Push the generated Canvas data (project map nodes, compositions, component definitions) to the Uniform project.

```powershell
cd C:\migration\uniform
npm install
npm run uniform:push:canvas
```

### uniform:push:content

Push the generated Content data (content types and entries) to the Uniform project.

```powershell
cd C:\migration\uniform
npm run uniform:push:content

# For parallel processing (4 threads)
npm run uniform:push:content-p4
```

## Related pages

- [Common reference](https://docs.uniform.app/docs/guides/migration/sitecore/common-reference) — executables, configuration, environment variables, logging, and the common options.
- [Download commands reference](https://docs.uniform.app/docs/guides/migration/sitecore/download-reference) — the extract commands.
- [Migrate commands reference](https://docs.uniform.app/docs/guides/migration/sitecore/migrate-reference) — the transform commands (`uniform-canvas`, `uniform-content`).
- [Sitecore migration walkthrough](https://docs.uniform.app/docs/guides/migration/sitecore/walkthrough) — the end-to-end, explained migration process.
