Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.signalrooms.xyz/llms.txt

Use this file to discover all available pages before exploring further.

Content folder structure

Status: Current operator how-to. Run modes referenced here (posting run / activity workflow) map to the template Run Mode toggle in Warmr.app. This is the short reference for where files belong, how filenames are sorted, what happens to media after publication, and the self-check before launching.

Run modes at a glance

ModeTemplate’s Run ModeWhat it doesNeeds media files?
Posting runUploadPublishes videos or carousels to already-logged-in accountsYes
Activity workflowWarmupScrolls the feed, likes, searches by keyword, watches resultsNo
Onboarding runSeedingTikTok reinstall → fingerprint reset → proxy switch → login → publishYes
The Content Type inside a posting run or onboarding run is picked separately on the template: video or carousel.

Supported file formats

TypeExtensions
Video.mp4, .mov, .m4v, .avi, .mkv
Photo (carousel).jpg, .jpeg, .png, .heic
Captions (sidecar).json next to media
Any other extensions are silently ignored by the scanner.

Posting run: video

Template fields

  • Video folder: absolute path to the folder.
  • Order: Sequential (natural sort by filename) or Random (shuffled).
  • Move used files: into a used/ subfolder (on by default).
  • Delete after publishing: takes priority over Move.

Folder layout

videos/
├── clip_1.mp4
├── clip_2.mp4
├── clip_10.mp4          ← natural sort: 1, 2, 10 (not 1, 10, 2)
├── promo.mov
└── used/                ← created automatically after the first successful upload
    ├── clip_1.mp4
    └── clip_2.mp4

What happens after publishing

  • Move is on → the file goes into used/ inside the same folder.
  • Delete is on → the file is permanently deleted; used/ is never created.
  • A sidecar .json (caption) is moved or deleted together with the video.
Pick this when you have “packaged” content, each carousel laid out into its own folder with a defined photo order.

Template fields

  • Photo folder: absolute path.
  • Each subfolder = one carousel: on.

Folder layout

carousels/
├── 01_summer_post/              ← one carousel
│   ├── 1.jpg                     ← photo order within carousel: natural sort by filename
│   ├── 2.jpg
│   ├── 3.heic
│   └── content.json              ← optional caption for this specific carousel
├── 02_promo/
│   ├── photo_a.png
│   ├── photo_b.png
│   └── description.json
├── 03_lifestyle/
│   ├── img1.png
│   └── img2.jpg
└── used/                         ← created automatically
    ├── 01_summer_post/           ← the entire subfolder moves as a unit
    └── 02_promo/

Rules

  • The subfolder name used (any case) is reserved and never scanned. Don’t name your carousels that.
  • Photos inside a subfolder are sorted naturally: 1, 2, 10, not 1, 10, 2.
  • Subfolders themselves are published in natural-sort order of names.
  • TikTok accepts 1 to 35 photos per carousel.

What happens after publishing

The entire subfolder moves into used/ as a unit (or is deleted). Sidecar caption files travel with it. Pick this when you don’t want to group photos into subfolders, all images sit “loose” in one folder, and you want them sliced into equal-sized carousels.

Template fields

  • Photo folder.
  • Each subfolder = one carousel: off.
  • Photos per carousel: 1 to 35.

Folder layout

photos/
├── img_01.jpg          ┐
├── img_02.jpg          │  carousel #1 (if Photos per carousel = 5)
├── img_03.jpg          │
├── img_04.jpg          │
├── img_05.jpg          ┘
├── img_06.jpg          ┐
├── img_07.jpg          │  carousel #2
├── img_08.jpg          │
├── img_09.jpg          │
├── img_10.jpg          ┘
└── used/
    ├── img_01.jpg
    └── ...

Rules

  • Photos are sorted naturally by name and chunked into blocks of the configured size.
  • Sidecar captions don’t work in flat mode: there’s no unambiguous photo-to-group binding. For per-carousel captions, switch to subfolder mode or use a global caption source (see Captions).

Activity workflow: no media folders

Activity workflows do not upload anything. The template’s video/photo folder fields are ignored when Run Mode = Warmup. See Activity workflows for parameter setup.

Onboarding run: same as posting run

The content folder layout for an onboarding run (Run Mode = Seeding) is identical to a posting run. The onboarding run also reads an accounts file, where each line is one account in one of three formats (auto-detected):
FormatPattern
Pipe (recommended)email|email_pass|username|tiktok_pass[|refresh_token][|client_id]
Colon (legacy)username:password:email[:totp_or_refresh][:refresh_or_client_id]
Old colonemail:password[:totp]
user1@gmail.com|GmailPass123|cooluser1|TikTokPass!
channel@outlook.com|OutlookPass|bestchannel|SecretPass!|1.ARw...refresh_token
Heads up: if any TikTok password contains a : character, use the pipe format only. Colon parsing will break on the password field.
Unlike a posting run, onboarding intentionally publishes the same content to multiple fresh accounts, that’s the point. Publish history is tracked per account.

Multi-device protection: .publish_history.json

Inside every content folder, Warmr writes a hidden file:
videos/.publish_history.json
carousels/.publish_history.json
This file is the cross-device claim ledger. When several iPhones run posting runs against the same folder, it guarantees one source file goes to TikTok at most once per account. Claim TTL is 30 minutes, long enough to cover a normal upload, short enough that a crashed lane releases its claim quickly. Don’t delete .publish_history.json manually. If you wipe it, already-published files can be re-uploaded by lanes that don’t know they were already used. The file is safe to commit to version control if you want history; it is not safe to edit.

”Folder ready” checklists

For a posting run: video

  • All videos in one folder, extensions from the supported list.
  • Filenames sorted as you want them (natural sort is used).
  • No used/ subfolder yet, or it’s empty.
  • If you need per-file captions, each video has a <name>.json sidecar next to it.
  • Each carousel is a separate subfolder.
  • Photos inside are numbered/named so natural sort gives the order you want.
  • No subfolder is named used (reserved).
  • Template has Each subfolder = one carousel = on.
  • Optional: content.json (or description.json / caption.json) inside each subfolder for per-carousel captions.
  • All photos in one folder, sorted by filename.
  • Total photo count is a multiple of Photos per carousel: otherwise the tail won’t form a full carousel.
  • Captions come from a global source (Text / TXT / JSON), sidecars are not used in flat mode.

For an onboarding run

  • Folder structure identical to a posting run.
  • Accounts file in pipe format.
  • Proxies assigned (Stash / Happ / System). DIRECT is not allowed for onboarding.