# Upload mode — publishing content (https://clout.wtf/guide/upload-guide/)



> **Note:** **Before each session.** Make sure the iPhone is unlocked, brightness is at 50% or higher, and the phone is charging in **portrait** orientation (not lying flat). StandBy interrupts uploads — confirm it's off in [device setup](https://clout.wtf/guide/device-setup/).

## What Upload is

Upload is a **content publishing** mode for already-logged-in TikTok accounts:

* takes the next media file from the configured folder
* (optionally) adds music from a list of links
* (optionally) sets a description (4 sources to pick from)
* walks through the full TikTok upload flow
* waits for the video to process
* marks the file as used (move to `used/` or delete)
* moves on to the next account

### When to use it

* Accounts already logged in, TikTok installed — you just need to publish at a steady pace
* You want to automate posting on a schedule or in a cycle
* Content is ready and lives locally (videos or photos for carousels)

> **Note:** If TikTok has to be installed first, the account logged in, the proxy switched — that's **Seeding**, not Upload. Upload only works with already-logged-in accounts and an installed TikTok.

## Two content types

The template has a **Content Type — Video / Carousel** toggle. One template is locked to one type.

| Type         | What gets published                               | Music                      |
| ------------ | ------------------------------------------------- | -------------------------- |
| **Video**    | One video file (mp4 / mov / m4v / avi / mkv)      | Optional                   |
| **Carousel** | A series of photos (1–35 items, jpg / png / heic) | **Required** for carousels |

## Template setup

In the UI: **Templates → create template → Run Mode = Upload**.

The template is built from cards: **Content**, **Music**, **Description**, **Publishing**, **Gallery**, **Debug**. Each card is covered below.

### "Content" card — content source

#### For Video

| Field                   | What it controls                                                              |
| ----------------------- | ----------------------------------------------------------------------------- |
| **Video Folder**        | Absolute path to the video folder                                             |
| **Video Order**         | `Sequential` (by name, natural sort) or `Random`                              |
| **Move to 'used'**      | After publishing, move the video into a `used/` subfolder (**on by default**) |
| **Delete after upload** | Delete the file after publishing (takes priority over "Move to used")         |

Supported extensions: `.mp4`, `.mov`, `.m4v`, `.avi`, `.mkv`.

#### For Carousel

| Field                                        | What it controls                                                                                          |
| -------------------------------------------- | --------------------------------------------------------------------------------------------------------- |
| **Photo Folder**                             | Absolute path to the photo folder                                                                         |
| **Each subfolder = one carousel**            | If on: each subfolder = one carousel. If off: photos get sliced into flat blocks of "Photos per carousel" |
| **Photos per carousel**                      | How many photos per carousel in flat mode (1–35)                                                          |
| **Move to 'used'** / **Delete after upload** | Same rules as for videos                                                                                  |

Supported extensions: `.jpg`, `.jpeg`, `.png`, `.heic`. For folder layout details see the [Folder structure guide](https://clout.wtf/guide/folder-structure-guide/).

### "Music" card — background music

#### When it's required

* For **carousels music is required** (TikTok requirement). Without music, the thread will fail.
* For **videos music is optional**.

#### Fields

| Field                        | What it controls                       | Default |
| ---------------------------- | -------------------------------------- | ------- |
| **Add music**                | Toggle music on/off                    | off     |
| **Music links**              | List of track links, one per line      | empty   |
| **Adjust volume**            | Toggle volume adjustment               | off     |
| **Music volume**             | Music volume 0–100                     | 10      |
| **Video volume**             | Original audio volume 0–100            | 50      |
| **Search results wait time** | Seconds to wait after the track search | 3       |

#### Accepted link formats

* Full TikTok link: `https://www.tiktok.com/music/track-name-7123456789012345`
* App track link: `snssdk1233://music/detail/7123456789012345`
* Just the ID: `7123456789012345`

> **Note:** **How to get a link:** in TikTok open the track → Share → Copy link.
> **Business accounts.** TikTok for Business blocks licensed music (Disney, majors). On a business account only "Recommended sounds" / "Commercial Sounds" are visible. The app **detects this automatically** and skips music and volume steps. On such accounts prefer commercial-only links or turn off the **Add music** toggle.

#### How a track is picked

From the full list, the app **picks one randomly** per publication. If a link is broken (track removed / not found) — it tries the next one. When all links are exhausted — it publishes without music and returns to the TikTok home screen.

### "Description" card

Dedicated guide: [Set Description](https://clout.wtf/guide/set-description-guide/) — covers the 4 sources (text / file / json / sidecar), file formats, and pitfalls.

In short:

| Source        | When to pick                                                                 |
| ------------- | ---------------------------------------------------------------------------- |
| **Text**      | One-or-two variants for all posts, separated by `;` directly in the template |
| **TXT file**  | 10+ simple captions in an external `.txt`                                    |
| **JSON file** | Need titles (for carousels) or strict sequential order                       |
| **Sidecar**   | Each media file has its own unique caption                                   |

> **Note:** For **videos** the title is **ignored** — TikTok has no Title field for videos. For **carousels** the title is filled in if non-empty.
> **Limit: 2200 characters.** Hashtags and mentions go **directly inside** the description text: `"My caption #travel @user"`.

### "Publishing" card — publication parameters

| Field                          | What it controls                                                                                      | Default |
| ------------------------------ | ----------------------------------------------------------------------------------------------------- | ------- |
| **Publications per account**   | How many publications one account makes per pass. `0` = no limit, until content runs out              | 1       |
| **Pause between publications** | Pause between publications on the same account (if Publications per account > 1), in seconds          | 0       |
| **Wait after publish**         | Pause after returning to the home screen — the video is still uploading in the background, in seconds | 360     |

> **Note:** **Wait after publish** is critical. The video is still uploading in the background after Post is tapped. If you switch off TikTok / move to the next account too quickly, the publication gets stuck in "Posting…" and never reaches the feed.
> **Rule of thumb:** 1 minute per 50 MB of file size + a buffer for slow proxy. For a 100 MB video over VPN, set 360–600 seconds.

### "Gallery" card — device gallery handling

iPhone stores TikTok-uploaded media in its photo gallery. Options:

| Field                   | What it does                                                                  | Default |
| ----------------------- | ----------------------------------------------------------------------------- | ------- |
| **Clear before upload** | Delete ALL photos/videos from the device gallery before uploading new content | off     |
| **Delete after upload** | Delete the just-published media from the gallery                              | off     |

> **Note:** For **carousels we recommend turning Clear before upload on** — otherwise old photos blend with new ones during gallery selection, and TikTok will assemble the wrong carousel.
> During cleanup iOS shows a system dialog "Allow … to delete N photos?" — the app accepts it automatically.

### "Debug" card — diagnostics

| Field                | What it does                                                                                              |
| -------------------- | --------------------------------------------------------------------------------------------------------- |
| **Save screenshots** | Save screenshots at each automation step into `debug_screenshots/` for error analysis and support bundles |

> **Note:** **On by default** — critical for support. Disk is auto-managed: cleaned at > 7 days or > 1 GB (oldest first).

## What's set in the thread, not the template

Some parameters live in the **Threads → Add Configuration** tab:

| Field                      | Where it lives | What it controls                                                |
| -------------------------- | -------------- | --------------------------------------------------------------- |
| **Account List**           | Thread config  | List of accounts to publish on                                  |
| **Devices**                | Thread config  | One or more devices                                             |
| **Proxy**                  | Thread config  | None / Manual / Stash / Happ / System                           |
| **Cyclic Upload**          | Thread config  | Looped run (after going through all accounts — start over)      |
| **Pause between accounts** | Thread config  | Seconds to wait between accounts                                |
| **Pause between cycles**   | Thread config  | Minutes to wait between cycles                                  |
| **Reupload Cycles**        | Thread config  | How many times to re-publish the same content across new cycles |
| **Schedule**               | Thread config  | Scheduled run (tied to the target region's time zone)           |

## Double-publish protection across multiple devices

You can **safely run 5–25 devices off the same content folder** — the app coordinates them through a hidden `.publish_history.json` file next to the media, and each file goes to TikTok exactly once. **Don't delete that file manually** — already-published content may otherwise get re-uploaded.

## Common errors

| Symptom                                     | Cause                                          | Solution                                                                                          |
| ------------------------------------------- | ---------------------------------------------- | ------------------------------------------------------------------------------------------------- |
| "TikTok not installed"                      | No TikTok on the device                        | Install TikTok via App Store, restart. Upload doesn't install — that's Seeding's job              |
| "No content" at start                       | Folder empty or all files already published    | Add files or delete `.publish_history.json`                                                       |
| "Outdated client app"                       | Clout App on the iPhone is older than required | On the Devices page, reinstall Clout App via Xcode                                                |
| Publications stuck in "Posting…"            | "Wait after publish" too small                 | Push to 360–600 sec for large files over VPN                                                      |
| Carousel uses the wrong photos              | Old photos in the device gallery               | Turn on **Clear before upload** in the Gallery card                                               |
| Music not picked up on a business account   | TikTok Business blocks licensed music          | Use commercial tracks or turn off **Add music**. Business accounts are auto-detected              |
| Caption truncated                           | > 2200 characters                              | Trim it; see the [Set Description guide](https://clout.wtf/guide/set-description-guide/)          |
| One file goes to multiple devices           | Wiped or corrupt `.publish_history.json`       | Don't delete it manually; let the app rebuild it. Make sure the folder is the same across devices |
| Thread fails on "Edit Profile did not load" | Multi-device + slow proxy + missing settle     | A short settle pause is already built in — check the device-recovery logs                         |
| "Proxy error"                               | Proxy not assigned / unreachable / dropped     | Check Stash API / Happ / System VPN profile                                                       |

## Recommended presets

### "Safe stream on 1 device, 3 accounts"

```
Content: Video, Move to used = on
Music: on, 3–5 links
Description: TXT file, 20–30 variants
Publications per account: 1
Wait after publish: 360 sec
Gallery: Delete after upload
Pause between accounts: 60 sec
Cyclic Upload: off
```

### "Carousels at a calm pace"

```
Content Type: Carousel
Photo Folder: subfolders, Each subfolder = one carousel = on
Music: on (required for carousels)
Description: Sidecar (content.json in each subfolder), fallback = none
Publications per account: 1
Wait after publish: 480 sec (photos process slower)
Gallery: Clear before upload = on  (required for carousels)
Cyclic Upload: off
```

### "Multi-device stream from one folder"

```
Content: Video, Move to used = on
Description: JSON file with 200+ variants, content_order = random
Music: on, 10+ links (so the track rotates)
Publications per account: 1
Wait after publish: 420 sec (slow-proxy buffer)
Pause between accounts: 30 sec
Reupload Cycles: 0
Cyclic Upload: on
Pause between cycles: 30 minutes
```

`.publish_history.json` guarantees one file goes to exactly one device.

## "Upload configured correctly" checklist

* [ ] Template created with Run Mode = **Upload**
* [ ] Content Type picked: Video or Carousel
* [ ] Absolute path to media folder set
* [ ] Files in the folder are in supported formats (video/photo extensions from the list)
* [ ] Move to used **on** (so the same file isn't reused)
* [ ] For **carousels**: Music on and filled; Clear gallery before upload on
* [ ] Description configured for the right source (see the [Set Description guide](https://clout.wtf/guide/set-description-guide/))
* [ ] Wait after publish ≥ 240 sec (or higher for large files / slow proxies)
* [ ] Accounts in Account List already logged into TikTok on the device
* [ ] TikTok installed on the device (Upload doesn't install it)
* [ ] (Optional) proxy attached
* [ ] (Optional) schedule

## FAQ

### Does Clout Uploader post through the TikTok API?

No. Publishing happens on a physical iPhone: the app walks through the same upload flow a person would, in the real TikTok app. No API upload endpoints are involved.

### What content types can I publish?

Videos (mp4 / mov / m4v / avi / mkv) and photo carousels of 1–35 images (jpg / png / heic). One template is locked to one content type; carousels require music.

### Can several devices post from the same content folder?

Yes — 5–25 devices can safely share one folder. Publish history is coordinated through a hidden file next to the media, so each file goes to TikTok exactly once.

### How does scheduled posting work?

The template defines *what* to publish; the thread defines *when* and *for whom* — accounts, device, and the cycle it runs on. Set up the thread schedule and Upload fills it without manual launches.

## Related guides

* [Folder structure](https://clout.wtf/guide/folder-structure-guide/) — folder layout for Upload (videos, carousels in subfolders or flat).
* [Set Description](https://clout.wtf/guide/set-description-guide/) — captions in detail (text / file / json / sidecar).
* [Account warm-up](https://clout.wtf/guide/warmup-guide/) — warm-up mode that runs before Upload.

## Further reading on the blog

* [How to Bulk Upload Videos to TikTok: Tools, Limits, and Workarounds](https://clout.wtf/blog/tiktok-bulk-upload-videos/)
* [Seeding Mode — Step-by-Step Guide to Mass Publishing on TikTok](https://clout.wtf/blog/seeding-mode-guide/)
