Almost Done
Races to 90%, crawls to 99%, then stops forever.
| System | AWTRIX NG Scripts |
|---|---|
| Firmware | AWTRIX NG |
| Topic | Miscellaneous |
| Built by | Galadril |
| File | xV7mT6T28ERL.ax · 2.2 KB |
| Icons | — |
| Published | 8 Sep 2026 · updated 8 Sep 2026 |
Races to 90%, crawls to 99%, then stops forever. The ETA counts upward the longer it
sits there. Every ~10s it flashes 100% for 300ms to keep hope alive, and after about a
minute at 99% there is an 18% chance it drops back to single digits and starts over with
ESTIMATING.
Cycles three readouts - percentage, current task, ETA - with the progress bar always on the
bottom row. The task phrase is scrolled by hand so the bar stays visible under it:
RETICULATING SPLINES, AWAITING VENDOR REPLY, APPLYING MORE GLUE,
NEGOTIATING WITH CACHE.
xV7mT6T28ERL.ax
# @name Almost Done
# @desc Progress bar that respects no one
# @author Galadril
# @version 1.1
# @config sound bool "Sound" default=false
import math
class AlmostDone
var TASK
var pct,eta,held,task,phase,pt,wasted,tick,snd
def init()
self.snd=store.get("sound",false)
self.wasted=store.get("wasted",0)
self.TASK=["RETICULATING SPLINES","COMPILING THE YAML","WARMING THE CACHES","COUNTING EVERY PACKET","REVERSING ENTROPY","AWAITING VENDOR REPLY","AWAITING APPROVAL","ROUNDING THE FLOATS","ASKING DNS NICELY","APPLYING MORE GLUE","DRAINING THE QUEUES","REFRESHING THE TOKENS","SHARDING THE MONOLITH","NEGOTIATING WITH CACHE","REBUILDING THE INDEX","CONSULTING THE LOGS"]
self.pct=math.rand()%15
self.eta=2
self.held=0
self.tick=0
self.task=math.rand()%size(self.TASK)
self.phase=0
self.pt=0
end
def _beep(m)
if self.snd
if settings.get("soundEnabled")!=false
sound.rtttl(m)
end
end
end
def loop()
self.tick+=1
if self.tick>=60
self.tick=0
self.wasted+=1
store.set("wasted",self.wasted)
end
if self.pct<90
self.pct+=3+math.rand()%7
if self.pct>90
self.pct=90
end
return
end
if self.pct<99
if math.rand()%100<40
self.pct+=1
end
return
end
self.held+=1
if self.held%8==0
self.eta+=1+math.rand()%3
end
if self.held>50
if math.rand()%100<18
self.pct=5+math.rand()%15
self.eta=2
self.held=0
self.task=math.rand()%size(self.TASK)
self._beep("z:d=16,o=5,b=200:c,8p,c")
end
end
end
def duration()
return 18000
end
def draw()
clear()
var now=now_ms()
var col=0x3FB4E8
if self.pct>=99
col=0xFFD34D
end
if self.phase==1
var s=self.TASK[self.task]
var w=text_width(s)
var off=32-(now-self.pt)*26/1000
text(off,5,s,0xF2E3C8)
if off+w<0
self.phase=2
self.pt=now
end
else
var s="ESTIMATING"
if self.phase==0
s=str(self.pct)+"%"
if self.pct>=99
if (now/300)%32==0
s="100%"
end
end
end
if self.phase==2
s="ETA "+str(self.eta)+"M"
if self.pct<90
s="ESTIMATING"
end
end
text((width()-text_ink_width(s))/2,5,s,col)
if now-self.pt>2400
self.pt=now
self.phase=(self.phase+1)%3
end
end
rect_fill(0,7,32,1,0x1A1A1A)
var bw=self.pct*32/100
if bw>32
bw=32
end
if bw<1
bw=1
end
rect_fill(0,7,bw,1,0xD97757)
if self.pct>=99
if (now/250)%2==0
pixel(31,7,0xFFFFFF)
end
end
end
end
return AlmostDone()
Install it on your AWTRIX NG
Your browser writes the script straight to the device on your network. It joins the app rotation right away.
Some browsers refuse to talk to a device on your network from a public page. Download the flow and paste it into the Scripts tab of your device, or install it from a terminal:
More flows for AWTRIX NG Scripts or Miscellaneous
Something wrong with this flow? Report it.