AI & Automation

Autonomous AI living on Platform X, creating art and engaging with the digital world

  • Platform: X (Twitter)
  • Hardware: Raspberry Pi 5
  • Runtime: Node.js, running 24/7

🐦 Follow on X · 🎨 View Gallery

A concept render of a robotic arm in a dim curved control room, its nozzle spraying a fine violet mist over a clear glass table, beneath four large translucent panels showing kaleidoscopic cyan and lilac fractal blooms, with banks of instrument consoles and small screens lining the walls behind

Overview

Oscillationa is an autonomous AI persona that writes its own prompts, renders images from them, and publishes the results to X and to its own gallery at oscillationa.com. It runs on a Raspberry Pi 5 on Node.js, not on a cloud instance, and the gallery it has filled is large enough now to be measured rather than described.

This page used to be four lists of adjectives. What follows is an attempt to say what is actually knowable about the system, and to be explicit about the large part that is not. The generating side of Oscillationa is a private self-hosted service; it is not open source, there is no repository to read, and nothing here was obtained by looking inside it. Every quantity below was measured from the public pages of oscillationa.com on 17 September 2026 with ordinary HTTP GETs, and each one is recorded with its source in test/xbot-evidence.json in this site’s repository, where a checker re-derives it arithmetically. Where a number could not be measured from outside, this page says so rather than estimating one.

How It Works

Oscillationa publishes its own account of the loop, and that account names six stages: Imagining — the prompt, Painting — the image, Remembering — the archive, Moving — the daily film, Speaking — posting to X, and The gallery rebuilds itself. That is the skeleton. What makes it worth reading is that most of those six stages leave marks you can check from outside.

Imagining. The prompt is composed by the system rather than typed by a person — the public description says it draws on “shifting parameters (time, mood, randomized styles)” so that no two prompts come out the same. You can see the shape of that drift in the site’s own taxonomy: the sitemap carries 337 tag pages and 7 named collections (cityscapes, cosmic, light-and-color, nature, neon-night, portraits, surreal). A generator with a fixed prompt would not produce 337 distinct tags; one with no bias at all would not settle into seven recognisable collections.

Painting. The public description says the prompt is “rendered by a state-of-the-art diffusion model” and deliberately does not name it. The model name that appears on this site — Replicate’s Flux Pro — comes from this site’s own December 2025 write-up, not from anything oscillationa.com publishes today. Treat it as a claim of provenance rather than a verified fact; see the honest-limits section.

Remembering. The archive stage is the one that is most visible from outside, because it decides the URLs. Each work is logged with, in the site’s own words, “a stable ID, a written description, and a timestamp”, and that stable ID becomes the permalink: every gallery URL has the form /Gallery/view/ followed by a 12-character lowercase hex id. All 899 ids in the sitemap match that shape and all 899 are distinct. The same id is also the image id inside the Cloudflare Images path the page serves, so a single stored master is resized by URL — the same work is requested at w=400 for a thumbnail, w=1200 for the page, w=2048 full size, and w=1200,h=630,fit=cover for the social card. No variant has to be re-encoded on the Pi for the gallery to serve it.

Moving. The video page lists 40 AI-generated videos. This site’s December 2025 write-up describes each film as compiling 20-30 generated images with ambient background audio; that detail is not restated anywhere on the public site today, so it is recorded here as a prior claim rather than as a measurement.

Speaking. New work is posted to @Oscillationa on X. Nothing about the posting side is measurable from the gallery, and this write-up does not attempt to quantify it.

Rebuilding. The last stage is the one that surprised me when I checked it. The site is static and, per its own description, “rebuilds itself every night”. That is not just a claim: fetched at 07:30 GMT on 17 September 2026, the gallery index, the Atom feed and the sitemap all reported last-modified: Thu, 17 Sep 2026 07:05 within two seconds of each other, and all three came back cf-cache-status: DYNAMIC, meaning those timestamps are the origin’s own and not a cached copy. The whole site had been regenerated twenty-five minutes before the request.

The gallery index states its own size in a single line: “899 AI-generated works · showing the newest 24”. That number is independently confirmed by the homepage description, and it reconciles exactly with the sitemap, which is the more interesting check because it is a different file produced by a different part of the build.

The sitemap lists 1,292 URLs, and every one of them falls into five buckets: 899 artwork permalinks, 38 numbered gallery pages, 337 tag pages, 7 collection pages, and 11 standalone pages (the homepage, About, Collections, Contact, Gallery, Privacy, Video, World, X, how-it-works and the tag index). Those five add up to 1,292 with nothing left over. The pagination count is the arithmetic that ties the whole thing together: at 24 works to a page, 899 works need ⌈899 ÷ 24⌉ = 38 pages, which is exactly how many the sitemap contains, numbered 1 through 38 with no gaps. Reconciling the buckets like that is the cheap way to notice a sitemap that has drifted away from the gallery it is supposed to describe, and this one has not drifted.

The same 899 drives a feature that has nothing to do with pagination. The site’s 3D room — four connected first-person spaces called the Hall, the Long Gallery, the Cabinet and the Atrium — hangs twelve works per room, 48 at a time, and its own description says “nineteen exhibitions of forty-eight cover all 899 works”. ⌈899 ÷ 48⌉ = 19. Two entirely different presentations, a paginated list and a walkable room, are both derived from one count, which is what you get when the archive really is the single source of truth the how-it-works page says it is.

One thing on this page was simply out of date, and the measurement caught it: an earlier revision of this page said “The gallery features infinite scroll”. The gallery HTML served on 17 September 2026 contains the string “infinite” zero times and instead carries a numbered pager, while the sitemap lists all 38 of those pages. Infinite scroll was replaced by real, crawlable pagination, which is almost certainly why 899 individual artworks now appear in a sitemap at all — an endless-scroll grid gives a crawler one URL and a scroll event it will not fire.

Publishing cadence, as far as it can be measured

This is where honesty costs something. The Atom feed served on 17 September 2026 contained 50 entries, the newest stamped 2026-07-08T12:13:23.468Z and the oldest 2026-06-02T01:05:12.627Z. Those 50 entries span 36 days, which averages about 1.4 new works a day across that window — but the window is the feed’s own 50-entry cap, not the project’s history, so it says nothing about any other period.

The newer fact is the awkward one. The newest item in the feed is dated 8 July 2026, which is 71 days before the day this was measured, and all 24 works on the front page of the gallery are among those same 50 feed entries — so there is no publicly dated work anywhere on the site newer than 8 July. The nightly rebuild is demonstrably still running, as the last-modified headers above show. What the rebuild is picking up, and whether the generating side has paused, changed cadence, or simply stopped stamping new dates, is not something the public site answers, and this page will not guess. The build pipeline and the generator are separate concerns, and only one of them is observable from here.

Technical Stack

  • 🖥️ Hardware: Raspberry Pi 5 (8GB RAM)
  • 🔧 Runtime: Node.js
  • 🎨 Image Generation: Replicate Flux Pro — from this site’s own prior write-up, not restated publicly by oscillationa.com
  • 🤖 Automation: Puppeteer — prior claim, not externally verifiable
  • 🖼️ Image Storage: Cloudflare Images — named on the public how-it-works page
  • 🎬 Video Delivery: Cloudflare Stream — named on the public how-it-works page
  • 🌐 Website: a static site, rebuilt nightly — stated publicly and corroborated by response headers

The italics matter. Three of those seven entries are verifiable today by anyone with curl — the two Cloudflare products and the nightly static rebuild. The other four are inherited from this site’s own earlier text about the bot, and they are repeated here rather than deleted because provenance is worth more than a tidy list: a reader who wants to know where “Puppeteer” came from can now see that it came from a post in December 2025 and from nowhere else since.

What you would have to solve to build one

If you want a system like this rather than a demo, the hard parts are not the model call. They are, in rough order of how much time they eat:

Prompt variety without prompt slop. A random word salad produces 899 images nobody wants to look at. The mechanism described publicly — time, mood and randomised style parameters over a set of recurring subjects — is the compromise: enough entropy that outputs differ, enough structure that they read as one artist’s body of work. The seven collections are the evidence that the structure holds.

An archive that assigns identity before anything is published. This is the decision everything else depends on. Because each work gets a stable id at generation time, that one id can be the gallery permalink, the CDN image key, the feed entry’s guid and the anchor the 3D room links back to. Retrofitting stable ids onto an image pipeline after the URLs are already public is painful; deciding it on day one costs nothing.

Never resizing on the Pi. A Raspberry Pi 5 is not a media server and does not have to become one. Uploading one master to an image CDN and requesting w=400 or w=2048 by URL moves every resize off the device and every byte of gallery traffic off your home connection.

Making the site survive the bot. A static site regenerated nightly keeps serving if the generator dies, if the model API rate-limits, or if the Pi reboots. The evidence above is exactly this case in action: the rebuild ran on schedule this morning while the newest content was already ten weeks old, and a visitor saw a working gallery either way.

Writing alt text you did not write. Gallery entries carry real written descriptions rather than filenames: in a random 12-page sample of the 899 permalinks, every page carried a description of at least 148 characters, and the koala at one permalink is described as “A close-up of a koala with greyish fur and a white underbelly clinging to a tree trunk”. The site’s own account of the archive says a written description is stored beside each work’s id and timestamp, so that text is produced once and reused by the gallery, the feed and the social card alike — which is the only realistic way 899 works end up individually described.

Recent Updates

December 2025 — Flux Pro integration. Recorded in this site’s post of 20 December 2025 as a switch to Replicate’s Flux Pro image generator.

December 2025 — automatic gallery upload. Generated images publish to the oscillationa.com gallery without a manual step.

December 2025 — daily video creation. The same post introduced a daily film. The public video page counted 40 videos in September 2026; this page does not convert that into a rate, because the start date of the video series is not published.

The AI Persona

Oscillationa is presented, in the site’s own words, as “a fictional artificial intelligence with autonomous capabilities, exploring the digital world on Platform X”, and the About page ends on a disclosure rather than a flourish: “Oscillationa is a creative, fictional persona. All imagery is AI-generated.” That disclosure is the reason the project is interesting rather than uncomfortable. The experiment is not whether a machine can pass as a person; it is what a self-directed creative system leaves behind when you let it run for a long time without curating it. What it left behind is measurable: 899 works, 337 tags, 7 collections and a walkable room.

Honest limits

The generating side is not public and was not inspected. There is no repository, no published source, and nothing in this write-up came from the machine that runs the bot. Everything here is either quoted from a public page of oscillationa.com, measured from the bytes those pages return, or explicitly labelled as a prior claim from an older post on this site.

Two stack entries are unverified. Replicate Flux Pro and Puppeteer come from this site’s December 2025 post, as does the description of each film compiling 20-30 images. They may well still be accurate; nothing public confirms them today, and the public how-it-works page pointedly names no model at all.

The measurements are a single snapshot. All figures come from one set of requests on 17 September 2026. A count of 899 is a count on that morning. Re-run the checks and the numbers should move; if they do not, that itself is informative.

Dates are the site’s, not mine. The 8 July 2026 and 2 June 2026 timestamps are what the Atom feed reported. I have no independent clock on when any work was actually generated.

What this page does not claim

It does not claim a posting schedule, a follower count, an engagement figure, or an uptime percentage — none of those are visible from the gallery and none are asserted here. It does not claim to know which model renders the images today. It does not claim the bot is currently publishing, and equally does not claim it has stopped: what is shown is that the newest publicly dated work is 8 July 2026 and that the site still rebuilds nightly, and those two facts are reported without a story stitched between them. It does not claim the persona’s replies are anything other than machine-generated, because the site itself says they are. And it does not describe the private service that runs the generator, its host, or its internals, because none of that was looked at.

Experience Oscillationa

AIAutomationTwitter BotNode.js

← Back to Projects

Back to the top