Ludovision is a lightweight, client-side tool that streams and displays real-time images uploaded to the Bluesky social media platform via its firehose. Designed as a proof of concept, Ludovision highlights the fragility of privacy through obscurity and serves as a reminder of the digital footprints we leave behind online.
- Real-Time Streaming: Scroll infinitely through every image posted to Bluesky in real-time.
- Interactive Viewer: Click on an image to view a larger version and access the uploader's profile.
- Full Gallery View: Explore the image owner's entire account gallery. (Requires a Bluesky auth token; see instructions below.)
- No Server Required: Runs entirely client-side for full transparency—no data is collected or transmitted.
- No External Libraries: No remote code loading. Privacy is respected, even in this experiment.
- Zero Tracking: The tool operates without any tracking mechanisms, ensuring user anonymity.
Ludovision connects directly to the Bluesky firehose API and processes public image data to display it in a simple, scrollable interface. It leverages minimal JavaScript to provide functionality without requiring any external dependencies or backend server.
The project is named Ludovision as a nod to A Clockwork Orange's Ludovico Technique—a scene where the protagonist is subjected to aversion therapy. Similarly, scrolling through this unfiltered firehose of images serves as a vivid reminder of how public and permanent our online actions are.
Ludovision was built to:
- Demonstrate how easy it is to aggregate and parse public data.
- Raise awareness of the digital footprints we leave behind on social platforms.
- Explore the concept of privacy through obscurity and its inherent fragility.
This project is an experiment and is not intended for production use or deployment in a live environment.
Ludovision is a tool for exploring publicly available data and does not:
- Store any data locally or remotely.
- Track user activity in any form.
- Interact with any servers by default other than the Bluesky firehose
- Ludovision will accept an auth token for Gallery view. This will identify your activity with Bluesky servers when using Gallery view only. Use caution.
To use Ludovision locally, clone the repository and open the index.html
file in your browser.
‼️ I HIGHLY recommend opening this file in Private Browsing Mode or Incognito.
- A modern browser (tested on Chrome, Firefox, and Safari).
- Access to the Bluesky firehose API.
- (Optional) A Bluesky auth pair for enabling the full gallery view.
QUICK START: No installation is required. Download the zip, decompress, and open index.html (preferrably in a private window). That's it.
- Clone this repository:
git clone https://github.com/msitarzewski/ludovision.git
- Open the project folder:
cd ludovision
- Launch the tool by opening
index.html
in your browser:open index.html
- Optional:
Modify default image size, token, etc.
cp settings-dist.js settings.js
To enable the full gallery view of an image owner's account:
-
Locate the
bsky_identifier
andbsky_appPassword
variables in the settings.js file (see above). -
Replace null with your Bluesky identifier and App Password.
const bsky_identifier = null; const bsky_appPassword = null;
Note: see https://bsky.app/settings/app-passwords for more details
-
Save the changes and reload the file in your browser.
`CANCEL` to be redirected to Bluesky
Note: You can override this warning in settings.js The feed begins to load automatically after either the Warning modal is acknowledged, or the pages is freshed when overridden.
Images stream in in real time from the firehose. We use a defer technique to show only the images you've scrolled to or that have already appeared in the viewport. This saves a ton of bandwidth and makes the gallery view snappy.
You can adjust the image preview size in the header from between 32px and 512px on the fly. You can set a default value in settings.js, otherwise it's 128px.
The header also shows status. Today that's simply the number of images that have been loaded from into the feed.
Click any image to open the Feed Image modal.
The selected image is scaled to fit the current viewport.View Profile
to open Bluesky to the user's profile page
If Bluesky authentication is enabled, you can also click View Gallery
to see the rest of the images in the user's profile.
All images are loaded from the current image owner's account. They're presented in 128px/128px.Note: You can use the space bar to launch the Gallery View. ESC will close the current modal
Click any image to view.
Close
(or ESC) to close the modal
View Profile
to open Bluesky to the user's profile page
The selected Gallery image is displayed within the current viewport. Tapping space or clicking `View Full Image` will open the image in a new tab if the image is scaled. In addition, a magnifying area will follow the cursor. This can be disabled in settings.js.Note: You can use the space bar to launch the Gallery Image Modal with the first image. ESC will close the current modal.
L/R Arrows and W/D
keys navigate the images from the gallery while in Gallery Image Mode.
Close
(or ESC) to close the modal
- Enhance the interface for better usability.
- Add filters to categorize or exclude specific content.
- Expand support for additional social media APIs (as appropriate).
- Raise awareness about digital privacy and security through further experiments.
This project is intended for educational and awareness purposes only. Respect platform terms of service and user privacy when using or replicating this project.
This project is licensed under the Unlicense.