Text Overlays: Add Timestamps, Branding & Live Data
Add professional text overlays to your webcam images — timestamps, branding, live weather data, sensor readings, and more. Text is burned into images and appears in time-lapse videos.
Overview
Text overlays let you add information directly onto your webcam images:
| Overlay Type | Example | Use Case |
|---|---|---|
| Static text | “Mountain View Resort” | Branding, location name |
| Timestamp | “2025-01-15 14:30:25” | Date/time documentation |
| Dynamic text | “Temperature: 23°C” | Live sensor data, weather |
| URL-fetched | Data from external source | Weather APIs, custom systems |
Accessing Overlay Settings
- Log in to webcam.io Dashboard
- Go to Webcams → Select your camera → Edit
- Scroll to Text Overlays section
- Configure your overlays
- Click Image Preview to test
- Save when satisfied
Static Text Overlays
Add fixed text that appears on every image — perfect for branding and identification.
Adding Static Text
- In Text Overlays section, find the text input field
- Enter your text:
Mountain View Resort - Configure position, font size, and color
- Preview and save
Configuration Options
| Setting | Options | Description |
|---|---|---|
| Position | Top-left, Top-right, Bottom-left, Bottom-right | Corner placement |
| Font size | Small, Medium, Large | Text size |
| Text color | Color picker | Font color |
| Background | None, Semi-transparent, Solid | Background behind text |
Best Practices for Static Text
- Keep text short (fits on one line)
- Place in corner that won’t obstruct the main view
- Include your website URL for branding
Example static overlays:
Mountain View Resort - www.mountainview.com
Construction Site #42 - Phase 2
Ski Resort Webcam - Elevation 2,400m
Timestamp Overlay
Add the capture date and time to every image — essential for documentation and time-lapse videos.
Adding a Timestamp
Use the {timestamp} variable in your text field:
{timestamp}
This displays the capture time in your webcam’s configured timezone.
Timestamp Formats
The default format shows full date and time. For custom formatting, combine with static text:
Captured: {timestamp}
Output: Captured: 2025-01-15 14:30:25
Dynamic Text Overlays
Display changing information on your images — weather data, sensor readings, or any custom text that updates automatically.
Two Methods for Dynamic Text
- API Push — You send data to webcam.io (best for sensors, custom systems)
- URL Fetch — webcam.io pulls data from a URL (best for weather services)
Method 1: API Push (Recommended)
Send data to webcam.io via API, and it appears on the next captured image.
Step 1: Add Variables to Overlay
In your text overlay field, use these variables:
{dynamic_text1}
{dynamic_text2}
{dynamic_text3}
Example configuration:
Temperature: {dynamic_text1} | Humidity: {dynamic_text2}
Step 2: Update via API
Send data using the webcam.io API:
curl -X PUT "https://webcam.io/api/webcams/WEBCAM-ID" \
-H "Content-Type: application/json" \
-H "X-Auth-Email: your@email.com" \
-H "X-Auth-Key: YOUR-API-KEY" \
-d '{
"dynamic_text1": "23°C",
"dynamic_text2": "65%"
}'Result on image: Temperature: 23°C | Humidity: 65%
Getting Your API Credentials
| Credential | Where to Find |
|---|---|
| API Key | Dashboard → Profile → API Key (click “Create” if none exists) |
| Webcam ID | Dashboard → Webcams list |
Code Examples
#!/bin/bash
# Update overlay with weather data
API_EMAIL="your@email.com"
API_KEY="your-api-key"
WEBCAM_ID="m7g61z"
# Get weather (example using wttr.in)
TEMP=$(curl -s "wttr.in/Berlin?format=%t")
HUMIDITY=$(curl -s "wttr.in/Berlin?format=%h")
# Update webcam
curl -X PUT "https://webcam.io/api/webcams/$WEBCAM_ID" \
-H "Content-Type: application/json" \
-H "X-Auth-Email: $API_EMAIL" \
-H "X-Auth-Key: $API_KEY" \
-d "{\"dynamic_text1\": \"$TEMP\", \"dynamic_text2\": \"$HUMIDITY\"}"import requests
API_EMAIL = "your@email.com"
API_KEY = "your-api-key"
WEBCAM_ID = "m7g61z"
def update_overlay(text1, text2=None, text3=None):
data = {"dynamic_text1": text1}
if text2: data["dynamic_text2"] = text2
if text3: data["dynamic_text3"] = text3
response = requests.put(
f"https://webcam.io/api/webcams/{WEBCAM_ID}",
headers={
"Content-Type": "application/json",
"X-Auth-Email": API_EMAIL,
"X-Auth-Key": API_KEY
},
json=data
)
return response.json()
# Example: Update with temperature
update_overlay("23°C", "65% humidity")const API_EMAIL = 'your@email.com';
const API_KEY = 'your-api-key';
const WEBCAM_ID = 'm7g61z';
async function updateOverlay(text1, text2 = null, text3 = null) {
const data = { dynamic_text1: text1 };
if (text2) data.dynamic_text2 = text2;
if (text3) data.dynamic_text3 = text3;
const response = await fetch(
`https://webcam.io/api/webcams/${WEBCAM_ID}`,
{
method: 'PUT',
headers: {
'Content-Type': 'application/json',
'X-Auth-Email': API_EMAIL,
'X-Auth-Key': API_KEY
},
body: JSON.stringify(data)
}
);
return response.json();
}
// Example usage
updateOverlay('23°C', '65% humidity');<?php
$api_email = 'your@email.com';
$api_key = 'your-api-key';
$webcam_id = 'm7g61z';
function updateOverlay($text1, $text2 = null, $text3 = null) {
global $api_email, $api_key, $webcam_id;
$data = ['dynamic_text1' => $text1];
if ($text2) $data['dynamic_text2'] = $text2;
if ($text3) $data['dynamic_text3'] = $text3;
$ch = curl_init("https://webcam.io/api/webcams/$webcam_id");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_POSTFIELDS => json_encode($data),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
"X-Auth-Email: $api_email",
"X-Auth-Key: $api_key"
]
]);
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true);
}
// Example usage
updateOverlay('23°C', '65% humidity');
?>Scheduling Updates
Use cron (Linux/Mac) or Task Scheduler (Windows) to update regularly:
# Update every 10 minutes
*/10 * * * * /path/to/update-overlay.shSee: API Reference for complete documentation
Method 2: URL Fetch
webcam.io can fetch text from a URL and display it as an overlay.
Setup
Use this variable format in your overlay:
{url:http://your-server.com/data.txt}
Requirements
| Requirement | Details |
|---|---|
| Format | Plain text only (no HTML) |
| Length | Maximum 240 characters |
| Speed | Must respond within 6 seconds |
| Availability | URL must be publicly accessible |
Example: Simple Weather File
Server file (weather.txt):
Temp: 23°C | Wind: 12 km/h NE
Overlay configuration:
{url:http://your-server.com/weather.txt}
Example: PHP Weather Script
<?php
// weather.php - Returns current weather as plain text
header('Content-Type: text/plain');
// Your weather logic here
$temp = "23°C";
$humidity = "65%";
echo "Temp: $temp | Humidity: $humidity";
?>Overlay configuration:
{url:http://your-server.com/weather.php}
- HTML tags are stripped (may cause strange results)
- 6-second timeout — slow servers will fail
- Fetched once per image capture
- Errors result in empty text (no error shown)
Use Cases & Examples
Weather Station
Display live weather data from a sensor:
Overlay config:
{dynamic_text1} | {dynamic_text2}
Wind: {dynamic_text3}
API update (every 5 min):
curl -X PUT "https://webcam.io/advanced/api/webcams/ID" \
-d '{"dynamic_text1":"18°C","dynamic_text2":"72%","dynamic_text3":"SW 15km/h"}'Result: 18°C | 72% / Wind: SW 15km/h
Construction Progress
Show project phase and date:
Construction Site A - Phase 2
{timestamp}
Day 127 of 365
Ski Resort
Display snow and lift status:
{dynamic_text1}
Lifts: {dynamic_text2}
{timestamp}
Update via API:
{
"dynamic_text1": "Snow: 85cm | Fresh: 15cm",
"dynamic_text2": "8/12 open"
}Hotel/Resort
Simple branding with timestamp:
Grand Mountain Hotel
www.grandmountain.com
{timestamp}
Troubleshooting
Text not appearing
- Check preview — Click “Image Preview” to test
- Save settings — Changes only apply after saving
- Wait for next image — Dynamic text appears on the next capture
Dynamic text showing nothing
- API call hasn’t been made yet
- Check API credentials
- Verify webcam ID
URL fetch returning empty
- Check URL is accessible publicly
- Verify response is plain text (not HTML)
- Ensure response time < 6 seconds
- Test URL directly in browser
Text hard to read
- Increase font size
- Add background to text
- Reposition to less busy area of image
Variable Reference
| Variable | Description | Update Method |
|---|---|---|
{timestamp} |
Capture date/time | Automatic |
{dynamic_text1} |
Custom text line 1 | API |
{dynamic_text2} |
Custom text line 2 | API |
{dynamic_text3} |
Custom text line 3 | API |
{url:http://...} |
Text from URL | URL fetch |
Next Steps
- API Reference — Complete API documentation
- Widgets — Embed time-lapse on your website
- Video Clips — Create shareable highlights
- Timer Settings — Control capture times