← all 100 themes
Theme 033 · Light, optics & texture

ASCII / Dither Resolve

Every image starts life as a coarse field of characters (. : - = + * # @) in ink on near-white. Resolution is the metaphor: the more Acme Pulse understands your metrics, the finer the grid gets, until it snaps into crisp vector UI. Except for one glyph cluster that refuses to resolve and stays coral.

readability ●●○trust ●●○effort med
#*%*#%*#*+#% +%*#**#*+%#+ ****#+*++*%+ +#**%+#+#*## %
#.%%%%  .. %.#:. :.::   # #.@@@:+++++* *    . :%%%+ *
%%%%%%%  : %.#  #.# :#.#% #:@@@::.  .* *%..  %%%%%% #
%%. ..%%%%%% %:##:#.## #* #.@@@ ++++++ *%%%%%%%.. + %
+#***+#%#+*# +*#***+##*##.%**%%*#*#*+# *##*+**%*##+ *
      .      .      .        .  . ..  .   .   . .    
**%++#%*##** +#%%**+*+***.%+*+*%#%%#*# #%*%*##*+#** #
*.:  .. : .# # @@@.+++++* +%% : . .%%* *.:.: : .:.# #
*.#:#. #:#:# * @@@    .:# #%%%..: %%%# %:#  #:# :#* #
*##:#.##.#.#.+:@@@:+++++% #: %%%%%%. + *.# ##:#.##% *
%+*#+#%%***% #%###*+*+*#* +***#*##%%** +#+*##*+#%*% #
    .         .   .  ..  . ..         ..             
%**##%#**%%* %***###**%## %*%+%*###+** #*+#*%**%%#* +
# @@@.+++++* +%%%. .  :.* %. . .   . % # @@@ +++++# *
# @@@ . : :+ +%%%%%.:..%% ##  # #.:#:#.# @@@.   . * +
%.@@@ ++++++ %   %%%%%%%* *#.## #.## %.#.@@@:+++++*.*
*+%*#*%*%##* *#%%**#*++*# *#*##*+##**# +*%***#%##+* #
RES 32 px38 dashboards · 0 understood
How many dashboards did you check today?
1 · HOOK0:00–0:08

The character field scrambles in place (each glyph cycles the ramp at 60 ms) while the question panel wipes up from below; "today?" lands on the bar-2 downbeat.

*+%=+@==-+#+###@%=
+==++.:=-+-=::=---
:::-.:=:+:--:-**.+
--..:.++* .*=:+=+*
==#%***-%*==*%%%@#
..--.+ ..-=..+*-*=
+==+%##%%+=-#=%%=%
.-+ ..++-.+:=*+===
-:=+ .=+--.= :+==.
 + --::--.:==:--..
##=+=-=++=%*-#=#*#
:+. -=.-=.+:-:+=-:
#==-%%%@*%#++++++@
 :== +:=-+*+.::.::
+-+++=:::+:-+.= :=
=+=+=.* =:.:+*-*:*
%#+==%%==%%*-%+*+@
- =.=.-=:.: +: --=
+--@*+=#%#=+%*#-#@
++::-:=:+*-=**-: .
: :+:-*-+*::+-::=-
=..:+.. =+:*=--+=+
=*#====+=-**#+@=*=
:::.:=::.:.=-:=*--
**@*-#*+#%*+-*#-@#
.-=-:+=*:=.:+*+.:=
+...:. .+++=--:..=
::+  =-==+++==.==+
-%%-%%-+*%%=%%=@+=
==+...++*+*+-+-+.:
RES 32 → 4 px
Acme
Acme
Pulse
Noise in · signal out
2 · REVEAL0:08 (drop)

On the drop a teal seam wipes left→right (expo.inOut, 0.6 s): ASCII noise behind it, clean paper ahead; the mark and wordmark are what's left standing when the seam stops, locked to beat 1.

Checkout conversion · RES 8 px13 of 14 resolved
        .                                               .         
            .                           .                       . 
  .   ######      #####      ######  .    .                     ..
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                           
:#####  ::  ######:::  ######:   ::###:.                         .
::: ::  ::  :::: :   : :: :::    ::  ::@                          
. :::  .   .:: :::  ..   :: :.   . : :.#                 . .      
    .   .    .... ...   ... . .   . ...:@    .    .               
     .         ... .      .     . ... . #              .          
 .  .       . .  .       ..   .   .  .   @##@@@#####@@@#####@@@###
        .                 .     .       :#@@###@@@@@###@@@@@###@@@
                            .              ::  ::::    ::::     ::
.          .     .           .       .   :  :: : :: : ::::  ::: ::
.          .     .          .      .   ... .  ..  . ...    ..   ..
Signups✓ 1,204
Active users✓ 18,930
p95 latency✓ 212 ms
Error rate✓ 0.4 %
−18%Checkout conversion
since 09:42 · after deploy #2231
Roll backAcknowledge
3 · PROOF MOMENT0:12–0:32

The grid refines 32→8 px in beat-quantised steps (steps(6)); healthy metrics resolve into clean pills top→down, but the drop stays a coral #@# cluster until the card rises from it on the snare, handing the call to a human.

=%%=*:-#=%-:-- +*#%=#%+-*.*- .+-.+%.... +=+=:.#: ==:%%-#=+.-=#=:+ #+%:+:*%-*%  %
=*:+-:=::-- =.+* .:=.: + +*.-+ .+=:+*+  +:.-=*:-=* ..+=  ::---=.-:. +:. .:-= ::=
 ==-.--.:=:- --  -:.=:-=  ::-.-.::.= -:: .= ---= . .:.--..-. : :..-.=-. .=-.  -:
:..    .  . :.   ....::.... . .:.: :  . .  ... .. . .  . :.   ..  ..: . .. :.   
.:..  ..... .  .  .    . . ... .: ....  . ::.: .  ..  .. .....  ... .. . .   .  
 :: :== =:.- .-::  --. ==-..-:- .: :::-  --. -:::::-:=-. .: .=:  = ::-=--..- -.:
-==:: :+.-  += + * *+:-+=.-. .*=-:=**.:...=:-++=:*::+-.=:-..+***:=*  :.-*.-:+.*-
%+-*#* .-:.--%#=** *+-:*=*%+%%.==%:.-:=-%--.%-+  --=%*#=*%=:=.%#+-%+% -+:::+=.#*
AcmeAcme Pulse
Every metric.
Every minute.
Start free
RES 1 px · fully resolved
4 · CTA0:36–0:45

The last glyphs retreat to the top and bottom edges as a fading band; the tagline resolves line by line (scramble → settle, 8 ms stagger) and Start free snaps crisp on the final downbeat.

COMPONENT KIT

MOTION · MUSIC

WHY / RISK · ADAPT IT

"Noise becomes clarity" is exactly what an anomaly agent does, and leaving one cluster unresolved points the eye at the problem for free. Risk: dense glyph fields turn to moiré under compression; keep hero cells ≥ 8 px.

Adapt to your product: Render a screenshot of your own UI through the character ramp, resolve it section by section, and leave your product's key finding as the last hot cluster.

References: Codrops: real-time ASCII & dithering shaders · Codrops: real-time dithering shader