<p align="center">
<img src="https://github.com/wkaisertexas/tiktok-uploader/assets/27795014/f991fdc7-287a-4c3b-9a84-22c7ad8a57bf" alt="video working" />
</p>
<h1 align="center"> ⬆️ TikTok Uploader </h1>
<p align="center">A <strong>Selenium</strong>-based automated <strong>TikTok</strong> video uploader</p>
<p align="center">
<a href="https://github.com/wkaisertexas/tiktok-uploader"><strong>English</strong></a> ·
<a href="https://github.com/wkaisertexas/tiktok-uploader/blob/main/README.zh-Hans.md"><strong>Chinese (Simplified)</strong></a> ·
<a href="https://github.com/wkaisertexas/tiktok-uploader/blob/main/README.fr.md"><strong>French</strong></a> ·
<a href="https://github.com/wkaisertexas/tiktok-uploader/blob/main/README.es.md"><strong>Spanish</string></a> ·
<a href="https://github.com/wkaisertexas/tiktok-uploader/blob/main/README.de.md"><strong>German</strong></a>
</p>
> ➡️ [Check out tranzlate on GitHub](https://github.com/wkaisertexas/tranzlate) a tool for translating text using [ChatGPT](https://chat.openai.com)
<p align="center">
<img alt="Forks" src="https://img.shields.io/github/forks/wkaisertexas/tiktok-uploader" />
<img alt="Stars" src="https://img.shields.io/github/stars/wkaisertexas/tiktok-uploader" />
<img alt="Watchers" src="https://img.shields.io/github/watchers/wkaisertexas/tiktok-uploader" />
</p>
<h1>Table of Contents</h1>
- [Installation](#installation)
- [MacOS, Windows and Linux](#macos-windows-and-linux)
- [Downloading from PyPI (Recommended)](#pypi)
- [Building from source](#building-from-source)
- [Usage](#usage)
- [💻 Command Line Interface (CLI)](#cli)
- [⬆ Uploading Videos](#uploading-videos)
- [🫵 Mentions and Hashtags](#mentions-and-hashtags)
- [🪡 Stitches, Duets and Comments](#stitches-duets-and-comments)
- [🔐 Authentication](#authentication)
- [👀 Browser Selection](#browser-selection)
- [🚲 Custom WebDriver Options](#custom-webdriver)
- [🤯 Headless Browsers](#headless)
- [🔨 Initial Setup](#initial-setup)
- [♻️ Examples](#examples)
- [📝 Notes](#notes)
- [Accounts made with](#made-with)
# Installation
A perquisite to using this program is the installation of a [Selenium-compatible](https://www.selenium.dev/documentation/webdriver/getting_started/install_drivers/) web browser. [Google Chrome](https://www.google.com/chrome/) is recommended.
<h2 id="macos-windows-and-linux">MacOS, Windows and Linux</h2>
Install Python 3 or greater from [python.org](https://www.python.org/downloads/)
<h3 id="pypi">Downloading from PyPI (Recommended)</h3>
Install `tiktok-uploader` using `pip`
```bash
pip install tiktok-uploader
```
<h3 id="building-from-source">Building from source</h3>
Installing from source allows greater flexibility to modify the module's code to extend default behavior.
First, `clone` and move into the repository. Next, install `hatch`, the build tool used for this project [^1]. Then, `build` the project. Finally, `install` the project with the `-e` or editable flag.
```console
git clone https://github.com/wkaisertexas/tiktok-uploader.git
cd tiktok-uploader
pip install hatch
hatch build
pip install -e .
```
<h1 id="usage">Usage</h1>
`tiktok-uploader` works by duplicating your browser's **cookies** which tricks **TikTok** into believing you are logged in on a remote-controlled browser.
<h2 id="cli"> 💻 Command Line Interface (CLI)</h2>
Using the CLI is as simple as calling `tiktok-uploader` with your videos: `path` (-v), `description`(-d) and `cookies` (-c)
```bash
tiktok-uploader -v video.mp4 -d "this is my escaped \"description\"" -c cookies.txt
```
```python
from tiktok_uploader.upload import upload_video, upload_videos
from tiktok_uploader.auth import AuthBackend
# single video
upload_video('video.mp4',
description='this is my description',
cookies='cookies.txt')
# Multiple Videos
videos = [
{
'path': 'video.mp4',
'description': 'this is my description'
},
{
'path': 'video2.mp4',
'description': 'this is also my description'
}
]
auth = AuthBackend(cookies='cookies.txt')
upload_videos(videos=videos, auth=auth)
```
<h2 id="uploading-videos"> ⬆ Uploading Videos</h2>
This library revolves around the `upload_videos` function which takes in a list of videos which have **filenames** and **descriptions** and are passed as follows:
```python
from tiktok_uploader.upload import upload_videos
from tiktok_uploader.auth import AuthBackend
videos = [
{
'video': 'video0.mp4',
'description': 'Video 1 is about ...'
},
{
'video': 'video1.mp4',
'description': 'Video 2 is about ...'
}
]
auth = AuthBackend(cookies='cookies.txt')
failed_videos = upload_videos(videos=videos, auth=auth)
for video in failed_videos: # each input video object which failed
print(f'{video['video']} with description "{video['description']}" failed')
```
<h2 id="mentions-and-hashtags"> 🫵 Mentions and Hashtags</h2>
Mentions and Hashtags now work so long as they are followed by a space. However, you as the user are responsible for verifying a mention or hashtag exists before posting
**Example:**
```python
from tiktok_uploader.upload import upload_video
upload_video('video.mp4', '#fyp @icespicee', 'cookies.txt')
```
<h2 id="stitches-duets-and-comments"> 🪡 Stitches, Duets and Comments</h2>
To set whether or not a video uploaded allows stitches, comments or duet, simply specify `comment`, `stitch` and/or `duet` as keyword arguments to `upload_video` or `upload_videos`.
```python
upload_video(..., comment=True, stitch=True, duet=True)
```
> Comments, Stitches and Duets are allowed by **default**
<h2 id="proxy"> 🌐 Proxy</h2>
To set a proxy, currently only works with chrome as the browser, allow user:pass auth.
```python
# proxy = {'user': 'myuser', 'pass': 'mypass', 'host': '111.111.111', 'port': '99'} # user:pass
proxy = {'host': '111.111.111', 'port': '99'}
upload_video(..., proxy=proxy)
```
<h2 id="schedule"> 📆 Schedule</h2>
The datetime to schedule the video will be treated with the UTC timezone. <br>
The scheduled datetime must be at least 20 minutes in the future and a maximum of 10 days.
```python
import datetime
schedule = datetime.datetime(2020, 12, 20, 13, 00)
upload_video(..., schedule=schedule)
```
<h2 id="authentication"> 🔐 Authentication</h2>
Authentication uses your browser's cookies. This workaround was done due to TikTok's stricter stance on authentication by a Selenium-controlled browser.
Your `sessionid` is all that is required for authentication and can be passed as an argument to nearly any function
[🍪 Get cookies.txt](https://github.com/kairi003/Get-cookies.txt-LOCALLY) makes getting cookies in a [NetScape cookies format](http://fileformats.archiveteam.org/wiki/Netscape_cookies.txt).
After installing, open the extensions menu on [TikTok.com](https://tiktok.com/) and click `🍪 Get cookies.txt` to reveal your cookies. Select `Export As ⇩` and specify a location and name to save.
**Optionally**, `cookies_list` is a list of dictionaries with keys `name`, `value`, `domain`, `path` and `expiry` which allow you to pass your own browser cookies.
**Example:**
```python
cookies_list = [
{
'name': 'sessionid',
'value': '**your session id**',
'domain': 'https://tiktok.com',
'path': '/',
'expiry': '10/8/2023, 12:18:58 PM'
}
]
upload_video(..., cookies_list=cookies_list)
```
<h2 id="browser-selection"> 👀 Browser Selection</h2>
[Google Chrome](https://www.google.com/chrome) is the preferred browser for **TikTokUploader**. The default anti-detection techniques used in this packaged are optimized for this. However, if you wish to use a different browser you may specify the `browser` in `upload_video` or `upload_videos`.
```python
from tiktok_uploader.upload import upload_video
from random import choice
BROWSERS = [
'chrome',
'safari',
'chromium',
'edge',
'firefox'
]
# randomly picks a web browser
upload_video(..., browser=choice(BROWSERS))
```
✅ Supported Browsers:
- **Chrome** (Recommended)
- **Safari**
- **Chromium**
- **Edge**
- **FireFox**
<h2 id="custom-webdriver"> 🚲 Custom WebDriver Options</h2>
Default modifications to Selenium are applied which help it avoid being detected by TikTok.
However, you **may** pass a custom driver configuration options. Simply pass `options` as a keyword argument to either `upload_video` or `upload_videos`.
```python
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument('start-maximized')
upload_videos(..., options=options)
```
> Note: Make sure to use the right selenium options for your browser
<h2 id="headless"> 🤯 Headless Browsers </h2>
Headless browsing only works on Chrome. When using Chrome, adding the `--headless` flag using the CLI or passing `headless` as a keyword argument to `upload_video` or `upload_videos` is all that is required.
```python
upload_video(..., headless=True)
upload_videos(..., headless=True)
```
<h2 id="initial-setup"> 🔨 Initial Setup</h2>
[WebDriverManager](https://bonigarcia.dev/webdrivermanager/) is used to manage driver versions.
On initial startup, you **may** be prompted to install the correct driver for your selected browser. However, for **Chrome** and **Edge** the driver is automatically installed.
<h2 id="examples"> ♻ Examples</h2>
- **[Basic Upload Example](examples/basic_upload.py):** Uses `upload_video` to make one post.
- **[Multiple Videos At Once](examples/multiple_videos_at_once.py):** Uploads the same video multiple times using `upload_videos`.
- **[Series Upload Example](examples/series_upload.py):** Videos are read from a CSV file using [Pandas](https://pandas.pydata.org). A video upload attempt is made and **if and only if** it is successful will the video be marked as uploaded.
<h1 id="notes"> 📝 Notes</h1>
This bot is not fool proof. Though I have not gotten an official ban, the video will fail to upload after too many uploads. In testing, waiting several hours was sufficient to fix this problem. For this reason, please thing of this more as a scheduled uploader for TikTok videos, rather than a spam bot.
<h1 id="made-with"> Accounts made with</h1>
- [@C_Span](https://www.tiktok.com/@c_span?lang=en) - A split-screen channel with mobile games below featuring clips from C-Span's YouTube channel
- [@habit_track](https://www.tiktok.com/@habit_track?lang=en) - A Reddit bot to see which SubReddit is most viral on TikTok
> If you like this project, please ⭐ it on GitHub to show your support! ❤️
[^1]: If interested in Hatch, checkout the [website](https://hatch.pypa.io/latest/build/)
Raw data
{
"_id": null,
"home_page": null,
"name": "tiktok-uploader",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.0",
"maintainer_email": null,
"keywords": "Automated TikTok Uploader,Automated TikTok Video Uploader,Automation,Automatisation,Automatizaci\u00f3n,CLI (Command Line Interface),Cargador autom\u00e1tico de TikTok,Cargador autom\u00e1tico de videos de TikTok,Cargador de TikTok,Cargador de videos de TikTok,Command Line,Interface de ligne de commande,Interfaz de l\u00ednea de comandos,Ligne de commande,L\u00ednea de comandos,Python,Selenio,Selenium,Subir,TikTok,TikTok Uploader,TikTok Video Uploader,T\u00e9l\u00e9charger / Mettre en ligne,T\u00e9l\u00e9chargeur automatique pour TikTok,T\u00e9l\u00e9chargeur de vid\u00e9os TikTok,T\u00e9l\u00e9chargeur de vid\u00e9os automatique pour TikTok,T\u00e9l\u00e9chargeur pour TikTok,Upload,Video,Vid\u00e9o,\u4e0a\u4f20 (Sh\u00e0ngchu\u00e1n),\u547d\u4ee4\u884c (M\u00ecngl\u00ecng h\u00e1ng),\u547d\u4ee4\u884c\u754c\u9762 (M\u00ecngl\u00ecng h\u00e1ng ji\u00e8mi\u00e0n),\u6296\u97f3 (D\u01d2uy\u012bn),\u6296\u97f3\u4e0a\u4f20\u5668 (D\u01d2uy\u012bn sh\u00e0ngchu\u00e1n q\u00ec),\u6296\u97f3\u89c6\u9891\u4e0a\u4f20\u5668 (D\u01d2uy\u012bn sh\u00ecp\u00edn sh\u00e0ngchu\u00e1n q\u00ec),\u7852 (X\u012b),\u81ea\u52a8\u5316 (Z\u00ecd\u00f2nghu\u00e0),\u81ea\u52a8\u5316\u6296\u97f3\u4e0a\u4f20\u5668 (Z\u00ecd\u00f2nghu\u00e0 D\u01d2uy\u012bn sh\u00e0ngchu\u00e1n q\u00ec),\u81ea\u52a8\u5316\u6296\u97f3\u89c6\u9891\u4e0a\u4f20\u5668 (Z\u00ecd\u00f2nghu\u00e0 D\u01d2uy\u012bn sh\u00ecp\u00edn sh\u00e0ngchu\u00e1n q\u00ec),\u87d2\u86c7 (M\u01cengsh\u00e9),\u89c6\u9891 (Sh\u00ecp\u00edn)",
"author": null,
"author_email": "William Kaiser <wkaisertexas@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/ae/4d/5f9cb70f5ae171fcba8087801de543db8729287c419d20b222f9cfbaeaf8/tiktok_uploader-1.0.15.tar.gz",
"platform": null,
"description": "<p align=\"center\">\n<img src=\"https://github.com/wkaisertexas/tiktok-uploader/assets/27795014/f991fdc7-287a-4c3b-9a84-22c7ad8a57bf\" alt=\"video working\" />\n</p>\n\n<h1 align=\"center\"> \u2b06\ufe0f TikTok Uploader </h1>\n<p align=\"center\">A <strong>Selenium</strong>-based automated <strong>TikTok</strong> video uploader</p>\n\n<p align=\"center\">\n <a href=\"https://github.com/wkaisertexas/tiktok-uploader\"><strong>English</strong></a> \u00b7\n <a href=\"https://github.com/wkaisertexas/tiktok-uploader/blob/main/README.zh-Hans.md\"><strong>Chinese (Simplified)</strong></a> \u00b7\n <a href=\"https://github.com/wkaisertexas/tiktok-uploader/blob/main/README.fr.md\"><strong>French</strong></a> \u00b7\n <a href=\"https://github.com/wkaisertexas/tiktok-uploader/blob/main/README.es.md\"><strong>Spanish</string></a> \u00b7\n <a href=\"https://github.com/wkaisertexas/tiktok-uploader/blob/main/README.de.md\"><strong>German</strong></a>\n</p>\n\n> \u27a1\ufe0f [Check out tranzlate on GitHub](https://github.com/wkaisertexas/tranzlate) a tool for translating text using [ChatGPT](https://chat.openai.com)\n\n\n<p align=\"center\">\n <img alt=\"Forks\" src=\"https://img.shields.io/github/forks/wkaisertexas/tiktok-uploader\" />\n <img alt=\"Stars\" src=\"https://img.shields.io/github/stars/wkaisertexas/tiktok-uploader\" />\n <img alt=\"Watchers\" src=\"https://img.shields.io/github/watchers/wkaisertexas/tiktok-uploader\" />\n</p>\n\n<h1>Table of Contents</h1>\n\n- [Installation](#installation)\n - [MacOS, Windows and Linux](#macos-windows-and-linux)\n - [Downloading from PyPI (Recommended)](#pypi)\n - [Building from source](#building-from-source)\n- [Usage](#usage)\n - [\ud83d\udcbb Command Line Interface (CLI)](#cli)\n - [\u2b06 Uploading Videos](#uploading-videos)\n - [\ud83e\udef5 Mentions and Hashtags](#mentions-and-hashtags)\n - [\ud83e\udea1 Stitches, Duets and Comments](#stitches-duets-and-comments)\n - [\ud83d\udd10 Authentication](#authentication)\n - [\ud83d\udc40 Browser Selection](#browser-selection)\n - [\ud83d\udeb2 Custom WebDriver Options](#custom-webdriver)\n - [\ud83e\udd2f Headless Browsers](#headless)\n - [\ud83d\udd28 Initial Setup](#initial-setup)\n- [\u267b\ufe0f Examples](#examples)\n- [\ud83d\udcdd Notes](#notes)\n- [Accounts made with](#made-with)\n\n# Installation\n\nA perquisite to using this program is the installation of a [Selenium-compatible](https://www.selenium.dev/documentation/webdriver/getting_started/install_drivers/) web browser. [Google Chrome](https://www.google.com/chrome/) is recommended.\n\n<h2 id=\"macos-windows-and-linux\">MacOS, Windows and Linux</h2>\n\nInstall Python 3 or greater from [python.org](https://www.python.org/downloads/)\n\n<h3 id=\"pypi\">Downloading from PyPI (Recommended)</h3>\n\nInstall `tiktok-uploader` using `pip`\n\n```bash\npip install tiktok-uploader\n```\n\n<h3 id=\"building-from-source\">Building from source</h3>\n\nInstalling from source allows greater flexibility to modify the module's code to extend default behavior.\n\nFirst, `clone` and move into the repository. Next, install `hatch`, the build tool used for this project [^1]. Then, `build` the project. Finally, `install` the project with the `-e` or editable flag.\n\n```console\ngit clone https://github.com/wkaisertexas/tiktok-uploader.git\ncd tiktok-uploader\npip install hatch\nhatch build\npip install -e .\n```\n\n<h1 id=\"usage\">Usage</h1>\n\n`tiktok-uploader` works by duplicating your browser's **cookies** which tricks **TikTok** into believing you are logged in on a remote-controlled browser.\n\n<h2 id=\"cli\"> \ud83d\udcbb Command Line Interface (CLI)</h2>\n\nUsing the CLI is as simple as calling `tiktok-uploader` with your videos: `path` (-v), `description`(-d) and `cookies` (-c)\n\n```bash\ntiktok-uploader -v video.mp4 -d \"this is my escaped \\\"description\\\"\" -c cookies.txt\n```\n\n```python\nfrom tiktok_uploader.upload import upload_video, upload_videos\nfrom tiktok_uploader.auth import AuthBackend\n\n# single video\nupload_video('video.mp4',\n description='this is my description',\n cookies='cookies.txt')\n\n# Multiple Videos\nvideos = [\n {\n 'path': 'video.mp4',\n 'description': 'this is my description'\n },\n {\n 'path': 'video2.mp4',\n 'description': 'this is also my description'\n }\n]\n\nauth = AuthBackend(cookies='cookies.txt')\nupload_videos(videos=videos, auth=auth)\n```\n\n<h2 id=\"uploading-videos\"> \u2b06 Uploading Videos</h2>\n\nThis library revolves around the `upload_videos` function which takes in a list of videos which have **filenames** and **descriptions** and are passed as follows:\n\n```python\nfrom tiktok_uploader.upload import upload_videos\nfrom tiktok_uploader.auth import AuthBackend\n\nvideos = [\n {\n 'video': 'video0.mp4',\n 'description': 'Video 1 is about ...'\n },\n {\n 'video': 'video1.mp4',\n 'description': 'Video 2 is about ...'\n }\n]\n\nauth = AuthBackend(cookies='cookies.txt')\nfailed_videos = upload_videos(videos=videos, auth=auth)\n\nfor video in failed_videos: # each input video object which failed\n print(f'{video['video']} with description \"{video['description']}\" failed')\n```\n\n<h2 id=\"mentions-and-hashtags\"> \ud83e\udef5 Mentions and Hashtags</h2>\n\nMentions and Hashtags now work so long as they are followed by a space. However, you as the user are responsible for verifying a mention or hashtag exists before posting\n\n**Example:**\n\n```python\nfrom tiktok_uploader.upload import upload_video\n\nupload_video('video.mp4', '#fyp @icespicee', 'cookies.txt')\n```\n\n<h2 id=\"stitches-duets-and-comments\"> \ud83e\udea1 Stitches, Duets and Comments</h2>\n\nTo set whether or not a video uploaded allows stitches, comments or duet, simply specify `comment`, `stitch` and/or `duet` as keyword arguments to `upload_video` or `upload_videos`.\n\n```python\nupload_video(..., comment=True, stitch=True, duet=True)\n```\n\n> Comments, Stitches and Duets are allowed by **default**\n\n<h2 id=\"proxy\"> \ud83c\udf10 Proxy</h2>\n\nTo set a proxy, currently only works with chrome as the browser, allow user:pass auth.\n\n```python\n# proxy = {'user': 'myuser', 'pass': 'mypass', 'host': '111.111.111', 'port': '99'} # user:pass\nproxy = {'host': '111.111.111', 'port': '99'}\nupload_video(..., proxy=proxy)\n```\n\n<h2 id=\"schedule\"> \ud83d\udcc6 Schedule</h2>\n\nThe datetime to schedule the video will be treated with the UTC timezone. <br>\nThe scheduled datetime must be at least 20 minutes in the future and a maximum of 10 days.\n\n```python\nimport datetime\nschedule = datetime.datetime(2020, 12, 20, 13, 00)\nupload_video(..., schedule=schedule)\n```\n\n<h2 id=\"authentication\"> \ud83d\udd10 Authentication</h2>\n\nAuthentication uses your browser's cookies. This workaround was done due to TikTok's stricter stance on authentication by a Selenium-controlled browser.\n\nYour `sessionid` is all that is required for authentication and can be passed as an argument to nearly any function\n\n[\ud83c\udf6a Get cookies.txt](https://github.com/kairi003/Get-cookies.txt-LOCALLY) makes getting cookies in a [NetScape cookies format](http://fileformats.archiveteam.org/wiki/Netscape_cookies.txt).\n\nAfter installing, open the extensions menu on [TikTok.com](https://tiktok.com/) and click `\ud83c\udf6a Get cookies.txt` to reveal your cookies. Select `Export As \u21e9` and specify a location and name to save.\n\n**Optionally**, `cookies_list` is a list of dictionaries with keys `name`, `value`, `domain`, `path` and `expiry` which allow you to pass your own browser cookies.\n\n**Example:**\n\n```python\ncookies_list = [\n {\n 'name': 'sessionid',\n 'value': '**your session id**',\n 'domain': 'https://tiktok.com',\n 'path': '/',\n 'expiry': '10/8/2023, 12:18:58 PM'\n }\n]\n\nupload_video(..., cookies_list=cookies_list)\n```\n\n<h2 id=\"browser-selection\"> \ud83d\udc40 Browser Selection</h2>\n\n[Google Chrome](https://www.google.com/chrome) is the preferred browser for **TikTokUploader**. The default anti-detection techniques used in this packaged are optimized for this. However, if you wish to use a different browser you may specify the `browser` in `upload_video` or `upload_videos`.\n\n```python\nfrom tiktok_uploader.upload import upload_video\n\nfrom random import choice\n\nBROWSERS = [\n 'chrome',\n 'safari',\n 'chromium',\n 'edge',\n 'firefox'\n]\n\n# randomly picks a web browser\nupload_video(..., browser=choice(BROWSERS))\n```\n\n\u2705 Supported Browsers:\n\n- **Chrome** (Recommended)\n- **Safari**\n- **Chromium**\n- **Edge**\n- **FireFox**\n\n<h2 id=\"custom-webdriver\"> \ud83d\udeb2 Custom WebDriver Options</h2>\n\nDefault modifications to Selenium are applied which help it avoid being detected by TikTok.\n\nHowever, you **may** pass a custom driver configuration options. Simply pass `options` as a keyword argument to either `upload_video` or `upload_videos`.\n\n```python\nfrom selenium.webdriver.chrome.options import Options\n\noptions = Options()\n\noptions.add_argument('start-maximized')\n\nupload_videos(..., options=options)\n```\n\n> Note: Make sure to use the right selenium options for your browser\n\n<h2 id=\"headless\"> \ud83e\udd2f Headless Browsers </h2>\n\nHeadless browsing only works on Chrome. When using Chrome, adding the `--headless` flag using the CLI or passing `headless` as a keyword argument to `upload_video` or `upload_videos` is all that is required.\n\n```python\nupload_video(..., headless=True)\nupload_videos(..., headless=True)\n```\n\n<h2 id=\"initial-setup\"> \ud83d\udd28 Initial Setup</h2>\n\n[WebDriverManager](https://bonigarcia.dev/webdrivermanager/) is used to manage driver versions.\n\nOn initial startup, you **may** be prompted to install the correct driver for your selected browser. However, for **Chrome** and **Edge** the driver is automatically installed.\n\n<h2 id=\"examples\"> \u267b Examples</h2>\n\n- **[Basic Upload Example](examples/basic_upload.py):** Uses `upload_video` to make one post.\n\n- **[Multiple Videos At Once](examples/multiple_videos_at_once.py):** Uploads the same video multiple times using `upload_videos`.\n\n- **[Series Upload Example](examples/series_upload.py):** Videos are read from a CSV file using [Pandas](https://pandas.pydata.org). A video upload attempt is made and **if and only if** it is successful will the video be marked as uploaded.\n\n<h1 id=\"notes\"> \ud83d\udcdd Notes</h1>\n\nThis bot is not fool proof. Though I have not gotten an official ban, the video will fail to upload after too many uploads. In testing, waiting several hours was sufficient to fix this problem. For this reason, please thing of this more as a scheduled uploader for TikTok videos, rather than a spam bot.\n\n<h1 id=\"made-with\"> Accounts made with</h1>\n\n- [@C_Span](https://www.tiktok.com/@c_span?lang=en) - A split-screen channel with mobile games below featuring clips from C-Span's YouTube channel\n- [@habit_track](https://www.tiktok.com/@habit_track?lang=en) - A Reddit bot to see which SubReddit is most viral on TikTok\n\n> If you like this project, please \u2b50 it on GitHub to show your support! \u2764\ufe0f\n\n[^1]: If interested in Hatch, checkout the [website](https://hatch.pypa.io/latest/build/)\n",
"bugtrack_url": null,
"license": null,
"summary": "An automatic TikTok video uploader w/ CLI. Uploads videos automatically using an automated browser and your cookies for authentication.",
"version": "1.0.15",
"project_urls": {
"Bug Tracker": "https://github.com/wkaisertexas/tiktok-uploader/issues",
"Source Code": "https://github.com/wkaisertexas/tiktok-uploader"
},
"split_keywords": [
"automated tiktok uploader",
"automated tiktok video uploader",
"automation",
"automatisation",
"automatizaci\u00f3n",
"cli (command line interface)",
"cargador autom\u00e1tico de tiktok",
"cargador autom\u00e1tico de videos de tiktok",
"cargador de tiktok",
"cargador de videos de tiktok",
"command line",
"interface de ligne de commande",
"interfaz de l\u00ednea de comandos",
"ligne de commande",
"l\u00ednea de comandos",
"python",
"selenio",
"selenium",
"subir",
"tiktok",
"tiktok uploader",
"tiktok video uploader",
"t\u00e9l\u00e9charger / mettre en ligne",
"t\u00e9l\u00e9chargeur automatique pour tiktok",
"t\u00e9l\u00e9chargeur de vid\u00e9os tiktok",
"t\u00e9l\u00e9chargeur de vid\u00e9os automatique pour tiktok",
"t\u00e9l\u00e9chargeur pour tiktok",
"upload",
"video",
"vid\u00e9o",
"\u4e0a\u4f20 (sh\u00e0ngchu\u00e1n)",
"\u547d\u4ee4\u884c (m\u00ecngl\u00ecng h\u00e1ng)",
"\u547d\u4ee4\u884c\u754c\u9762 (m\u00ecngl\u00ecng h\u00e1ng ji\u00e8mi\u00e0n)",
"\u6296\u97f3 (d\u01d2uy\u012bn)",
"\u6296\u97f3\u4e0a\u4f20\u5668 (d\u01d2uy\u012bn sh\u00e0ngchu\u00e1n q\u00ec)",
"\u6296\u97f3\u89c6\u9891\u4e0a\u4f20\u5668 (d\u01d2uy\u012bn sh\u00ecp\u00edn sh\u00e0ngchu\u00e1n q\u00ec)",
"\u7852 (x\u012b)",
"\u81ea\u52a8\u5316 (z\u00ecd\u00f2nghu\u00e0)",
"\u81ea\u52a8\u5316\u6296\u97f3\u4e0a\u4f20\u5668 (z\u00ecd\u00f2nghu\u00e0 d\u01d2uy\u012bn sh\u00e0ngchu\u00e1n q\u00ec)",
"\u81ea\u52a8\u5316\u6296\u97f3\u89c6\u9891\u4e0a\u4f20\u5668 (z\u00ecd\u00f2nghu\u00e0 d\u01d2uy\u012bn sh\u00ecp\u00edn sh\u00e0ngchu\u00e1n q\u00ec)",
"\u87d2\u86c7 (m\u01cengsh\u00e9)",
"\u89c6\u9891 (sh\u00ecp\u00edn)"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "2d6d4db2bc56661a7b55b1ab6d7393593256619b8abd766a65370ea9a6013d5b",
"md5": "4bdc192078659ef508de4ae09b5c90d5",
"sha256": "018fa261c73609908b8a25d7176af20602cf1b7ab4dba0f8e3f7ad0715900a63"
},
"downloads": -1,
"filename": "tiktok_uploader-1.0.15-py3-none-any.whl",
"has_sig": false,
"md5_digest": "4bdc192078659ef508de4ae09b5c90d5",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.0",
"size": 23549,
"upload_time": "2024-01-20T22:04:04",
"upload_time_iso_8601": "2024-01-20T22:04:04.889016Z",
"url": "https://files.pythonhosted.org/packages/2d/6d/4db2bc56661a7b55b1ab6d7393593256619b8abd766a65370ea9a6013d5b/tiktok_uploader-1.0.15-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "ae4d5f9cb70f5ae171fcba8087801de543db8729287c419d20b222f9cfbaeaf8",
"md5": "41e4308cf7b3244e40b2e7e84c3b7c17",
"sha256": "c2200b1a3e2bb91034abbe50824f61b08a746a43ecf80520ad023d34cb712fbf"
},
"downloads": -1,
"filename": "tiktok_uploader-1.0.15.tar.gz",
"has_sig": false,
"md5_digest": "41e4308cf7b3244e40b2e7e84c3b7c17",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.0",
"size": 37692,
"upload_time": "2024-01-20T22:04:07",
"upload_time_iso_8601": "2024-01-20T22:04:07.031984Z",
"url": "https://files.pythonhosted.org/packages/ae/4d/5f9cb70f5ae171fcba8087801de543db8729287c419d20b222f9cfbaeaf8/tiktok_uploader-1.0.15.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-01-20 22:04:07",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "wkaisertexas",
"github_project": "tiktok-uploader",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "tiktok-uploader"
}