A Windows desktop application for scheduling and uploading TikTok videos in bulk
using a real Chromium browser driven by Playwright automation.
TikTok Scheduler is a PyQt6 desktop client built for creators and operators who need a repeatable workflow for preparing uploads, generating schedule windows, and managing multiple TikTok accounts. The application automates the TikTok web upload flow through Playwright while keeping account cookies, scheduled uploads, published history, and UI state organized locally.
- Bulk upload preparation from local
.mp4folders - Configurable scheduling windows with date and time rules
- Cookie-based multi-account management
- Published and scheduled file tracking per account
- Modern desktop UI with multiple application themes
- Rich terminal logging for execution feedback
- Optional headless browser execution
- Copyright and content quality feedback surfaced during upload
- Python 3.10 or newer
- Windows 10 or Windows 11
- Chromium installed through Playwright
git clone https://github.com/davins/tiktok-scheduler.git
cd tiktok-schedulerpip install -r requirements.txtpython -m playwright install chromiumTip:
RUN.batcan bootstrap dependencies and launch the application automatically.
Double-click RUN.bat from the project root.
python main.pyTikTok Scheduler uses exported browser cookies instead of username/password login inside the app.
- Sign in to TikTok Creator in your browser.
- Export cookies as JSON with a browser cookie extension.
- Open the application and go to the Accounts tab.
- Add the TikTok username and paste the cookie JSON.
- Save the account for future scheduling sessions.
An example payload is included in example_cookie.json.
Runtime options are loaded from config.json.
| Key | Description | Default |
|---|---|---|
windowSize |
Initial application window size | 1200 x 800 |
minWindowSize |
Minimum configured window size | 900 x 600 |
theme |
Initial theme name | system |
primaryColor |
Accent color used by the base palette | #1E66FF |
headlessDefault |
Default browser visibility mode | true |
logLevel |
Logging verbosity | INFO |
scheduleRules.minOffsetMinutes |
Minimum delay before a schedule can start | 15 |
scheduleRules.maxOffsetMonths |
Maximum schedule range | 1 |
scheduleRules.minuteStep |
Minute rounding step | 5 |
tiktok-scheduler/
|-- main.py
|-- config.json
|-- setup.py
|-- requirements.txt
|-- RUN.bat
|-- assets/
|-- core/
| |-- browser_manager.py
| |-- config_manager.py
| |-- cookie_manager.py
| |-- dom_handler.py
| |-- logger_manager.py
| |-- schedule_rule_engine.py
| |-- scheduler.py
| `-- uploader.py
|-- gui/
| |-- controller.py
| |-- main_window.py
| |-- components/
| |-- controllers/
| |-- dialogs/
| |-- layouts/
| |-- pages/
| |-- services/
| |-- tables/
| |-- theme/
| `-- widgets/
|-- storage/
| |-- publishes/
| `-- schedules/
|-- cookies/
`-- utils/
- Storage and cookie data are intended to remain local to the workstation.
- The GUI and core upload logic are separated so UI changes do not require rewriting the automation pipeline.
- Published records are stored under
storage/publishes/and scheduled records understorage/schedules/.
This project is licensed under the MIT License.