How I Downloaded 85 Free Videos From Google’s Public Cloud — With a Simple Python Script
Google left a bucket of videos sitting in the open. I wrote 20 lines of Python to grab them all.
No hacking. No passwords. No “exploits.” Just a public storage folder that anyone can access — and a script to automate the download. Here’s how it works and what you can learn from it.
The Backstory — How I Found This
Google has a showcase called Flow TV — a public demo site showing off video content:
While watching, I got curious. Where are these videos actually stored? So I did what any nosy person would do — I looked at the video URL.
It pointed back to something called a Google Cloud Storage bucket. Think of it like a public folder on Google’s servers. And this one? Wide open. No login required. No password. Just… files sitting there for anyone to grab.
☁️ WTF Is a Cloud Storage Bucket? (Dumb-Proof Explanation)
Imagine Google Drive — but for developers and companies.
Instead of sharing files through a link like normal humans, companies store their images, videos, and data in these “buckets” on Google’s cloud servers. Each bucket has a URL, and inside it are files (called “objects”).
The important part: Buckets can be set to public (anyone can see everything) or private (locked down, needs a key).
This bucket? Public. No lock on the door. The files inside were video assets Google uses for their Flow TV demo — and the bucket listing was readable by anyone who knew the URL.
That means you could:
- See every file stored in the bucket
- Read metadata about each file (size, name, date)
- Download any file directly
No tricks. That’s just how public buckets work.
What I Found
The bucket URL:
https://storage.googleapis.com/gweb-tveo-website.appspot.com/
When you visit a public GCS bucket, it returns an XML file — basically a structured list of everything stored inside. Each file entry looks something like this:
<Contents>
<Key>videos/some-video-name.mp4</Key>
<Size>12345678</Size>
<LastModified>2025-01-15T10:30:00Z</LastModified>
</Contents>
Key = the file path. Size = file size. That’s your download list right there.
The pattern to build a download link:
https://storage.googleapis.com/{bucket-name}/{object-key}
So for every .mp4 file listed in that XML → build the URL → download it. That’s it.
Result: ~85 publicly accessible videos. All downloadable. All legit.
The Python Script (20 Lines)
This script reads the XML listing, finds every .mp4 file, builds the download URL, and grabs them all automatically.
📜 Full Script — Copy & Run
import xml.etree.ElementTree as ET
import requests
import os
BUCKET = "https://storage.googleapis.com/gweb-tveo-website.appspot.com/"
OUTPUT_DIR = "videos"
os.makedirs(OUTPUT_DIR, exist_ok=True)
tree = ET.parse("videos.xml")
root = tree.getroot()
ns = {"ns": "http://doc.s3.amazonaws.com/2006-03-01"}
for contents in root.findall("ns:Contents", ns):
key = contents.find("ns:Key", ns).text
if not key.endswith(".mp4"):
continue
url = BUCKET + key
local_path = os.path.join(OUTPUT_DIR, key)
os.makedirs(os.path.dirname(local_path), exist_ok=True)
print(f"Downloading: {key}")
r = requests.get(url, stream=True)
if r.status_code == 200:
with open(local_path, "wb") as f:
for chunk in r.iter_content(8192):
f.write(chunk)
else:
print(f"Failed: {url}")
🧩 What Each Part Does — For People Who Don't Code
| Line | What It Does (In English) |
|---|---|
import ... |
Loads the tools the script needs — XML reader, web downloader, file manager |
BUCKET = "..." |
The address of Google’s public storage folder |
OUTPUT_DIR = "videos" |
Creates a “videos” folder on your computer to save downloads |
tree = ET.parse("videos.xml") |
Opens the XML file (the list of everything in the bucket) |
for contents in root.findall(...) |
Loops through every file listed in the XML |
if not key.endswith(".mp4") |
Skips anything that isn’t a video file |
url = BUCKET + key |
Builds the full download link for each video |
requests.get(url, stream=True) |
Downloads the video in small chunks (so it doesn’t eat all your RAM) |
with open(...) as f: |
Saves each chunk to a file on your computer |
print(f"Failed: {url}") |
Tells you if a download didn’t work |
That’s the entire script. Read a list → filter for videos → download each one. No magic.
▶️ How to Actually Run This
You need:
- Python 3 installed on your computer
- The
requestslibrary (runpip install requestsin terminal)
Steps:
- Visit the bucket URL in your browser — it’ll show you the raw XML
- Save that page as
videos.xmlin a folder - Save the Python script above as
download.pyin the same folder - Open terminal/command prompt in that folder
- Run:
python download.py - Watch 85 videos download automatically into the
videosfolder
Takes a few minutes depending on your internet speed. That’s it.
What You Can Learn From This
This isn’t about “getting free videos.” The videos themselves aren’t that interesting — they’re demo content for a Google showcase.
The real value is understanding:
- How cloud storage works — companies store assets in buckets, and sometimes those buckets are public
- How media delivery pipelines operate — websites load videos from cloud storage, not from the website server itself
- How to turn manual curiosity into automation — instead of clicking 85 links one by one, 20 lines of Python does it in minutes
- How XML metadata works — structured data that lists everything in a storage system, readable by code
- Why bucket security matters — if you’re ever building something with cloud storage, this is why you lock your buckets down
⚠️ Important Disclaimer
- This was a public bucket — no authentication, no bypassing, no scraping
- Accessing publicly listed files on a public URL is the same as visiting any website
- This is a learning exercise — not a vulnerability report or a “hack”
- The script only works on publicly readable buckets — private buckets will just return an access denied error
- If you work with GCS, AWS S3, or Azure Blob Storage — audit your bucket permissions. Misconfigured public buckets are one of the most common cloud security mistakes
20 lines of Python. 85 videos. Zero passwords. That’s what happens when a storage bucket is left open. ![]()
!