webcam dashboard showing live snapshot feeds from Madrid and cities around the world
https://madridcam.patilla.es
- CSS 48.3%
- JavaScript 35.2%
- HTML 13.3%
- Dockerfile 3.2%
|
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 5s
|
||
|---|---|---|
| .forgejo/workflows | ||
| src | ||
| .gitignore | ||
| compose.yml | ||
| Dockerfile | ||
| nginx.conf | ||
| README.md | ||
MadridCam
A minimal, self-hosted webcam dashboard showing live snapshot feeds from Madrid and cities around the world.
- No backend — pure static site served by nginx
- No build step — vanilla HTML, CSS, JavaScript
- Configurable — feeds and refresh rates defined in
src/config.json
Quick Start
git clone https://forgejo.patilla.es/patillacode/madridcam.git
cd madridcam
docker build -t madridcam .
docker run --rm -p 8080:80 madridcam
Open http://localhost:8080.
Customising feeds
Edit src/config.json, commit, and push. CI will rebuild and push the image automatically.
config.json schema
{
"title": "My Dashboard",
"sections": [
{
"id": "unique-id",
"label": "Section Label",
"feeds": [
{
"id": "feed-id",
"name": "Camera Name",
"sublabel": "Location",
"url": "https://cdn.skylinewebcams.com/liveXXX.jpg",
"refresh": 30
}
]
}
]
}
refresh is the interval in seconds between image reloads per feed.
Note: Direct browser requests to external webcam URLs are blocked by CORS/ORB. The nginx config includes a
/proxy/location that fetches images server-side. Use/proxy/liveXXX.jpginstead of the fullcdn.skylinewebcams.comURL.
Keyboard & touch shortcuts (lightbox)
| Input | Action |
|---|---|
| Click card | Open lightbox |
| ESC | Close |
| ← → | Cycle cameras within section |
| Swipe left/right | Cycle cameras (mobile) |
| Click outside | Close |