Generating Subtitles for Songs That Ship Without Timestamps
Every AI music tool I have tried returns the same shape of output: an audio file. Not one of them tells you when each line is sung. That is fine if you only want to listen, and useless the moment you want lyrics on screen — a karaoke line, a video caption, a scrolling block under a player.
Timing is the whole problem. The audio is the easy part.
This is the pipeline I ended up with, running on 18 English songs generated locally, plus the two places it broke in the browser. Everything below is reproducible: the only thing it needs from you is the lyrics you already wrote.
What you actually need
Two subtitle formats, one shared data structure:
| Format | Used by | Shape |
|---|---|---|
| LRC | music players, karaoke blocks, <audio> overlays | [mm:ss.xx]lyric line |
| SRT | VLC, YouTube, Premiere, ffmpeg burn-in | index / hh:mm:ss,mmm --> hh:mm:ss,mmm / text |
Both are just line → start time (+ end time for SRT). So the real task is: given a list of lyric lines and an audio file, find where each line starts.
Why “just transcribe it” fails
The obvious approach: run speech recognition, take its segments, write them out. It fails for two reasons.
1. Recognition of singing is much worse than recognition of speech. The model is fighting instruments, reverb, and vowel stretching. On my batch the word error rate on sung Mandarin hovered around 25–35%; dense electronic mixes were worse.
2. It drops whole sections. On a 140 BPM remix, one song’s entire first verse simply never appeared in the transcript — the vocal is buried and the model moved on. Two other songs lost their outros.
A transcript with holes cannot become subtitles with no holes. But here is the reframe that fixes everything:
You are not transcribing. You are aligning. You already know the exact words — they are your lyrics. You only need the audio for anchors.
The inversion that makes it work
Feed the recogniser to get word-level timestamps, then align its output against your known lyrics with a longest-common-subsequence diff. You do not care whether the recogniser got the words right — you care that the words it did get are in the right order, because each match is a timestamp anchor.
import difflib
ref = [u for line in lines for u in units(line)] # your lyrics
hyp = [w[0] for w in asr_words] # what it heard
sm = difflib.SequenceMatcher(a=ref, b=hyp, autojunk=False)
for tag, i1, i2, j1, j2 in sm.get_opcodes():
if tag != "equal":
continue # mismatches are just gaps, not errors
for k in range(i2 - i1):
matched[ref_index[i1 + k]] = asr_words[j1 + k][1:] # (start, end)
Each lyric line then takes the timestamp of its first matched unit. This is robust in a way transcription is not: 60–70% word accuracy is plenty, because every correctly-placed word pins the line it belongs to.
Measured coverage on this batch — the share of lines that got at least one real anchor:
| Language | Unit | Mean anchor coverage | Songs fully anchored |
|---|---|---|---|
| English | word | 0.96 | 9/18 |
| Mandarin | character | 0.70 | 11/11 |
English aligns better for a boring reason: words are delimited by spaces, so each ASR token maps cleanly onto one lyric token. Mandarin needs each character spread across the token’s time span:
span = w.end - w.start
for i, ch in enumerate(hanzi_in_word):
chars.append((ch, w.start + span * i / n, w.start + span * (i + 1) / n))
The governor: three rules that stop nonsense timings
Anchors get you most of the way. Left alone, the gaps between them produce timings that are physically impossible, and two of those bit me for real:
Failure A — a line at 0.0 s. One song’s first lyric landed at exactly zero, before the intro had even finished, because the anchor search matched a stray word in the opening shout.
Failure B — four lines in 0.6 s. A song whose outro the recogniser missed entirely had its remaining lines compressed to 0.18 s apart. Twelve characters cannot be sung in 0.18 s.
Failure C — six lines pinned to the floor. One track’s entire first verse landed with no usable anchor, so rule 3 below swept six consecutive lines onto the minimum gap: exactly 1.20 s each, which is roughly ten words a second. The output still looked plausible — monotonic, in range, inside the audio — and it only fell apart when I listened to that track and the whole verse went past in six seconds. Re-running alignment on that one file put its first line at 10.8 s instead of 28.2 s: the anchors had not been missing, they had been matched to the wrong part of the song.
So after alignment, run three rules:
- Estimate the song’s own rate from neighbouring anchored pairs
(units ÷ seconds, take the median). Every line’s expected duration is
units / rate, floored at ~1.8 s. Rates across one batch ranged from 0.96 to 2.33 words/s in English, and 2.3 to 4.1 characters/s in Mandarin — you cannot use a global constant. - Refill unanchored runs proportionally, not with a fixed spacing. If a run sits between two anchors, distribute it by expected duration; if there is not enough room, compress proportionally.
- Reject impossible anchors and enforce a minimum gap. An anchor whose
start is earlier than
5 s + everything before it could possibly takeis a false match — demote it and re-interpolate. Then sweep forward so no two lines start less than 1.2 s apart, and pull back from the end if the tail overruns the audio.
That last sweep is what turns “looks plausible” into “cannot flicker”.
Emitting both formats
Same timing array, two writers:
def lrc(ts, lines): # [mm:ss.xx]
return "\n".join(f"[{m:02d}:{s:05.2f}]{l}" for (m, s), l in zip(ts, lines))
def srt(spans, lines): # hh:mm:ss,mmm
out = []
for i, (line, (a, b)) in enumerate(zip(lines, spans), 1):
out.append(f"{i}\n{stamp(a)} --> {stamp(b)}\n{line}\n")
return "\n".join(out)
LRC needs only the start; SRT needs start and end, so use the next line’s start as the current line’s end (this is why the governor’s minimum gap matters — without it, SRT blocks get zero duration and some players skip them entirely).
Verification: the part I got wrong twice
The subtitles were correct long before the display was. Two bugs, both in the 20-line player script, both invisible to a code read:
Bug 1 — the box started at the bottom. To find the current line I wrote
lines.findIndex(l => l.t > now) - 1. Before the first line, findIndex
returns 0, so i became -1, and the guard if (i < 0) i = lines.length - 1
turned “nothing yet” into “the last line”. Playback opened scrolled to the
outro.
Bug 2 — it then scrolled to the bottom on the first chord. Fixing bug 1, I
centred the active line with p.offsetTop. offsetTop is measured from the
nearest positioned ancestor — and the lyric box had no position: relative,
so it returned the line’s distance from the top of the page, thousands of
pixels. scrollTop clamped to maxScroll: straight to the bottom.
The correct form does not care about positioning contexts:
const br = box.getBoundingClientRect(), pr = p.getBoundingClientRect();
box.scrollTop += (pr.top - br.top) - (box.clientHeight - pr.height) / 2;
And the lesson about testing matters more than the fix. I verified the index
logic in Node — it passed. I looked at a screenshot — I misread which line was
highlighted. Neither could see a layout bug. What worked was a numeric probe
in headless Chrome: stub currentTime, dispatch timeupdate, then read the
real DOM back out.
chrome --headless=new --dump-dom --virtual-time-budget=8000 \
--window-size=760,520 "file:///probe.html"
Object.defineProperty(a, 'currentTime', { get: () => 100, configurable: true });
a.dispatchEvent(new Event('timeupdate'));
// then report: active line index, its offset inside the box, scrollTop, maxScroll
The pass condition is a number, not an opinion: the active line’s offset
inside the box should be about half the box height (I got 124 px in a 274 px
box), scrollTop = 0 with nothing highlighted at t = 0, and scrollTop = maxScroll only for the final lines.
Results
Eighteen songs, none of which shipped a timestamp. Every one now has line-level LRC and SRT, generated from lyrics plus audio alone. The numbers below are the English page set; the Mandarin row in the coverage table above comes from a separate 11-track validation batch I ran through the same alignment code, not from these players.
| Songs | 18 |
| Subtitle lines | 342 |
| Mean anchor coverage | 0.96 |
| Songs with every line anchored | 9 / 18 (every line got a time) |
| Processing time | 63–90 s per song, CPU-only faster-whisper |
Running it on CPU is deliberate, not a limitation I worked around: all 18 tracks
were aligned on a Core i9-13900K (in the Windows VM that runs this pipeline),
because the GPU stays reserved for the generation pass that produces these songs, and
63–90 s of faster-whisper int8 per track is cheap enough that queuing the
aligner behind a diffusion job would cost more than the CPU time saves.
Each player below scrolls its lyrics, keeps the current line centred, and has a .srt download next to it if you want to burn the subtitles into a video or open them in VLC.
[ti:Tiny Borrowed Shoes] [ar:Mr Hoelee] [00:11.56]Underneath the floorboards where the shadows play [00:14.60]I tied a little ribbon at the break of day [00:18.32]A button for a table, a thimble for a cup [00:22.02]I climb the ivy ladder when the sun comes up [00:27.76]Sugar on the windowsill, a feather in my hand [00:31.42]The garden is a jungle and a wonderland [00:35.22]Careful not to wake the cat sleeping by the door [00:40.00]Tip-toe in my borrowed shoes across the wooden floor [00:44.46]Fly away, little breeze, carry me along [00:48.10]Through the clover and the leaves, singing my own song [00:51.90]Though the world is wide and tall, and I am very small [00:57.58]In the secret morning light, I can have it all [01:09.62]Dewdrops on the dandelion shining like a crown [01:12.24]I catch a floating parachute and spin around and down [01:15.98]If you hear a tiny laugh hiding in the wall [01:19.62]That is just my secret song, answering your call [01:27.26]Fly away, little breeze, carry me along [01:30.72]Through the clover and the leaves, singing my own song [01:34.58]Though the world is wide and tall, and I am very small [01:40.32]In the secret morning light, I can have it all [01:51.98]La-la-la, in the morning light...
[ti:Mist Over Skellig] [ar:Mr Hoelee] [00:21.73]Where the gray Atlantic meets the abbey stone [00:28.56]White birds circle high above the cliff alone [00:33.56]Carved into the stairway of a thousand years [00:42.16]Every drop of ocean rain whispers in my ears [00:49.16]Sail into the silver mist, beyond the western sea [00:57.96]Where the ancient lanterns glow for you and me [01:06.32]Hush now, hear the harp strings ring across the foam [01:14.74]Through the fog and falling stars, the tide will bring us home [01:25.36]Candles in the chapel window flicker in the gale [01:33.04]Ink upon the parchment tells a forgotten tale [01:57.48]Little hands upon the rock, looking at the sky [02:05.18]Watching all the centuries gently passing by [02:16.98]Sail into the silver mist, beyond the western sea [02:22.94]Where the ancient lanterns glow for you and me [02:30.46]Hush now, hear the harp strings ring across the foam [02:38.98]Through the fog and falling stars, the tide will bring us home [02:57.02]Oceans rise and oceans fall... [03:04.34]The tide will bring us home.
[ti:Willow by the Silver Stream] [ar:Mr Hoelee] [00:23.83]Mmm-mmm, ahh-ahh... [00:26.70]Silver runs the quiet stream beneath the willow tree [00:33.64]Golden is the evening star shining down on me [00:40.54]All the little meadow flowers fold their petals tight [00:46.36]Waiting for the moon to weave a blanket of the night [00:53.02]May the wind be gentle on your weary wings [00:59.76]May you hear the lullaby the river softly sings [01:06.28]Close your eyes and drift away where the shadows gleam [01:13.52]Peace will walk beside you in the valley of a dream [01:27.32]Fireflies are dancing slow among the reeds and moss [01:33.14]Showing every wandering heart the stepping stones to cross [01:39.46]Nothing in the dark can harm the light inside your chest [01:46.66]Lay your head upon the grass and let the world rest [01:53.62]May the wind be gentle on your weary wings [01:59.76]May you hear the lullaby the river softly sings [02:06.30]Close your eyes and drift away where the shadows gleam [02:13.42]Peace will walk beside you in the valley of a dream [02:50.86]In the valley of a dream... [02:56.54]Sleep in peace tonight.
[ti:Clockwork Starlight] [ar:Mr Hoelee] [00:19.30]Ticking in the quiet tower made of porcelain and glass [00:23.44]I can see the painted clouds and paper swallows pass [00:32.36]Every gear is turning slow beneath the velvet sky [00:36.72]Counting all the shooting stars that never say goodbye [00:46.12]Someone left a silver key beside the windowpane [00:50.52]Unlocking all the memories hidden in the rain [00:59.86]Sing for the dawn across the endless night [01:04.66]Spinning the threads of shadow into light [01:09.20]Even if the clock should stop and time fades away [01:13.70]I will keep this little wish until the break of day [01:22.28]La-la-lu-la, hear the distant bell [01:31.34]Breaking the silent spell [01:38.14]Pages of an ancient book are fluttering like wings [01:42.50]Telling me of emerald seas and forgotten kings [01:52.16]With my small and trembling hands I open up the door [01:56.38]Stepping out into a world I've never seen before [02:05.70]Sing for the dawn across the endless night [02:10.56]Spinning the threads of shadow into light [02:15.02]Even if the clock should stop and time fades away [02:21.12]I will keep this little wish until the break of day [02:33.64]Until the break of day...
[ti:Waltz of the Dandelion] [ar:Mr Hoelee] [00:17.62]One, two, three, the summer breeze is knocking at my door [00:22.56]Dancing with the sunlit dust upon the wooden floor [00:30.62]Out across the grassy hill the dandelions grow [00:38.40]Waiting for a little breath to tell them where to go [00:48.08]La-la-la, wherever you may fly [00:53.28]Underneath the big and gentle sky [00:57.28]Even when the seasons change and winter turns to spring [01:06.06]I will still remember every little song we sing [01:27.36]Drops of rain upon a leaf are rolling into one [01:34.62]Shining like a diamond in the afternoon sun [01:42.46]If you ever lose your way or feel a little sad [01:50.26]Think about the quiet days and all the smiles we had [02:00.18]La-la-la, wherever you may fly [02:05.28]Underneath the big and gentle sky [02:09.14]Even when the seasons change and winter turns to spring [02:17.90]I will still remember every little song we sing [02:25.96]La-la-la, la-la-la... [02:29.46]See you again someday.
[ti:Whale in the Milky Way] [ar:Mr Hoelee] [00:12.10]Ah-ah-ah, ooh-ooh... [00:15.70]Up above the sleeping town where all the rooftops end [00:21.86]Swims a giant silver whale that wants to be my friend [00:27.94]Ripples in the Milky Way are washing on the shore [00:34.34]Leaving little seashells by my bedroom door [00:40.98]Can you hear the quiet song echoing in space? [00:47.28]Every lonely little star has found a hiding place [00:59.60]Float away, float away, into the velvet blue [01:06.26]I am sending all my gentle lullabies to you [01:12.74]Through the clouds of stardust and the galaxies afar [01:19.59]You are never lost because I see how bright you are [01:38.82]Paper boats upon the sea of infinite delight [01:44.56]Carrying our tiny dreams across the quiet night [01:51.08]Hold my hand and do not fear the deep and silent sky [01:57.42]We can ride the silver whale and watch the world go by [02:04.14]Float away, float away, into the velvet blue [02:10.26]I am sending all my gentle lullabies to you [02:16.74]Through the clouds of stardust and the galaxies afar [02:23.52]You are never lost because I see how bright you are [02:32.74]Goodnight, little star...
[ti:Puddle Jumping Parade] [ar:Mr Hoelee] [00:06.76]One, two! Ready, go! [00:08.68]Put on my yellow boots and grab my red umbrella too [00:12.30]The rain has stopped and left the sky a shiny, happy blue! [00:16.08]A giant puddle in the street is looking back at me [00:20.08]I take a giant running leap—one, two, and three! [00:23.86]Splash! Goes the water, jumping to the sky [00:27.66]Even little sparrows stop to watch us marching by! [00:32.66]Hooray, hooray! Join the happy parade! [00:36.20]Dancing in the sunshine that the morning made! [00:40.16]Clap your hands together, stomp your little feet [00:44.44]Every single puddle makes the melody complete! [00:49.30]La-la-la, step in time, smiling ear to ear! [00:56.42]A snail upon the garden wall is waving with its horn [01:00.10]The brightest, biggest rainbow in the neighborhood is born! [01:03.90]We'll share a pocketful of sweets and sing a silly tune [01:07.72]And march around the playground till we reach the afternoon! [01:13.06]Hooray, hooray! Join the happy parade! [01:16.24]Dancing in the sunshine that the morning made! [01:20.12]Clap your hands together, stomp your little feet [01:23.90]Every single puddle makes the melody complete! [01:29.20]Jump! Splash! Hooray!
[ti:Strawberry Cloud Bakery] [ar:Mr Hoelee] [00:08.32]Ding-dong rings the little bell above the bakery door [00:13.48]Flour on the apron and confetti on the floor [00:16.54]Butter in the mixing bowl and sugar in the pan [00:20.34]Baking up the fluffiest creations that I can! [00:24.20]Wait a little minute as the oven starts to glow [00:29.12]Watch the little loaves of bread begin to rise and grow! [00:34.04]Welcome to the bakery upon the strawberry cloud! [00:39.24]Where singing in the kitchen is definitely allowed! [00:42.76]A croissant for the puppy and a muffin for the cat [00:46.20]With a dollop of vanilla cream upon a beret hat! [00:57.82]Pour a cup of warm milk tea and sit beside the window [01:01.68]Wave hello to everyone walking down below [01:05.98]If your day is sour like a lemon on a tree [01:09.78]Take a bite of honey toast and share a smile with me! [01:13.90]Welcome to the bakery upon the strawberry cloud! [01:19.26]Where singing in the kitchen is definitely allowed! [01:22.48]A croissant for the puppy and a muffin for the cat [01:26.20]With a dollop of vanilla cream upon a beret hat! [01:33.58]Fresh out of the oven! Yum, yum!
[ti:Captain Marshmallow] [ar:Mr Hoelee] [00:08.06]Attention please! Captain on the deck! [00:10.64]Sofa is my pirate ship, the carpet is the sea [00:13.92]Pillow fort is waiting there for teddy bear and me [00:17.52]Put a paper triangle upon my curly head [00:20.96]No one has to take a nap or go to sleep in bed! [00:25.68]Left turn! Right turn! Watch out for the shark! [00:31.08]Wait—that's just the fluffy dog barking in the dark! [00:36.78]Aye, aye, Captain Marshmallow! [00:38.42]Sailing where the candy breezes blow! [00:42.04]Cookies in the treasure chest, chocolate on the map [00:45.56]Give a little salute and a double-double clap! (Clap-clap!) [00:50.74]We rule the living room today! [00:56.34]Homework is forbidden by the royal pirate law [00:59.60]Every single citizen must draw a dinosaur! [01:03.12]More pudding for the afternoon, and juice inside the cup [01:07.28]When the clock strikes dinner time, we'll eat the treasure up! [01:13.80]Aye, aye, Captain Marshmallow! [01:15.28]Sailing where the candy breezes blow! [01:19.00]Cookies in the treasure chest, chocolate on the map [01:22.46]Give a little salute and a double-double clap! (Clap-clap!) [01:26.82]We rule the living room today! [01:33.00]Mission accomplished! Yay!
[ti:Lanterns on the Lotus Pond] [ar:Mr Hoelee] [00:10.69]Patter goes the summer rain upon the lotus leaf [00:15.29]Washing all the dusty world and bringing cool relief [00:19.89]Stepping on the wet bluestone beside the willow bridge [00:24.49]Dragonflies are resting on the painted wooden ridge [00:28.58]Fold a little paper boat and light a candlewick [00:33.16]Make a wish before the current carries it so quick [00:40.46]Floating down the lotus pond, a hundred lanterns glow [00:46.38]Mirrored in the ripples where the silver fishes go [00:49.62]Listen to the bamboo flute across the misty stream [00:54.22]In the courtyard of the moon, we share a summer dream [01:03.96]Silk fan in my little hand to chase the fireflies [01:08.72]Red string braided in my hair beneath the lantern skies [01:13.36]Grandma tells a fairy tale of rabbits in the moon [01:18.22]While the sweet osmanthus flowers blossom in the June [01:25.54]Floating down the lotus pond, a hundred lanterns glow [01:30.02]Mirrored in the ripples where the silver fishes go [01:34.62]Listen to the bamboo flute across the misty stream [01:39.36]In the courtyard of the moon, we share a summer dream [02:06.76]Red lanterns drifting far away...
[ti:Wings of the Kunpeng] [ar:Mr Hoelee] [00:25.18]Deep beneath the silent waves where no one ever sees [00:31.60]Sleeps a tiny silver fish dreaming of the breeze [00:38.16]Counting every falling tear that drops into the tide [00:44.50]Waiting for the heavy gates of heaven to divide [00:51.16]Do not fear the rising storm or shadows in the deep [00:57.24]There is still an ancient promise that the ocean keeps [01:06.34]Spread your wings and rise above the sea of clouds and rain [01:13.18]Never let the mortal world bind you with a chain [01:19.74]Fly across the mountain peaks where immortal rivers flow [01:25.96]I will watch you turn to wind and let your spirit go [01:49.10]Cycles of a thousand years are written in the stars [01:54.96]Time will heal the broken shells and wash away the scars [02:01.32]When the red camellia blooms upon the snowy shore [02:07.58]We will meet beyond the sky and part ways nevermore [02:16.86]Spread your wings and rise above the sea of clouds and rain [02:23.52]Never let the mortal world bind you with a chain [02:30.18]Fly across the mountain peaks where immortal rivers flow [02:36.26]I will watch you turn to wind and let your spirit go [02:48.84]Ah-ah-ah, fly into the wind...
[ti:The Puppeteer's Thread] [ar:Mr Hoelee] [00:24.12]Carved from a willow branch, painted with a smile [00:34.16]Dressed in tiny embroidered silk, traveling mile by mile [00:46.00]Ten thin threads of crimson silk tied upon my hands [00:55.50]Dancing in the market square across the distant lands [01:07.80]Crowds will gather when the gong begins to softly ring [01:13.12]Laughing at the little doll that cannot speak or sing [01:21.66]Dance in the lantern light, spin around the stage [01:26.70]Telling all the legends of a long-forgotten age [01:32.42]Though my heart is made of wood and cannot feel the rain [01:37.66]Every pull upon the thread remembers joy and pain [02:10.68]Autumn leaves are falling down upon the empty street [02:15.82]Only echoes remain of the applause so sweet [02:21.36]Keep me in the wooden box beside your warm fireplace [02:26.98]Even when the paint fades off my little smiling face [02:36.74]Dance in the lantern light, spin around the stage [02:42.86]Telling all the legends of a long-forgotten age [02:48.56]Though my heart is made of wood and cannot feel the rain [02:54.02]Every pull upon the thread remembers joy and pain [03:05.04]Ten thin threads of crimson silk...
[ti:Paper Airplane in September] [ar:Mr Hoelee] [00:10.42]Sunlight on the wooden desk is moving inch by inch [00:15.10]Sparrows on the telegraph wire never seem to flinch [00:20.88]I fold a page of notebook paper creases nice and neat [00:25.60]And throw it out the window to the quiet autumn street [00:30.88]Fly away, paper plane, into the golden air [00:36.36]Carry all the little words I didn't dare to share [00:41.64]Goodbye to the summer clouds, hello to the breeze [00:48.72]Floating past the bicycles and underneath the trees [01:03.30]Chalk dust on the blackboard fades as afternoon goes by [01:08.38]Clouds like cotton candy drift across the September sky [01:13.76]Every simple little thing we took for granted then [01:18.90]Stays inside a photograph we'll look at once again [01:24.30]Fly away, paper plane, into the golden air [01:29.66]Carry all the little words I didn't dare to share [01:34.90]Goodbye to the summer clouds, hello to the breeze [01:41.68]Floating past the bicycles and underneath the trees [01:57.78]Underneath the autumn trees... [02:02.18]Goodbye, summer days.
[ti:Porridge and Evening Smoke] [ar:Mr Hoelee] [00:11.54]Smoke is rising from the roof into the purple sky [00:17.04]While the evening swallows call and hurry on up high [00:22.84]Steam upon the kitchen glass is blurring out the view [00:28.48]Sitting on a wooden stool, I wait for dinner too [00:34.02]One bowl of warm white rice, a dish of tender greens [00:39.52]The simplest kind of happiness is what the evening means [00:45.42]No matter how the outside world is noisy, cold, and wide [00:50.98]The lamp upon the dining table keeps us warm inside [01:09.84]Wrinkles on a gentle hand that smooths my messy hair [01:14.88]Telling me to eat it all and sit up in my chair [01:20.48]Years will pass like river water flowing to the sea [01:26.26]But this quiet kitchen light will always stay with me [01:33.04]One bowl of warm white rice, a dish of tender greens [01:38.76]The simplest kind of happiness is what the evening means [01:44.60]No matter how the outside world is noisy, cold, and wide [01:50.14]The lamp upon the dining table keeps us warm inside [01:57.40]The lamp is always on for you...
[ti:Green Train to the Sea] [ar:Mr Hoelee] [00:10.84]Clickety-clack upon the track, the green train starts to roll [00:14.28]Leaving all the city gray behind the tunnel hole [00:19.42]Forehead pressed against the glass, I watch the fields go by [00:24.20]Golden wheat and windmills waving underneath the sky [00:28.38]Take me where the spring wind blows across the open blue [00:33.78]Ten miles of wildflowers blooming just for me and you [00:38.82]Every station has a name I've never heard before [00:43.46]Soon the scent of salty air will meet us at the shore [00:57.42]Strangers sharing oranges and stories in the seat [01:02.46]Sunlight dancing in the aisle around my dangling feet [01:07.48]Postcards in my backpack waiting for a stamp and pen [01:11.50]To tell the people back at home I'm coming back again [01:16.22]Take me where the spring wind blows across the open blue [01:21.52]Ten miles of wildflowers blooming just for me and you [01:26.80]Every station has a name I've never heard before [01:31.40]Soon the scent of salty air will meet us at the shore [01:46.20]Look, there is the sea...
[ti:Sanctuary of the Dawn] [ar:Mr Hoelee] [00:22.82]Ahh-ahh, sanctus, ahh... [00:25.64]Shadows fade before the light that rises in the east [00:31.74]Every troubled storm is stilled and every sorrow ceased [00:37.76]Through the tall stained-glass windows morning beams descend [00:44.12]Shining on a quiet road where broken hearts can mend [00:50.56]Peace be with you, weary soul, lay your burden down [00:58.74]Where the silver rivers flow beyond the sleeping town [01:05.08]Lift your eyes unto the hills where golden angels sing [01:11.46]Rest beneath the gentle shelter of a shining wing [01:21.16]Like a bell across the valley ringing clear and true [01:27.18]Every dawn is bringing back a promise made anew [01:34.18]Walk into the quiet light and leave the dark behind [01:40.06]There is grace in every breath for all of humankind [01:48.40]Peace be with you, weary soul, lay your burden down [01:54.64]Where the silver rivers flow beyond the sleeping town [02:01.02]Lift your eyes unto the hills where golden angels sing [02:07.48]Rest beneath the gentle shelter of a shining wing [02:15.30]Peace be with you... forevermore. [02:26.48]Amen, ahh...
[ti:Look Upon Your Path] [ar:Mr Hoelee] [00:09.64]Look upon the winding path where fallen leaves are blown [00:14.64]Children walking hand in hand so no one is alone [00:19.64]Even when the winter wind is cold against your face [00:25.04]Every step you take today is leading to a place [00:31.52]Shine your light into the dark, let your voice be heard [00:36.60]Rising like the morning lark, a brave and little bird [00:41.60]Though the night is long and deep, the stars are watching still [00:46.68]Spring will wake the seeds asleep upon the quiet hill [00:57.00]Write a song upon the wind for everyone who strays [01:02.16]Hope is like a tiny spark that sets the sky ablaze [01:07.48]Hold the hand beside you tight and never look below [01:11.88]There are gardens waiting where the wildest rivers flow [01:21.30]Shine your light into the dark, let your voice be heard [01:26.36]Rising like the morning lark, a brave and little bird [01:31.34]Though the night is long and deep, the stars are watching still [01:36.44]Spring will wake the seeds asleep upon the quiet hill [01:45.98]Look upon your path... the dawn is near.
[ti:Bells of the Winter Star] [ar:Mr Hoelee] [00:08.50]Ding-dong, ding-dong, ring out the bells... [00:18.20]Snowflakes falling from the sky in silence pure and white [00:25.44]Dressing every cedar bough in robes of silver light [00:34.56]Listen to the steeple bells across the frozen square [00:43.42]Sending out a melody upon the midnight air [00:52.92]Ring, silver bells, across the winter snow [01:01.30]Tell all the world the star has begun to glow [01:11.76]Gloria, gloria, hear the angels sing [01:19.28]Peace on the earth this holy night will bring [01:32.12]Candles in the frosted glass are shining warm and clear [01:40.42]Guiding every traveler home at the end of year [01:49.68]Every chime is like a prayer ascending to the sky [01:58.26]Watched by all the quiet stars that never pass us by [02:09.62]Ring, silver bells, across the winter snow [02:18.22]Tell all the world the star has begun to glow [02:28.00]Gloria, gloria, hear the angels sing [02:37.14]Peace on the earth this holy night will bring [02:49.30]Gloria... peace on the earth.
Looking for high-impact engineering work or custom systems?
From front-end web apps down to edge proxies and container automation. Open to serious freelance client projects and senior engineering roles.