Prices checked 26 October 2026; ≈ marks an estimate. A bright 27 in panel lies face up in the bowl under a clear tray of real water; the tray’s border is painted black to a 4:3 opening, and veritas draws its basin to that opening.
materials
sink
Whitehaus Pearlhaus WH302510-NP: 39½ × 30 × 25 in, bowl 26 × 21 in, 304 stainless, freestanding
clear acrylic, ¼ in, glued and sealed, about 25 × 20 × 1½ in; its border painted black to a 4:3 opening; stands on four corner posts just above the screen, never on it; 2 cm of water
estimate
≈ $180
pump
5 V USB submersible pump in the tray’s far corner, its tube up inside the faucet to the spout: the tap runs, and the water never leaves the tray
estimate
≈ $20
handle switches
programmable USB foot switch sending Space, and an inline normally-closed switch on the pump’s cable; both under the faucet handle
estimate
≈ $35
camera
small wide-angle USB camera, 1080p, clipped to the print’s top edge, aimed at a face
estimate
≈ $70
post and mounts
steel post for the print, VESA bracket and foam blocks for the screen
estimate
≈ $120
cables, power, fan
HDMI and USB extension (2 m), a GFCI power strip, a quiet USB fan under the bowl
estimate
≈ $95
materials
$3,272
hours
concept, references, the moodboard by hand
30 h
software: sink.py, veritas, the upscaler, the docs
80 h
screen bed, water tray, pump, cable run
14 h
print, post and camera mounts
6 h
handle switch, setup scripts, a 48 h burn-in
8 h
install on site
8 h
labour, 146 h × $50
$7,300
list price
$17,666
$3,272 + $7,300 = $10,572 artist’s share ÷ 0.60, as a gallery keeps 40% = $17,620 rounded up to end in 666, a memento mori
artist 60%$10,600
gallery 40%$7,066
01 / 06Vanitas Veritas, Build Guide
Vanitas VeritasBuild Guide
how it fits together
One computer does everything: it dreams the water, makes it sharp, and serves the page the screen shows. Every cable runs down through the drain to it, so nothing shows above the bowl.
wiring
side section
Its faucet handle stops generation. Held, it sends Space: generation stops, no data flows, and every basin, here and on the web, drains; let go and it floods back. Its power strip is the whole piece’s. Off, nothing runs; on, everything comes back by itself. Its water is real: the tap runs, a hand ripples it, and the dream shows through.
02 / 06Vanitas Veritas, Build Guide
Vanitas VeritasBuild Guide
Computer: three commands
About 30 minutes, most of it downloading. Do it at home on a monitor, then move the MacBook Pro into the sink, lid closed. Every step can be run again safely.
1
Prepare the Mac10 min
Update macOS. In System Settings: Users & Groups, log in automatically (FileVault off); Notifications, Focus on. Install Google Chrome into Applications.
Installs Python packages, the models and the moodboard, then dreams two frames. Ending on a contact sheet means it works. To point the public site here, save a GitHub token (this repository only, Contents: read and write) in spring_feed/github_token.
cd ~/vanitas-veritas && bash code/setup_sink.sh
4
Make it run for good2 min
Starts sink.py and the full-screen page now and at every login, and restarts either if it stops. Asks for the password once, to keep the Mac awake and start it after a power cut.
bash code/sink.sh install
5
Check it1 min
Within 2 minutes, the screen shows the water. Anytime:
bash code/sink.sh status
good to know
Add a Midjourney picture by dropping it into source/mj_inbox/: it becomes the next dream. Quit the kiosk with Command-Q, or stop everything with bash code/sink.sh remove. Its public address is printed in the log, ~/Library/Logs/vanitas/.
03 / 06Vanitas Veritas, Build Guide
Vanitas VeritasBuild Guide
Sink: one afternoon
Assemble with the power off. Nothing is glued that might need to come out.
1
Stand the sink30 min
Assemble the legs, level it, and set the MacBook Pro, lid closed, on a shelf or bracket under the bowl, clear of the floor.
2
Run the cables15 min
Remove the drain basket. Feed HDMI, the screen’s power and the pump’s cable up through the drain hole; leave slack below.
3
Bed the screen and the water45 min
Four foam blocks on the bowl floor; the screen face up on them, level. Four corner posts hold the tray a few millimetres above the glass, never on it. Set the pump in the tray’s far corner, run its tube up inside the faucet, and fill 2 cm of water.
4
Fit the handle switch30 min
Set the foot switch to send Space (its own app, on any computer). Fix both pedals under the faucet handle so a full pull presses them (the USB one sends Space, the inline one cuts the pump), and put the power symbol on the handle (a small vinyl decal). Test in TextEdit: a pull types a space.
5
Mount the print and camera45 min
Bolt the post behind the sink, hang the print, clip the camera to its top edge, aimed at where a face would be. Stick the QR decal (below; it opens kat-titter.github.io/veritas/?hand) on the rim, front left.
6
Five-minute test5 min
Power on: the water appears within 2 minutes. Reach into the water: it ripples, and the dream moves with it. Pull the handle: the tap stops and the dream drains; let go: both come back. Scan the QR code on the rim: a finger on the phone stirs the water. Stand in front of it: the camera light comes on, and within seconds the water dreams you. Pull the plug and replug: it comes back on its own.
if something is wrong
screen black, says water = None
sink.py is starting or stopped: wait 2 minutes, then bash code/sink.sh restart
water does not run
pump: check its cable and the inline switch, and top up the tray
handle does nothing
switch must send Space: test it in TextEdit
frames slow or stutter
laptop too hot: check the fan and the gap under the bowl
no public address
internet down: the sink still works on its own
04 / 06Vanitas Veritas, Build Guide
Vanitas VeritasBuild Guide
keep it running
Built to be left alone for the whole show.
1
Burn in2 days
Before the show, run it 48 hours, then pull the plug 10 times. Every time it must come back to the water on its own.
2
Each morning
Nothing to do. Power on, and the laptop starts; the screen follows sink.py.
3
Each night
Switch off at the power strip, or leave it on: sink.py keeps only the last 60 frames on disk. Top up the water once a week.
4
Update2 min
When the code changes:
cd ~/vanitas-veritas && git pull && bash code/sink.sh restart
5
Remote check
From any browser, the public address in the log shows the same water. If it moves, the sink is alive.
05 / 06Vanitas Veritas, Build Guide
Vanitas VeritasBuild Guide
why it is built this way
Four choices keep it simple to run.
One computer, no cloud
Dreaming, upscaling and serving run on the MacBook Pro. No account, no subscription. Two switches: the faucet handle stops the tap, generation and the data flow while it is held; the power strip turns the whole piece off.
Screen opens straight to the water
In kiosk mode, a browser shows veritas full screen. If it closes or crashes, it reopens in 10 seconds.
Real water, a dry screen
The tray carries the water a few millimetres above the screen: the picture moves with every ripple, and the screen never gets wet or carries the weight.
Cables down the drain
Already a hole to the space under the bowl, the drain means no drilling, no cables in sight, and the laptop sits where water would go.