* This is the text of a talk I gave online as part of a day long online / offline session presented as part of the 'Falling from the shoulders of giants sessions' at the Digitalvilla , Potsdam curated by Verena Voigt more information here
I’d like to thank Offaly county council for part funding slowgram through an equipment grant through arts act funding – it means a lot to get this support.
Note Xavier Dallets work influenced the way that I saw social media and the interfaces they present and how to work with them which directly fed into the way I approached slowgram. And it wasnt until I started working on this that I realised that connection.
What is Slowgram?
Slowgram is a design fiction and artistic intervention that deliberately changes how we experience Instagram.
Instead of endless scrolling, recommendations and algorithmic feeds, it creates a static record of a moment in time. A social media page becomes something to examine slowly rather than consume rapidly.
There is also an irony in that to build a program to counter the algorithm I used A.I .
Slowgram is also designed to be cross platform and currently works on Mac (intel and apple silicon) Linux, Windows and ChromeOS
Why does it exist?
Instagram has become increasingly mediated by algorithms.
AI-generated content is making genuine human interaction harder to find.
Platforms increasingly determine not only what we see but who we see.
Slowgram removes that mediation by freezing the experience into an image.
Instagram and many modern social media platforms are effectively walled gardens. Much of the information they contain is only fully accessible if you have an account. Although public profiles are, in theory, visible without logging in, users are repeatedly encouraged—or required—to create an account in order to continue browsing. These walled gardens are skinner boxes, contributing to the death of the idealism of the open web and the monetization and manipulation of users who have become product to be fed into an increasingly politicized and policed surveillance culture.
One might assume that publicly available pages could be accessed using a simple web-scraping tool. In practice, this is far from straightforward. Modern social media platforms employ a range of technologies designed to discourage or prevent automated access, even to content that is nominally public.
The purpose of having an Instagram account is to see what friends, colleagues and artists you follow are posting. For many artists, curators and cultural organizations, Instagram has become an essential place both to discover work and to present their own. Yet the experience of using the platform has changed significantly. Maintaining connections with the people you choose to follow is becoming increasingly difficult as recommended content, advertising and algorithmically curated feeds compete for your attention. Rather than simply presenting posts in chronological order, the platform actively shapes what you see according to its own predictions about what will keep you engaged.
Slowgram began as an attempt to cut through this noise. The original idea was simple: create a way of viewing only the accounts that mattered to you, free from recommendations, advertising and algorithmic intervention. During development, however, it became clear that Instagram's interface, authentication requirements and anti-scraping technologies were not merely technical obstacles—they actively shaped the final form of the project. In that sense, the process of building Slowgram became an investigation into the platform itself.
Accessing a public page manually
I looked at the process manually to begin with. Asking how would I usually do this as say a screenshot
1) Find user name
2) Navigate to that page
3) Click the x to get rid of the sign up dialog
4) Take a screenshot of the page
slide – find the user to screenshot ( titled as instagram screenshot)
slide - Click x on sign up take screenshot
How would it work?
Could we replicate that behaviour programmatically?
“The software must open Instagram in an automated browser, capture the page exactly as a visitor would see it, crop it into a consistent format, and store it as part of a growing offline archive”
Made in collaboration with members of the Giant glitches group including Verena Voigt, Laila Shereen Sakr (vjumamel) after an initial discussion, with a logo designed by Domenico Dom Barra, and html and css created by Michael Betancourt for the Aesthetic Hazard website.
Aesthetic Hazard website here https://www.aesthetichazard.info/index.html
Slowgram was originally intended to work as part of the Aesthetic Hazard website but this proved problematical due to the nature of the back-end, so was redesigned as a standalone script which could be used separately from the website or as part of an installation.
How it should work
1) – Enter 3 instagram profiles
2) – Wait for accounts to be accessed and saved
3) – Success
4) – Access pictures in gallery
5) – Private accounts cannot be accessed
6) – Becoming a perfect user
Interesting problems
"The project became an investigation into how difficult it has become simply to look at publicly available information. And how to circumvent those restrictions"
I Initially used Gemini in writing the program, for speed and because programming in this way was a little beyond my skill set. So I asked
“Is it possible to create an application using python which takes a web page as input then takes a snapshot of that webpage then displays it?”
And it suggested it was but as I was focussing on Instagram there were caveats
“Caveats **Note on Instagram's Terms:** Using Instaloader (or any scraping tool) for automated access likely violates Instagram/Meta's Terms of Service. Any public-facing application built on this architecture may be quickly blocked or banned by Instagram.”
But it then proceeded to help me do just that !!
401 unauthorized user
Instagram has checks on whether you are a real user or a bot :
for instance if you make too many requests in the earlier versions you get a "401 Unauthorized" combined with the message "Please wait a few minutes before you try again" this is Instagram's standard way of telling an automated client (like Instaloader) that it has made too many requests too quickly, even when scraping public profiles. It temporarily throttles or blocks the IP.
To make the scraper look less like an aggressive bot, we need to introduce a mandatory sleep delay between scraping each of the requested usernames. Adding a pause for 3 seconds after successfully scraping a user helps deal with that.
slowdown or we capture nothing
Dynamic content loading – Instagram relies heavily on JavaScript. Simply waiting for the page to load is often insufficient because images and other content continue loading afterwards. If the screenshot is taken too early, only placeholder elements or empty areas are captured.
Without an account everything is grey
In the earliest versions of Slowgram, I was determined not to create an Instagram account. My reasoning was simple: if a page is publicly accessible, why should I need an account simply to document it? Without an account strange things start to happen to the images that you capture, they become greyed out because even though we have automatically clicked off the sign up boxes and have accepted cookies there is still some routine lingering in the background.
At this stage the software was still operating without logging into Instagram. It could successfully capture public profile pages and divide those captures into individual images. However, the more extensively the software was used, the more obvious it became that Instagram was detecting the automated behaviour.
Requests that had initially worked reliably began to fail more frequently. There was a growing risk that continued use would result in my IP address being temporarily blocked from accessing Instagram altogether. Operations that involved repeatedly cropping or requesting multiple images were particularly likely to trigger HTTP 401 "Unauthorized" responses, suggesting that the platform was becoming increasingly restrictive towards the software’s attempts at automated access.
An unavoidable account.
Making an account is easy enough, it does kind of compromise the original intentions behind the script but it does leave us with a functional tool, without grayed out images and intrusive login boxes, this was achieved by creating a separate account profile in Firefox and then extracting the authenticated session to use as login credentials ( along with adding an ad-blocker).
With automated login and slowgram branding
Now you will notice that the images are not cropped into individual images they are kept as just a screenshot of that page with the Instagram branding removed – this is because I’d noticed that cropping the images into individual images caused more rate limiting and ip banning behavior
There have been Many many versions of Slowgram from earlier experiments to test proof of concept to the current version which uses a slightly different mechanism which imitates how a real user would behave using a headless browser which is much more reliable and less prone to triggering website counter-measures than previous versions which I’m going to demonstrate now then we can open the floor to discussion. There is going to be one more version where I restore the original idea of individual images rather than just the profile page now that I’m more confident that this version is more stable which will lead to the program becoming more useful for archiving and curating which is one of its intended purposes.
Discussion
Why archive social media?
Why preserve the interface instead of the individual images?
What changes when viewing becomes slow instead of algorithmically driven?
Is a screenshot a photograph, a document, or an artwork?
Can collecting become a form of artistic practice?
What happens to an artwork when the platform that hosted it disappears?

