Yes, you can use your own computer: Windows, macOS or Linux. There is one condition: it must stay on, awake, and connected to the same network (Wi-Fi or cable) as the camera, because the program records only while it is running. A laptop that sleeps or is closed in the evening will miss the motion it should have recorded. If that does not suit you, a spare mini PC, a Raspberry Pi or a small server is a better home for it.
Because the PC and the camera are on the same network, you do not open any port on the router and nothing is exposed to the internet.
Before you start 1. Tools 2. The program 3. Settings 4. Test 5. Run it 6. Keep it running Docker Problems
Before you start
- The camera account. In the Tapo app open the camera, Settings → Advanced → Camera Account and create a username and password just for the camera (not your Tapo login).
- The camera's address. Find its IP address in the Tapo app (Device Info) or in your router, for example
192.168.1.50. Ask the router to always give it the same address (DHCP reservation), or the program will lose it after a reboot. - Where the videos go. The simplest choice needs no account at all: keep them on this PC's disk. Others (YouTube, OneDrive, Nextcloud...) are in the storage guide.
1. Install the tools
You need three programs: Python (3.10 or newer), ffmpeg (records the video) and git (downloads the program).
Windows
Open PowerShell (Start menu, type PowerShell) and run:
winget install Python.Python.3.12 winget install Gyan.FFmpeg winget install Git.Git
Close PowerShell and open it again, then check: python --version and ffmpeg -version must both answer.
macOS
In Terminal, with Homebrew: brew install python ffmpeg git
Linux (Debian, Ubuntu, Raspberry Pi OS)
sudo apt update sudo apt install python3 python3-venv ffmpeg git
2. Get the program
git clone https://github.com/LuigiElleBalotta/tapo-uploader.git cd tapo-uploader python -m venv .venv
Then activate the environment and install what the program needs:
# Windows (PowerShell) .venv\Scripts\Activate.ps1 # macOS / Linux . .venv/bin/activate pip install -r requirements.txt
On Windows, if PowerShell refuses to run the activation script, run Set-ExecutionPolicy -Scope Process Bypass first (it only lasts for that window).
3. Tell it about your camera
Copy the example settings file and open it in a text editor (Notepad is fine):
# Windows copy .env.example .env notepad .env # macOS / Linux cp .env.example .env
Fill in the three lines about the camera, with the address and the camera account from "Before you start":
CAMERA_HOST=192.168.1.50 CAMERA_USER=the-camera-account CAMERA_PASS=its-password
To keep the videos on this PC (no account needed), also add:
STORAGE=local LOCAL_ROOT=C:\Tapo # Windows. On macOS or Linux: /home/you/Tapo
The videos then appear in folders named Tapo YYYY-MM-DD inside that path. For YouTube, OneDrive, Nextcloud or another cloud, follow the storage guide instead.
4. Test
python tapo_uploader.py check
It must print the camera's video type (h264) and size. 401 Unauthorized means the camera account is wrong; Operation not permitted means another program (or the Tapo app's live view) is using the stream. To see the motion events the camera sends, wave at it while running python tapo_motion.py listen 60.
5. Run it
python tapo_motion.py run
It now records 30 seconds before and 5 minutes after every motion, and once a day (21:00 by default, change it with UPLOAD_AT) joins the clips into one video and saves it. Leave the window open; Ctrl+C stops it.
6. Keep it running
Do not let the PC sleep
- Windows: Settings → System → Power → Screen and sleep → set "When plugged in, put my device to sleep after" to Never. For a laptop also set "closing the lid" to Do nothing (Control Panel → Power Options → Choose what closing the lid does).
- macOS: System Settings → Battery/Energy → prevent automatic sleeping when the display is off; or start the program with
caffeinate -i python tapo_motion.py run. - Linux: disable suspend in the power settings.
Start it by itself
- Windows: open Task Scheduler → Create Task, trigger "At log on", action "Start a program" with
Program= the full path to.venv\Scripts\python.exe,Arguments=tapo_motion.py run,Start in= the program folder. - macOS: add a login item (or a launchd agent) that runs the same command from the program folder.
- Linux: a systemd service, as in the README.
If the Wi-Fi drops for a moment, the program reconnects on its own.
If you prefer Docker
With Docker Desktop (Windows, macOS) or Docker on Linux you can skip Python and ffmpeg: a ready-made image is published for every release. See the README for the command.
If something does not work
pythonorffmpegis "not recognized": close and reopen the terminal after installing; on Windows make sure the installer added them to the PATH.- The camera does not answer: the PC must be on the same network; check the address in the Tapo app, and that the camera account (not the Tapo login) is used.
- It stops when I close the lid or log out: see "Do not let the PC sleep" and "Start it by itself".
- Antivirus or firewall warnings: allow Python and ffmpeg to use the local network.
- I want several people or a page to watch the videos: that is the multi-account web app; see the README. It also runs on a PC, and you open it at
http://localhost:8080.