Ip-webcam.appspot • Hot
"id": "front-door",
"name": "Front Door",
"src_url": "http://192.168.1.10:8080/video",
"token": "camera-secret",
"resolution": "640x480",
"fps": 10
Place the old phone near a doorway, plug it into a charger, and enable motion detection with email alerts. You can also combine it with Alfred Camera or Home Assistant for a multi-camera setup.
⚠️ The Appspot relay is often broken or rate-limited today. Many users report “Server not found” or timeouts.
The service works by installing a small application or configuring an existing webcam on your device. Once set up, the webcam can stream video to the ip-webcam.appspot.com server, which then allows you to access the live feed remotely through a web interface. This is particularly useful for monitoring your home, office, or any other place where you've set up the webcam. ip-webcam.appspot
app.yaml
runtime: python311
entrypoint: gunicorn -b :$PORT main:app
env_variables:
GCS_BUCKET: "ip-webcam-exports"
AUTH_TOKEN: "replace-me"
requirements.txt
Flask==2.3.2
requests==2.31.0
opencv-python-headless==4.7.0.72
google-cloud-storage==2.11.0
gunicorn==20.1.0
main.py
from flask import Flask, Response, request, jsonify, send_file
import requests, io, os, time
from google.cloud import storage
app = Flask(__name__)
GCS_BUCKET = os.getenv("GCS_BUCKET")
CAMERAS = {} # simple in-memory registry for demo
def check_auth():
token = request.headers.get("Authorization","").replace("Bearer ","")
return token == os.getenv("AUTH_TOKEN")
@app.route("/api/v1/cameras", methods=["POST"])
def register_camera():
if not check_auth(): return ("Unauthorized", 401)
data = request.json
cam_id = data.get("id") or str(int(time.time()*1000))
CAMERAS[cam_id] = data
CAMERAS[cam_id].update("last_seen": None)
return jsonify("id": cam_id), 201
@app.route("/camera/<cam_id>/stream")
def proxy_stream(cam_id):
cam = CAMERAS.get(cam_id)
if not cam: return ("Not found", 404)
src = cam["src_url"]
r = requests.get(src, stream=True, timeout=5)
return Response(r.iter_content(chunk_size=1024), content_type=r.headers.get("Content-Type","image/jpeg"))
@app.route("/camera/<cam_id>/snapshot")
def snapshot(cam_id):
cam = CAMERAS.get(cam_id)
if not cam: return ("Not found", 404)
r = requests.get(cam["src_url"], timeout=10)
return Response(r.content, content_type="image/jpeg")
Note: production needs robust error handling, connection pooling, timeouts, and rate limiting. Place the old phone near a doorway, plug
While ip-webcam.appspot.com offers a convenient way to access your webcam remotely, it's crucial to consider the security implications:
If you find the app non-functional or want more modern features, consider these options. ⚠️ The Appspot relay is often broken or
| Alternative | Platform | Key Benefit | | :--- | :--- | :--- | | Alfred Camera | Android & iOS | Cloud recording, night vision emulation, motion zones – more polished UX. | | Home Assistant + Android IP Webcam integration | Open source | Full local control, no cloud dependency, integrates into smart home dashboards. | | DroidCam | Windows/Android | Converts phone into a high-quality PC webcam for Zoom/Teams, not security-focused. |