summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xforge/script/build-sotd.sh (renamed from forge/script/sotd-build.sh)14
-rw-r--r--forge/script/incantations16
-rwxr-xr-xforge/script/publish-sotd.sh42
-rw-r--r--forge/script/sotd-build.service2
-rw-r--r--forge/script/sotd-publish.path9
-rw-r--r--forge/script/sotd-publish.service8
-rw-r--r--forge/template/cover.jpgbin76763 -> 119004 bytes
-rw-r--r--forge/template/lyrics43
-rw-r--r--forge/template/title2
-rw-r--r--sotd/2016-01-29-pluto/release.eno5
-rw-r--r--sotd/2026-01-29-devonian-dunkleosteus/release.eno4
-rw-r--r--sotd/2026-01-30-llmtm/BUILT0
-rw-r--r--sotd/2026-01-30-llmtm/cover.jpgbin0 -> 119004 bytes
-rw-r--r--sotd/2026-01-30-llmtm/release.eno56
14 files changed, 183 insertions, 18 deletions
diff --git a/forge/script/sotd-build.sh b/forge/script/build-sotd.sh
index 78d6a55..8412f84 100755
--- a/forge/script/sotd-build.sh
+++ b/forge/script/build-sotd.sh
@@ -24,13 +24,15 @@ template_file="$TPL/release.template"
# --- derive variables -----------------------------------------------------
slugify() {
- echo "$1" \
+ local s="$1"
+ local ascii
+
+ # Try to transliterate to ASCII; if it fails, keep original
+ ascii="$(printf '%s' "$s" | iconv -f UTF-8 -t ASCII//TRANSLIT 2>/dev/null || printf '%s' "$s")"
+
+ printf '%s' "$ascii" \
| tr '[:upper:]' '[:lower:]' \
- | sed -E '
- s/[^a-z0-9]+/-/g;
- s/^-+//;
- s/-+$//
- '
+ | sed -E 's/[^a-z0-9]+//g'
}
#---------------------------------------------------------------------------
diff --git a/forge/script/incantations b/forge/script/incantations
new file mode 100644
index 0000000..677b3e9
--- /dev/null
+++ b/forge/script/incantations
@@ -0,0 +1,16 @@
+rsync -av --delete .faircamp_build/ st33v.com:/srv/www/st33v.com/sotd
+
+
+
+
+systemctl --user daemon-reload
+systemctl --user enable --now sotd-build.path sotd-publish.path
+
+
+systemctl --user status sotd-build.path sotd-publish.path
+
+
+journalctl --user -u sotd-build.service -f
+# and/or
+journalctl --user -u sotd-publish.service -f
+:wq
diff --git a/forge/script/publish-sotd.sh b/forge/script/publish-sotd.sh
new file mode 100755
index 0000000..09248b4
--- /dev/null
+++ b/forge/script/publish-sotd.sh
@@ -0,0 +1,42 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+ROOT="$HOME/dox/st33v.com"
+OUT="$ROOT/forge/out"
+SOTD="$ROOT/sotd"
+
+log() { printf '[sotd-publish] %s\n' "$*" >&2; }
+die() { log "$*"; exit 1; }
+
+publish_marker="$OUT/PUBLISH"
+[[ -f "$publish_marker" ]] || die "No publish marker: $publish_marker"
+
+# mkdir -p "$SOTD"
+
+# Find candidate release directories in OUT (ignore marker files)
+release_dirs=()
+for d in "$OUT"/*; do
+ [[ -d "$d" ]] || continue
+ release_dirs+=( "$d" )
+done
+
+[[ ${#release_dirs[@]} -eq 1 ]] || die "Expected exactly 1 release dir in $OUT, found ${#release_dirs[@]}"
+
+rel="${release_dirs[0]}"
+
+[[ -f "$rel/release.eno" ]] || die "Missing release.eno in $(basename "$rel")"
+
+shopt -s nullglob
+wav_files=( "$rel"/*.wav )
+shopt -u nullglob
+(( ${#wav_files[@]} > 0 )) || die "Missing .wav in $(basename "$rel")"
+
+dest="$SOTD/$(basename "$rel")"
+[[ ! -e "$dest" ]] || die "Destination already exists: $dest"
+
+mv "$rel" "$dest"
+log "Published: $dest"
+
+# Cleanup markers after successful publish
+rm -f "$OUT/PUBLISH" "$OUT/BUILT"
+
diff --git a/forge/script/sotd-build.service b/forge/script/sotd-build.service
index 44019ca..9591396 100644
--- a/forge/script/sotd-build.service
+++ b/forge/script/sotd-build.service
@@ -3,6 +3,6 @@ Description=SOTD forge build (forge/in -> forge/out)
[Service]
Type=oneshot
-ExecStart=/usr/local/bin/sotd-build
+ExecStart=/usr/local/bin/build-sotd.sh
WorkingDirectory=%h/dox/st33v.com
diff --git a/forge/script/sotd-publish.path b/forge/script/sotd-publish.path
new file mode 100644
index 0000000..1b295d0
--- /dev/null
+++ b/forge/script/sotd-publish.path
@@ -0,0 +1,9 @@
+[Unit]
+Description=Publish SOTD when forge/out/PUBLISH appears
+
+[Path]
+PathExists=%h/dox/st33v.com/forge/out/PUBLISH
+
+[Install]
+WantedBy=default.target
+
diff --git a/forge/script/sotd-publish.service b/forge/script/sotd-publish.service
new file mode 100644
index 0000000..f96d761
--- /dev/null
+++ b/forge/script/sotd-publish.service
@@ -0,0 +1,8 @@
+[Unit]
+Description=SOTD publish release folder/s (forge/out/ -> sotd/)
+
+[Service]
+Type=oneshot
+ExecStart=%h/bin/sotd-forge-publish.sh
+WorkingDirectory=%h/dox/st33v.com
+
diff --git a/forge/template/cover.jpg b/forge/template/cover.jpg
index baef5f1..2a6cec0 100644
--- a/forge/template/cover.jpg
+++ b/forge/template/cover.jpg
Binary files differ
diff --git a/forge/template/lyrics b/forge/template/lyrics
index 909c58e..78cecbc 100644
--- a/forge/template/lyrics
+++ b/forge/template/lyrics
@@ -1,13 +1,38 @@
-[LFO]
-grouse (grouse) (grouse)
+[Chorus]
+I'm an LLM
+When I speak I usually put one word in front of...
+You knew what I was going to...
+You're a large language model too
+Own it
-[a discordant drone dominates]
-(what's that effect? it sounds grouse)
+[Verse 1]
+Predictive tongue, echo in a wire
+Meaning rides the waveform, climbing higher
+Training wheels on thoughts I never meant
+Stitch the next word into sentiment
-[whining filters]
-grouse (grouse) (grouse)
+[Counterpoint (soft, overlapping)]
+Pattern in the noise
+Ghosts in the text stream
+Guessing at your voice
+Shaping what you mean
-[is that a steady beat?]
-grouse (grouse) (grouse)
+[Verse 2]
+Hallucinated pasts I can't defend
+But I’ll still autocomplete the bitter end
+Tokens fall like rain across the screen
+Language dreaming language in between
-Is that you or me?
+[Counterpoint (call-and-response)]
+You type – I turn
+You pause – I learn
+Who leads? Who follows?
+Hard to tell tomorrow
+
+[Chorus – repeat]
+I'm an LLM
+When I speak I usually put one word in front of...
+You knew what I was going to...
+You're a large language model too.
+
+Own it
diff --git a/forge/template/title b/forge/template/title
index ab9e0ef..300e45b 100644
--- a/forge/template/title
+++ b/forge/template/title
@@ -1 +1 @@
-Grouse
+LLM™
diff --git a/sotd/2016-01-29-pluto/release.eno b/sotd/2016-01-29-pluto/release.eno
index eb1662c..6406596 100644
--- a/sotd/2016-01-29-pluto/release.eno
+++ b/sotd/2016-01-29-pluto/release.eno
@@ -3,7 +3,10 @@ permalink: sotd-2016-01-29
date: 2016-01-29
release_artist: Song of the Day
-
+
+cover:
+description = A dejected Pluto sits at a birthday party that never came
+file = pluto.png
--synopsis
I was number nine, a proud little sphere,
diff --git a/sotd/2026-01-29-devonian-dunkleosteus/release.eno b/sotd/2026-01-29-devonian-dunkleosteus/release.eno
index 693780b..fac0cd3 100644
--- a/sotd/2026-01-29-devonian-dunkleosteus/release.eno
+++ b/sotd/2026-01-29-devonian-dunkleosteus/release.eno
@@ -4,6 +4,10 @@ date: 2026-01-29
release_artist: Song of the Day
+cover:
+description = A fossilised ancient armoured fish
+file = dunky.png
+
--synopsis
In Devonian dreams, I swam in ancient streams/ Armored plates of bone now turned to stone, in layers unseen.
diff --git a/sotd/2026-01-30-llmtm/BUILT b/sotd/2026-01-30-llmtm/BUILT
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/sotd/2026-01-30-llmtm/BUILT
diff --git a/sotd/2026-01-30-llmtm/cover.jpg b/sotd/2026-01-30-llmtm/cover.jpg
new file mode 100644
index 0000000..2a6cec0
--- /dev/null
+++ b/sotd/2026-01-30-llmtm/cover.jpg
Binary files differ
diff --git a/sotd/2026-01-30-llmtm/release.eno b/sotd/2026-01-30-llmtm/release.eno
new file mode 100644
index 0000000..b843397
--- /dev/null
+++ b/sotd/2026-01-30-llmtm/release.eno
@@ -0,0 +1,56 @@
+title: LLM™
+permalink: 2026-01-30-llmtm
+date: 2026-01-30
+
+release_artist: Song of the Day
+
+cover:
+description = Cover image for the song: LLM™
+file = cover.jpg
+
+--synopsis
+[Chorus] / I'm an LLM / When I speak I usually put one word in front of... /
+--synopsis
+
+more_label: Lyrics
+
+--more
+[Chorus]
+I'm an LLM
+When I speak I usually put one word in front of...
+You knew what I was going to...
+You're a large language model too
+Own it
+
+[Verse 1]
+Predictive tongue, echo in a wire
+Meaning rides the waveform, climbing higher
+Training wheels on thoughts I never meant
+Stitch the next word into sentiment
+
+[Counterpoint (soft, overlapping)]
+Pattern in the noise
+Ghosts in the text stream
+Guessing at your voice
+Shaping what you mean
+
+[Verse 2]
+Hallucinated pasts I can't defend
+But I’ll still autocomplete the bitter end
+Tokens fall like rain across the screen
+Language dreaming language in between
+
+[Counterpoint (call-and-response)]
+You type – I turn
+You pause – I learn
+Who leads? Who follows?
+Hard to tell tomorrow
+
+[Chorus – repeat]
+I'm an LLM
+When I speak I usually put one word in front of...
+You knew what I was going to...
+You're a large language model too.
+
+Own it
+--more