Guides, camera setup, troubleshooting, and answers to common questions.
Create your first time-lapse in under 5 minutes.
Go to lapseleap.com and click Sign In / Sign Up. You can sign in with Google or create an account with your email. It's free.
When the app opens, your browser will ask for camera permission. Click Allow. You'll see a live preview from your webcam.
Select a camera, resolution, and capture interval. Not sure? Pick the Medium (7s) preset — it works great for sunsets and weather.
Hit the Start button. The app will capture a frame at your chosen interval. Watch the frame counter and progress bar as images accumulate.
When you're done, click Stop, then Create Video or Create GIF. Your time-lapse is processed in the cloud and ready to download in seconds.
Tips for getting the best results from different camera setups.
Works out of the box in all browsers. Just allow camera access when prompted. If you have multiple cameras, use the dropdown to select the right one.
Plug in and it should appear in the camera dropdown. If it doesn't appear, click the ↻ refresh button next to the dropdown. On Mac, check System Settings → Privacy & Security → Camera to ensure your browser has permission.
Apple's Continuity Camera lets you use your iPhone's camera wirelessly from your Mac. Requirements:
Important: Safari is required for Continuity Camera — Chrome and Firefox cannot detect iPhone cameras on macOS.
If the camera appears but shows a black screen:
sudo killall avconferenced in Terminal, wait 15 seconds, then reopen your browserSafari is required for iPhone Continuity Camera. Chrome and Firefox work well for built-in Mac cameras and USB webcams. If you want to use your iPhone as a remote camera, use Safari.
Deploy a Raspberry Pi as a remote capture device — capture time-lapses 24/7 from anywhere with WiFi.
Go to the Devices page in the Lapseleap app. Click Add Device, give it a name, and enter your WiFi network name and password.
After creating the device, download two things:
Use Raspberry Pi Imager or a similar tool to flash the downloaded image onto your SD card. Then copy the lapseleap.json file to the bootfs partition (the FAT32 partition that shows up when you insert the card into your computer).
Plug in your USB webcam, insert the SD card, and power on the Pi. It will automatically:
The device will appear as active on the Devices page within a couple of minutes.
If you already have Raspberry Pi OS running, you can install the agent with one command:
Then copy lapseleap.json to /boot/firmware/ and reboot.
Click on a device on the Devices page to see a live preview stream from the Pi camera. Frames are streamed in real-time via WebSocket — no cloud storage involved. You can also start/stop capture and change settings remotely.
Instead of plugging a camera into the Pi, you can have the Pi pull frames from any RTSP-capable IP camera on the same local network. Useful when you already own a security camera (EZVIZ, Reolink, Hikvision, Dahua, etc.) and just want it to do time-lapse too.
How to set it up:
admin and the 6-character verification code from the sticker. On outdoor cameras the sticker is usually on the underside of the camera body or the mounting bracket; it's also on the retail box and the quick-start guide.
RTSP URL examples (replace user, password, IP and path with your camera's values):
The Pi uses TCP transport with a 5-second connection timeout and scales each frame to the configured resolution. Credentials in the URL are redacted from Pi logs.
Want to run your Pi capture station somewhere without mains power? A small solar panel + LiFePO₄ battery + charge controller is enough to keep a Pi capturing 24/7 in most climates. We've put together a complete reference build — system architecture, power budget, full bill of materials, and a wiring diagram.
lapseleap.json. Use a 2.4 GHz network; some Pi models have issues with 5 GHz.ping <camera-ip>) and that RTSP/Local Service is enabled in the camera app. For EZVIZ, the username is admin and the password is the verification code on the sticker. Check /opt/lapseleap/agent.log for ffmpeg RTSP error lines; credentials are redacted.lapseleap.json on the bootfs partition and reboot the Pi.Everything you can configure before starting a capture.
Higher resolution means sharper video but larger file sizes.
| Option | Pixels | Best for |
|---|---|---|
| 320×240 | 76,800 | Quick tests, preview runs, low bandwidth |
| 640×480 | 307,200 | Standard quality, good balance of size and detail |
| 1280×720 (HD) | 921,600 | High quality — the default. Recommended for most use cases |
| 1920×1080 (Full HD) | 2,073,600 | Maximum detail. Pro only. Ideal for large-screen playback |
Presets set the capture interval automatically. You can still adjust it manually after selecting a preset.
| Preset | Interval | Best for |
|---|---|---|
| Fast-moving | 2 seconds | Clouds, crowds, traffic, busy streets |
| Medium | 7 seconds | Sunsets, sunrises, weather changes |
| Slow | 60 seconds | Construction, art projects, cooking |
| Very slow | 24 hours | Plant growth, seasonal changes, long projects |
The time between each captured frame, in seconds. Set any value from 1 second upward. The final video plays at 30 FPS, so 300 images = 10 seconds of video, 1800 images = 1 minute of video.
When enabled, the camera only captures frames when motion is detected in the scene.
| Sensitivity | Threshold | Best for |
|---|---|---|
| High | 1% pixel change | Subtle motion — plants, shadows, slow movement |
| Medium | 2% pixel change | General use — people, traffic, weather |
| Low | 5% pixel change | Large motion only — ignore vibrations or flicker |
A 5-second cooldown continues capturing after motion stops, preventing abrupt cuts.
| Format | Type | Best for |
|---|---|---|
| MP4 Video | H.264 video file | High quality playback, sharing, presentations |
| Animated GIF | GIF image sequence | Social media, Slack, quick previews |
rtsp://admin:CODE@192.168.1.50:554/H.264). The Pi will pull one frame on every interval. For EZVIZ cameras you need to enable Local Service in the EZVIZ app first; the username is admin and the password is the verification code printed on the camera.
We intentionally use individual image capture rather than continuous video recording. This approach has several advantages:
Tip: To find the right capture speed for your project, experiment with the capture interval during setup. Fast-moving subjects (e.g. cooking, 3D printing) benefit from a shorter interval (2–5 s), while slow changes (e.g. construction, plant growth) work well at 30–60 s or more.
Connect to your Pi via SSH (ssh pi@<IP>) and use these commands:
grep AGENT_VERSION /opt/lapseleap/agent/agent.py | head -1tail -50 /opt/lapseleap/agent.logtail -f /opt/lapseleap/agent.logsudo systemctl status lapseleap-agentsudo systemctl restart lapseleap-agentnmcli -t -f NAME,STATE connection show --activels -la /etc/NetworkManager/system-connections/lapseleap-wifi*ping -c 3 google.comgrep 'relay' /opt/lapseleap/agent.log | tail -20cat /opt/lapseleap/credentials.json | python3 -m json.toolProgrammatically upload images to Lapseleap from scripts, servers, or IoT devices. Studio plan required.
Create an API key in Settings → API Keys. Keys start with llp_ and are shown once at creation.
Pass your key via the X-Api-Key header or Authorization: Bearer llp_... header.
https://lapseleap.com/api/v1
| Method | Path | Description |
|---|---|---|
POST | /upload | Get a presigned POST payload to upload a single image |
POST | /upload/batch | Get presigned POST payloads for up to 100 images |
GET | /sessions | List your sessions |
Step 1: Request a presigned upload payload
curl -X POST https://lapseleap.com/api/v1/upload \ -H "X-Api-Key: llp_your_key_here" \ -H "Content-Type: application/json" \ -d '{"sessionId": "my-timelapse", "contentType": "image/jpeg"}'
Response:
{
"upload": {
"method": "POST",
"url": "https://images07112023.s3.amazonaws.com/",
"fields": { "key": "users/...", "Content-Type": "image/jpeg", ... }
},
"key": "users/.../20260419_120000.jpg",
"expiresIn": 3600,
"maxUploadBytes": 10485760
}
Step 2: Upload the image with multipart/form-data POST
curl -X POST "UPLOAD_URL_FROM_STEP_1" \ -F "key=users/.../20260419_120000.jpg" \ -F "Content-Type=image/jpeg" \ -F "x-amz-algorithm=..." \ -F "x-amz-credential=..." \ -F "x-amz-date=..." \ -F "policy=..." \ -F "x-amz-signature=..." \ -F "file=@photo.jpg;type=image/jpeg"
Request multiple presigned URLs at once (up to 100):
curl -X POST https://lapseleap.com/api/v1/upload/batch \ -H "X-Api-Key: llp_your_key_here" \ -H "Content-Type: application/json" \ -d '{"sessionId": "my-timelapse", "count": 10, "contentType": "image/jpeg"}'
Response:
{
"uploads": [
{ "upload": { "method": "POST", "url": "https://...", "fields": {...} }, "key": "users/..." },
...
],
"count": 10,
"expiresIn": 3600
}
import requests API_KEY = "llp_your_key_here" BASE = "https://lapseleap.com/api/v1" HEADERS = {"X-Api-Key": API_KEY} # 1. Get upload payload resp = requests.post(f"{BASE}/upload", headers=HEADERS, json={ "sessionId": "garden-cam", "contentType": "image/jpeg" }) payload = resp.json()["upload"] # 2. Upload image with open("photo.jpg", "rb") as f: form = dict(payload["fields"]) form["Content-Type"] = "image/jpeg" requests.post(payload["url"], data=form, files={ "file": ("photo.jpg", f, "image/jpeg") })
^[A-Za-z0-9_-]{1,64}$sessionId across uploads to group images into a session for video creation in the appCan't find what you're looking for? Send us an email and we'll get back to you.
info@lapseleap.com