The Algorithmic Memory
When AI Interrogates African Archives
What happens when a neural network is asked to imagine the past? Can code become a form of curation?
Executive Summary
The Algorithmic Memory is an interactive research prototype built to expose how artificial intelligence interprets African photographic archives. Instead of producing a passive video montage, the homepage hero becomes a live negotiation between human curatorship and machine perception. Each visitor witnesses the archive morph through latent space interpolation, guided by artistic prompts that foreground African aesthetics.
- Purpose: Translate curatorial intentions into a responsive, shader-driven experience that feels alive.
- Outcome: A production-ready hero section that doubles as a narrative tool for exhibitions, talks, and workshops.
- Audience: Cultural institutions exploring AI, creative technologists, and collaborators shaping new memory infrastructures.
Project Blueprint
Strategic Objectives
- Make invisible AI processes legible to a broad audience through motion, light, and interaction.
- Preserve curatorial authorship by embedding a human-in-the-loop prompt workflow.
- Deliver a performant, accessible implementation that can run in the browser without plugins.
Experience Pillars
- Interrogation: Reveal how archives are transformed—not just the final output.
- Care: Avoid extractive visual tropes by anchoring prompts in real cultural references.
- Participation: Keep the experience responsive to scroll, hover, and device constraints.
System Architecture
| Layer | Description |
| --- | --- |
| Interface | Next.js 16 App Router with Tailwind for layout choreography |
| Rendering | React Three Fiber orchestrating Three.js scenes inside a managed <Canvas> |
| Effects | Custom GLSL fragment shaders handling displacement, color jitter, and mask blending |
| AI Assets | Stable Diffusion + Midjourney variations stored as optimized WebP sequences |
| Orchestration | Hook-driven state machine that cross-fades textures based on scroll & time |
Fragment Shader Core
// Pixel-level displacement to reveal AI hallucinations
float noise = fract(sin(uv.y * 50.0 + uTime * 2.0) * 43758.5453);
displacedUv.x += (noise - 0.5) * strength;
uv: Normalized coordinates per pixel.uTime: Global time uniform injected from React.strength: Calibrated by performance metrics (GPU budget vs. fidelity).
Why Not Video?
- Video would cap agency; shader-based blending keeps the archive constantly re-evaluated.
- GPU-accelerated interpolation ensures 60fps on modern laptops while gracefully degrading on mobile.
- Scene graphs let us stage future camera moves or user-controlled explorations without rebuilding the stack.
AI Curation Workflow
Prompt Architecture
- Start with authentic descriptors sourced from archivists (location, event, medium).
- Layer emotional or sensory cues (“cobalt indigo dye”, “dust motes at sunrise”).
- Anchor every prompt with a cultural lens (“West African textile traditions”, “Ghanaian studio portrait lighting”).
Human-in-the-Loop Loop
- Generate candidate images with Stable Diffusion using the structured prompts.
- Curator reviews outputs, flags productive compositions, and annotates contextual notes.
- Selected frames are batch-processed in Midjourney to diversify lighting and patterns.
- Final assets are color-graded, resized, and piped through an optimization script before landing in the shader pipeline.
Ethical Safeguards
- Maintain a provenance log linking every generated frame to its source archive.
- Disclose AI manipulation directly in the UI to avoid misleading viewers.
- Refuse prompts that exoticize or distort cultural identities—every brief gets curator sign-off.
Experience Design
Interaction Model
- Hover Response: Cursor velocity modulates shader intensity, signaling that the archive “pushes back.”
- Scroll Sync: Time uniforms and camera easing respond to scroll depth—no two sessions look identical.
- Fallback States: When WebGL fails, we present a curated still with annotated overlays to preserve the narrative.
Sound & Haptics (Roadmap)
- Spatial audio layers that fade between field recordings and machine-generated textures.
- Haptic cues (for mobile) that pulse when latent transitions peak, reinforcing embodied memory.
Implementation Notes
Performance Tactics
- Texture atlases and draco-compressed geometry keep payload < 2.5 MB.
- React suspense boundaries prevent layout shifts during asset hydration.
- Custom intersection observers pause the shader when offscreen, extending laptop battery life.
Tooling Stack
- Scene Authoring: Blender for staging camera framings exported to GLTF.
- Shader Iteration: GLSL Sandbox + Three.js live reload for quick feedback loops.
- Deployment: Vercel preview pipelines to validate performance across browsers.
Insights & Learnings
- Latent ambiguity is a feature. Viewers were more engaged when transitions felt unfinished—memory remains in motion.
- Cultural specificity scales. Prompt libraries built with archivists outperform generic descriptors for both aesthetic quality and narrative depth.
- Transparency builds trust. A visible legend explaining shader parameters reduced skepticism about “AI hallucinations.”
Roadmap
- Integrate vocal narration that adapts to the current latent state.
- Build a curator dashboard to version prompts and publish new narrative “chapters.”
- Experiment with photogrammetry inputs to bridge 2D archives and 3D artifacts.
Resources & References
Interested in collaborating or learning more? Contact us to discuss your project or ideas.