SCORE.md — /social #
The operating doc for Aesthetic Computer's social presence: account growth strategy, stat tracking, and a single index of every social/publishing API tool scattered across the monorepo. Read this before touching social tooling or planning a campaign.
Sibling docs: pop/SCORE.md (music mill), recap/SCORE.md (narrated video), marketing/README.md (promo gen).
Research: research/instagram-official-guidance.md — what Instagram officially documents about ranking/reach vs. blog myth (cold-start, originality gates, Trial Reels, 3-min Reels; verified 2026-07-08).
The accounts #
Tracked in accounts.json (append a snapshot when you log fresh numbers).
Two brands, one funnel: @whistlegraph (established audience) feeds @aesthetic.computer (growth target).
| Handle | Platform | Role | API access today |
|---|---|---|---|
| @aesthetic.computer | primary growth target (1k → Trial Reels) | ⚠️ unofficial (silo private-api / session cookies) — no publish | |
| @aesthetic.computer | TikTok | primary growth target (391 fo · 2026-07-03) | ⚠️ OAuth app exists (silo); posting still manual |
| Aesthetic Dot Computer | YouTube | primary growth target (4 subs · 70 views) | ✅ full — yt.mjs (upload/edit/thumb/delete) |
| @aesthetic.computer | Bluesky | changelog + paintings feed (81 fo) | ✅ full — at/*.mjs app password |
| AC Readings | Podcast (pod.prompt.ac) | essay audio → Spotify/Apple/YT | ✅ publish via Buzzsprout API (reading skill) |
| @whistlegraph | established funnel source | ⚠️ archive/read tooling only (instaloader/instagrapi) | |
| @whistlegraph | TikTok | established funnel source (2.6M fo · 99M likes) | ⚠️ download/analyze only (toolchain/whistlegraph/) |
| @whistlegraph | YouTube | established funnel source (5.3k subs · 2.1M views) | ✅ full — yt.mjs --as whistlegraph (2026-07-05) |
| @promptDOTac | X | dormant AC-brand outlet | ❌ none — no developer app |
| @whistlegraph | X (x.com/whistlegraph) | dormant funnel | ❌ none |
| Aesthetic Dot Computer | Spotify (artist) | music distribution (via DistroKid) | ⚠️ S4A claim BLOCKED on an IG post — see pop/spotify-for-artists-claim-reply.md |
| (jeffrey) | Are.na | curation / research surface | ⚠️ API proven (gigs/are-na-annual-vol-8/*.mjs, ARENA_TOKEN) — token not vaulted |
| papers / essays | prompt.ac (self-hosted) | long-form home base | ✅ fully owned — papers/ → oven → lith; no gatekeeper |
Legend: ✅ scripted publish from this repo · ⚠️ partial/unofficial · ❌ nothing yet.
API access build-out (next moves, in value order) #
- Instagram official publishing — the keystone. Today we have read-only unofficial access (silo
instagram-private-api, instaloader archives; seereports/instagram-api-migration-2026-03-29.md). Build the official path via the Instagram API with Instagram Login (no Facebook Page needed since the 2024 API): both accounts must be Professional; create a Meta app at developers.facebook.com, add the Instagram product, connect our own accounts as testers — own-account publishing works in dev mode without app review. Then anig.mjsCLI intoolchain/mirroringyt.mjs(--as whistlegraph). Triple payoff: (a) scripted reels toward the 1k Trial-Reels gate, (b) same for @whistlegraph funnel posts, (c) the first trancenwaltz IG post unblocks the Spotify for Artists claim (draft reply waiting inpop/spotify-for-artists-claim-reply.md). - X developer app — nothing exists. Free tier (~500 writes/mo) covers a mirror cadence for @promptDOTac + @whistlegraph; a small
x.mjsCLI posts the same short-form drops as Bluesky. Needs jeffrey to create the app at developer.x.com under whichever account owns the brand. - TikTok Content Posting API audit — silo holds the OAuth app (key/secret, callback
silo.aesthetic.computer/api/tiktok/callback, sessions in Mongotiktok-sessions). Unaudited = private/draft posting only; apply for the audit to get scripted publish where the 2.6M audience is. - Are.na token → vault — scripts already speak the API; store
ARENA_TOKENatvault/arena/.envand lift the gig scripts into a small generic CLI when needed. - Buzzsprout stats pull — wire download numbers into
accounts.jsonsnapshots (podcast id 2628235; publish already works via thereadingskill). - YouTube quota bump — both channels share ~6 uploads/day; request more if cadence grows.
Done: YouTube whistlegraph (2026-07-05, --as whistlegraph) · Bluesky (full) · Buzzsprout publish · papers (self-owned).
Current objective: @aesthetic.computer → 1,000 IG followers #
Why 1k matters: Instagram Trial Reels (test reels on non-followers first, then promote the winners) require a public professional account with ≥1,000 followers. Below that the toggle never appears — it's a hard gate, not a soft one. @aesthetic.computer is currently under. Once over 1k (public + Creator/Business + latest app), the feature unlocks, possibly after a rollout delay.
Positioning (resolves the "AI content" worry): @aesthetic.computer is the hand-built-instrument brand — "I made the tool that made this." That premise is the strongest defense against the AI-slop read of any AC handle. The backlash is against AI-as-shortcut, not AI-as-instrument-you-engineered. Lead with the making, not the made. Visible authorship (KidLisp coming together, a synth responding live, a command rendering a piece) inoculates against the slop read. @whistlegraph stays its own handle; don't merge audiences — funnel from it.
Growth levers, in priority order:
- Regular reels, consistent cadence (4–7/wk). Reels are the only IG surface with non-follower reach. At <1k a flop costs nothing — these are at-bats.
- Process-over-product shorts from material you already make: KidLisp builds, generative loops, instrument demos, "wait, that's live code?" moments.
- Same short → IG Reels + TikTok every time. One edit, two surfaces. TikTok's small-account reach is more generous; it may feed IG.
- One repeatable series people can anticipate ("daily KidLisp", "make a sound in 15s").
- Funnel from @whistlegraph — "made with aesthetic.computer" tags, no audience merge.
- Outward engagement in creative-coding / generative-art / music circles for the first few hundred.
- Do NOT: follow/unfollow churn, engagement pods, bought followers — they poison the non-follower targeting Trial Reels and the algorithm depend on. (See also
whistlegraph_grid_pruningmemory: archive via IG native tools, never sketchy apps = ban risk.)
Tooling index #
Everything below already exists in the monorepo. This is the map; /social is the front door.
Credentials live in the encrypted vault, never here — aesthetic-computer-vault/, unlock with
fish vault-tool.fish unlock.
Instagram #
| Path | What it does |
|---|---|
portraits/jeffrey/bin/ig-login.py |
Authenticate via instaloader, save session cookies (2FA support) |
portraits/jeffrey/bin/ig-export-cookies.py |
instaloader session pickle → Playwright JSON cookies |
portraits/jeffrey/bin/ig-import-cookies.py |
Import cookies into instaloader |
portraits/jeffrey/bin/ig-archive.fish |
Master @whistlegraph archive pipeline |
portraits/jeffrey/bin/ig-grid-archive.mjs |
Playwright-drive IG web UI to archive grid posts |
portraits/jeffrey/bin/ig-grid-archive-api.py |
Archive grid via private mobile API (instagrapi) |
portraits/jeffrey/bin/ig-archive-reels.mjs |
Archive reels via macOS iPhone Mirroring |
portraits/jeffrey/bin/ig-archive-mirror.mjs |
Archive grid via real iPhone app (Mirroring) |
portraits/jeffrey/bin/ig-index.mjs / ig-grid-index.mjs / ig-meta-extract.mjs |
Build indexes/catalogs from instaloader archives |
portraits/jeffrey/bin/ig-pull-comments.py |
Fetch comments from archived posts |
portraits/jeffrey/bin/ig-social-graph.py + ig-social-*.mjs |
Follower graph build → art-world classify → query → report (social-graph suite) |
silo/server.mjs |
Backend IG client (instagram-private-api), persistent insta-sessions in MongoDB |
Creds: vault/silo/instagram.env, vault/silo/.env. Sessions: portraits/jeffrey/sessions/. Archives: portraits/jeffrey/ig-archive/<account>/.
TikTok #
| Path | What it does |
|---|---|
toolchain/whistlegraph/grab.mjs |
Download a @whistlegraph TikTok; extract audio + metadata |
toolchain/whistlegraph/analyze.py |
Extract tempo / key / whistled-melody notes (feeds /pop) |
pop/bin/tiktok.mjs |
Render 9:16 video from storyboard (NVIDIA Flux slides → MP4) |
silo/server.mjs |
TikTok OAuth2 handler; tiktok-sessions in MongoDB; /api/tiktok/callback |
Creds: vault/silo/.env (TIKTOK_CLIENT_KEY/SECRET/REDIRECT_URI). Skill: whistlegraph-pop.
YouTube #
| Path | What it does |
|---|---|
toolchain/youtube/yt.mjs |
Zero-dep Data API v3 upload CLI (OAuth, resumable, metadata/thumbnail/playlist); --as whistlegraph drives the whistlegraph channel |
pop/bin/sample-from-youtube.mjs |
Fetch audio samples from YouTube |
Creds: vault/youtube/client.json + token.json. Receipt: <video>.youtube.json.
Bluesky / ATProto #
| Path | What it does |
|---|---|
at/post-to-bluesky.mjs |
Post text + image to @aesthetic.computer Bluesky |
at/publish-changelog.mjs / publish-commits.mjs |
Batch threads from changelog / commits |
at/bulk-share-paintings.mjs / share-latest-painting.mjs / share-random-painting.mjs |
Share paintings |
at/cli.mjs |
Main ATP CLI (user/painting management) |
at/query-posts.mjs / query-profile.mjs |
Read feed / profile |
silo/bluesky-ingest.mjs |
Pull headlines from trusted accounts |
Creds: vault/at/.env (BSKY_IDENTIFIER, BSKY_APP_PASSWORD), vault/at/deploy.env. Docs: at/ADMIN.md.
Music distribution #
| Path | What it does |
|---|---|
pop/bin/distrokid-submit.mjs |
Playwright-drive DistroKid upload; stops at review for human publish |
pop/bin/finalize.mjs |
Master audio + assemble metadata |
Creds: persistent Chrome profile ~/.distrokid-profile. Status: pop/RELEASES.md.
Promo / video generation (feeds the social surfaces) #
| Path | What it does |
|---|---|
marketing/bin/gen-promo.mjs |
gpt-image-2 campaign image gen |
marketing/kidlisp-reels/ |
KidLisp $code → 9:16 pals side-stamp reel (clean capture + resample) |
marketing/bin/capture-ac-native.mjs |
Puppeteer screenshots of AC native (real refs) |
marketing/bin/{title-card,compose-widescreen,storyboard-widescreen,opener-anim}.mjs |
Video composition pieces |
marketing/lib/jeffrey-refs.mjs |
Shared SHOOT+SELFIE identity refs |
recap/cli.mjs + recap/pipeline.fish |
Narrated 1080×1920 vertical video pipeline (TTS→align→photos→slides→subs→compose) |
pop/bin/gen-motion.mjs |
Image→video via Seedance 2.0 on fal.ai (animates illy panels) |
pop/bin/storyboard.mjs |
storyboard.json from beat timeline + FLUX |
clip-wizard/ · shot-wizard/ · wave-wizard/ |
macOS GUI clip/shot/wave tools |
Docs: marketing/README.md, recap/SCORE.md, pop/SCORE.md. Motion notes: pop_motion_pipeline memory.
Output pipelines → surfaces #
Which content mill feeds which account. Plan campaigns by picking a row and a cadence.
| Pipeline | Produces | Lands on |
|---|---|---|
pop/ (music mill) |
tracks + 1920×1080 visualizers + 9:16 cuts | DistroKid → streaming; YT (AC channel); IG/TikTok reels |
marketing/kidlisp-reels/ |
9:16 KidLisp process reels | IG + TikTok (@aesthetic.computer) — the Trial-Reels at-bats |
recap/ |
narrated 1080×1920 verticals | IG/TikTok |
papers/ essays → reading skill |
audio readings + caption video | Buzzsprout → Spotify/Apple/YT |
at/ scripts |
changelog threads, painting shares | Bluesky |
whistlegraph archive (portraits/jeffrey/bin/) |
back-catalog of 950+ TikToks / 193 YT videos | re-cut fodder for funnel posts ("made with aesthetic.computer") |
Conventions #
- Stats: append a dated snapshot to the right account in
accounts.json; never overwrite history. - Credentials: vault only. Never commit tokens/passwords here (this monorepo is not the secret store).
- New tooling: if you build a new social/publishing tool anywhere in the monorepo, add a one-line row to the index above so
/socialstays the single front door. - PII / public-repo hygiene: keep identity/handles that aren't already public out of committed files (cf.
feedback_slab_public_repo_pii).