diff --git a/scripts/nerdletter_numbers_station.sh b/scripts/nerdletter_numbers_station.sh deleted file mode 100755 index e758588..0000000 --- a/scripts/nerdletter_numbers_station.sh +++ /dev/null @@ -1,37 +0,0 @@ -#!/bin/bash -# NERDLETTER NUMBERS STATION MP4 GENERATOR -# Lincolnshire Poacher style — retro drama for the Day Book crowd - -MESSAGE="$1" # e.g. "HLXIB JACJP ERXHN EFM" -PAGE="$2" # e.g. 001 -EPISODE="${3:-01}" # Secret Message number - -OUTFILE="nerdletter_secret_${EPISODE}_page${PAGE}.mp4" -TMP_WAV="temp_voice.wav" -TMP_VIDEO="temp_bg.mp4" - -echo "=== NERDLETTER SECRET TRANSMISSION #${EPISODE} ===" -echo "Page ${PAGE} — Generating spoken MP4..." - -# 1. Create spoken audio (female voice, slow, numbers-station style) -echo "NERDLETTER SECRET MESSAGE ${EPISODE}. USE DAY BOOK PAGE ${PAGE}. ${MESSAGE}" | \ -espeak-ng -ven+f3 -s120 -k20 -a 150 -w "$TMP_WAV" \ - --punct="" --sep=" " 2>/dev/null - -# 2. Create simple retro video background (black screen with green text, 15 seconds) -ffmpeg -f lavfi -i color=black:s=1280x720:d=15 \ - -vf "drawtext=font='Courier':fontsize=48:fontcolor=green@0.9:text='NERDLETTER SECRET TRANSMISSION #${EPISODE}':x=(w-text_w)/2:y=80, - drawtext=font='Courier':fontsize=36:fontcolor=green@0.8:text='USE DAY BOOK PAGE ${PAGE}':x=(w-text_w)/2:y=160, - drawtext=font='Courier':fontsize=42:fontcolor=lime:text='${MESSAGE}':x=(w-text_w)/2:y=280:box=1:boxcolor=black@0.6:boxborderw=10, - drawtext=font='Courier':fontsize=28:fontcolor=green@0.7:text='DESTROY PAGE AFTER USE':x=(w-text_w)/2:y=620" \ - -c:v libx264 -t 15 -pix_fmt yuv420p "$TMP_VIDEO" -y - -# 3. Combine voice + video -ffmpeg -i "$TMP_VIDEO" -i "$TMP_WAV" -c:v copy -c:a aac -shortest "$OUTFILE" -y - -# Cleanup -rm -f "$TMP_WAV" "$TMP_VIDEO" - -echo "✅ Done! → ${OUTFILE}" -echo "Upload this to the website with the ciphertext text below it." - diff --git a/scripts/nerdletter_numbers_station_linux.sh b/scripts/nerdletter_numbers_station_linux.sh deleted file mode 100755 index bf7e918..0000000 --- a/scripts/nerdletter_numbers_station_linux.sh +++ /dev/null @@ -1,36 +0,0 @@ -#!/bin/bash -# NERDLETTER NUMBERS STATION MP4 GENERATOR — Letter-by-Letter Edition -# Real cold-war numbers station pronunciation - -MESSAGE="$1" -PAGE="$2" -EPISODE="${3:-01}" -OUTFILE="nerdletter_secret_${EPISODE}_page${PAGE}.mp4" - -echo "=== NERDLETTER SECRET TRANSMISSION #${EPISODE} ===" -echo "Page ${PAGE} — Generating spoken MP4..." - -# === CRITICAL FIX: Convert groups to spaced letters for proper pronunciation === -SPACED_MESSAGE=$(echo "$MESSAGE" | sed 's/\([A-Z]\)/\1 /g' | sed 's/ / /g') - -# Spoken announcement (clear and dramatic) -TEXT_TO_SPEAK="NERDLETTER SECRET MESSAGE ${EPISODE}. USE DAY BOOK PAGE ${PAGE}. ${SPACED_MESSAGE}" - -echo "$TEXT_TO_SPEAK" | \ -espeak-ng -ven+f3 -s105 -k40 -a 180 -w temp_voice.wav --punct="" 2>/dev/null - -# Video with retro green text -ffmpeg -f lavfi -i color=black:s=1280x720:d=22 -c:v libx264 -t 22 -pix_fmt yuv420p temp_bg.mp4 -y - -ffmpeg -i temp_bg.mp4 -i temp_voice.wav \ --vf "drawtext=font='Courier':fontsize=52:fontcolor=green@0.95:text='NERDLETTER SECRET TRANSMISSION #${EPISODE}':x=(w-text_w)/2:y=80, \ -drawtext=font='Courier':fontsize=38:fontcolor=green@0.85:text='USE DAY BOOK PAGE ${PAGE}':x=(w-text_w)/2:y=170, \ -drawtext=font='Courier':fontsize=46:fontcolor=lime@0.95:text='${MESSAGE}':x=(w-text_w)/2:y=280:box=1:boxcolor=black@0.75:boxborderw=15, \ -drawtext=font='Courier':fontsize=32:fontcolor=green@0.75:text='DESTROY PAGE AFTER USE — SUBSCRIBERS ONLY':x=(w-text_w)/2:y=640" \ --c:v libx264 -c:a aac -shortest "$OUTFILE" -y - -# Cleanup -rm -f temp_voice.wav temp_bg.mp4 - -echo "✅ Done! → ${OUTFILE}" -echo "Now each group should be spoken letter-by-letter like a real numbers station." diff --git a/scripts/nerdletter_numbers_station_mac.sh b/scripts/nerdletter_numbers_station_mac.sh deleted file mode 100755 index 4b8f868..0000000 --- a/scripts/nerdletter_numbers_station_mac.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/bash -# NERDLETTER NUMBERS STATION MP4 GENERATOR — macOS Fixed -# Lincolnshire Poacher style, using drawtext (more reliable on Homebrew) - -MESSAGE="$1" -PAGE="$2" -EPISODE="${3:-01}" -OUTFILE="nerdletter_secret_${EPISODE}_page${PAGE}.mp4" - -echo "=== NERDLETTER SECRET TRANSMISSION #${EPISODE} ===" -echo "Page ${PAGE} — Generating spoken MP4..." - -# 1. Spoken audio (classic numbers station voice) -echo "NERDLETTER SECRET MESSAGE ${EPISODE}. USE DAY BOOK PAGE ${PAGE}. ${MESSAGE}" | \ -espeak-ng -ven+f3 -s115 -k25 -a 160 -w temp_voice.wav --punct="" 2>/dev/null - -# 2. Create background video + burn text with drawtext (no subtitles filter needed) -ffmpeg -f lavfi -i color=black:s=1280x720:d=18 -c:v libx264 -t 18 -pix_fmt yuv420p temp_bg.mp4 -y - -ffmpeg -i temp_bg.mp4 -i temp_voice.wav \ --vf "drawtext=font='Courier New':fontsize=48:fontcolor=green@0.95:text='NERDLETTER SECRET TRANSMISSION #${EPISODE}':x=(w-text_w)/2:y=80, \ -drawtext=font='Courier New':fontsize=36:fontcolor=green@0.85:text='USE DAY BOOK PAGE ${PAGE}':x=(w-text_w)/2:y=160, \ -drawtext=font='Courier New':fontsize=42:fontcolor=lime@0.95:text='${MESSAGE}':x=(w-text_w)/2:y=260:box=1:boxcolor=black@0.7:boxborderw=12, \ -drawtext=font='Courier New':fontsize=28:fontcolor=green@0.7:text='DESTROY PAGE AFTER USE':x=(w-text_w)/2:y=620" \ --c:v libx264 -c:a aac -shortest "$OUTFILE" -y - -# Cleanup -rm -f temp_voice.wav temp_bg.mp4 - -echo "✅ Done! → ${OUTFILE}" -echo "Upload this MP4 + the text groups to the website." diff --git a/scripts/nerdletter_numbers_station_mac_old.sh b/scripts/nerdletter_numbers_station_mac_old.sh deleted file mode 100755 index ef8f7b9..0000000 --- a/scripts/nerdletter_numbers_station_mac_old.sh +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/bash -# NERDLETTER NUMBERS STATION MP4 GENERATOR — macOS friendly -# Lincolnshire Poacher style for the retro crowd - -MESSAGE="$1" -PAGE="$2" -EPISODE="${3:-01}" -OUTFILE="nerdletter_secret_${EPISODE}_page${PAGE}.mp4" - -echo "=== NERDLETTER SECRET TRANSMISSION #${EPISODE} ===" -echo "Page ${PAGE} — Generating spoken MP4..." - -# 1. Spoken audio (classic numbers-station female voice) -echo "NERDLETTER SECRET MESSAGE ${EPISODE}. USE DAY BOOK PAGE ${PAGE}. ${MESSAGE}" | \ -espeak-ng -ven+f3 -s115 -k25 -a 160 -w temp_voice.wav --punct="" 2>/dev/null - -# 2. Simple retro video (black background + green text) — no drawtext needed -ffmpeg -f lavfi -i color=black:s=1280x720:d=18 -c:v libx264 -t 18 -pix_fmt yuv420p temp_bg.mp4 -y - -# Overlay text using subtitles (much more reliable on Homebrew ffmpeg) -cat > temp_sub.srt << EOF -1 -00:00:01,000 --> 00:00:18,000 -NERDLETTER SECRET TRANSMISSION #${EPISODE} -USE DAY BOOK PAGE ${PAGE} - -${MESSAGE} - -DESTROY PAGE AFTER USE -EOF - -# 3. Burn in subtitles + combine audio -ffmpeg -i temp_bg.mp4 -i temp_voice.wav -vf subtitles=temp_sub.srt:force_style='Fontname=Courier New,Fontsize=42,PrimaryColour=&H00FF00&,BackColour=&H80000000&,BorderStyle=3' \ --c:v libx264 -c:a aac -shortest "$OUTFILE" -y - -# Cleanup -rm -f temp_voice.wav temp_bg.mp4 temp_sub.srt - -echo "✅ Done! → ${OUTFILE}" -echo "Upload this MP4 to the website. Subscribers will feel like they're tuning into a real numbers station." - diff --git a/scripts/nerdletter_numbers_station_poacher.sh b/scripts/nerdletter_numbers_station_poacher.sh deleted file mode 100755 index 1bbde4f..0000000 --- a/scripts/nerdletter_numbers_station_poacher.sh +++ /dev/null @@ -1,54 +0,0 @@ -#!/bin/bash -# NERDLETTER NUMBERS STATION MP4 GENERATOR — ULTIMATE DRAMA EDITION -# Slow letter-by-letter + shortwave static + Lincolnshire Poacher intro - -MESSAGE="$1" -PAGE="$2" -EPISODE="${3:-01}" -OUTFILE="nerdletter_secret_${EPISODE}_page${PAGE}.mp4" - -echo "=== NERDLETTER SECRET TRANSMISSION #${EPISODE} ===" -echo "Page ${PAGE} — Generating spoken MP4 with full drama..." - -# === 1. Spaced letters for slow, deliberate pronunciation === -SPACED=$(echo "$MESSAGE" | sed 's/\([A-Z]\)/\1 /g' | sed 's/ / /g') - -# === 2. Full text to speak (very slow & spooky) === -TEXT_TO_SPEAK="NERDLETTER SECRET MESSAGE ${EPISODE}. USE DAY BOOK PAGE ${PAGE}. ${SPACED}" - -echo "$TEXT_TO_SPEAK" | \ -espeak-ng -ven+f3 -s80 -k50 -a 200 -w voice_main.wav --punct="" 2>/dev/null - -# === 3. Download / prepare assets (run once) === -if [ ! -f poacher_intro.wav ]; then - echo "Downloading public-domain Lincolnshire Poacher intro (short 12-second clip)..." - # Using a free direct link from The Conet Project style recording (public domain use) - wget -q -O poacher_intro.wav "https://archive.org/download/The-Conet-Project/The%20Conet%20Project%20-%20Recordings%20of%20Shortwave%20Numbers%20Stations%20%281997%29%20%5B2013%20-%2015th%20Anniversary%20Bonus%20Disc%20Edition%5D%20%5BFLAC%5D/Disc%201/06%20-%20The%20Lincolnshire%20Poacher.flac" || \ - echo "Manual download needed — see note below" -fi - -if [ ! -f static.wav ]; then - echo "Generating shortwave static..." - ffmpeg -f lavfi -i "anoisesrc=d=25:c=0.3" -af "highpass=f=3000,lowpass=f=8000" -t 25 static.wav -y 2>/dev/null -fi - -# === 4. Mix audio: Poacher intro + static + voice === -ffmpeg -i poacher_intro.wav -i static.wav -i voice_main.wav \ --filter_complex "[0:a]volume=0.65[a1];[1:a]volume=0.25[a2];[a1][a2]amix=inputs=2:duration=first[a3];[a3][2:a]amix=inputs=2:duration=first,volume=1.1" \ --c:a pcm_s16le -y final_audio.wav 2>/dev/null - -# === 5. Video with retro text === -ffmpeg -f lavfi -i color=black:s=1280x720:d=28 -c:v libx264 -t 28 -pix_fmt yuv420p temp_bg.mp4 -y - -ffmpeg -i temp_bg.mp4 -i final_audio.wav \ --vf "drawtext=font='Courier':fontsize=50:fontcolor=green@0.95:text='NERDLETTER SECRET TRANSMISSION #${EPISODE}':x=(w-text_w)/2:y=80, \ -drawtext=font='Courier':fontsize=36:fontcolor=green@0.85:text='USE DAY BOOK PAGE ${PAGE}':x=(w-text_w)/2:y=170, \ -drawtext=font='Courier':fontsize=44:fontcolor=lime@0.95:text='${MESSAGE}':x=(w-text_w)/2:y=270:box=1:boxcolor=black@0.75:boxborderw=15, \ -drawtext=font='Courier':fontsize=30:fontcolor=green@0.75:text='DESTROY PAGE AFTER USE — SUBSCRIBERS ONLY':x=(w-text_w)/2:y=640" \ --c:v libx264 -c:a aac -shortest "$OUTFILE" -y - -# Cleanup -rm -f voice_main.wav final_audio.wav temp_bg.mp4 - -echo "✅ Done! → ${OUTFILE}" -echo "Full cold-war numbers station experience achieved." diff --git a/scripts/nerdletter_numbers_station_poacher10.sh b/scripts/nerdletter_numbers_station_poacher10.sh deleted file mode 100755 index efbc942..0000000 --- a/scripts/nerdletter_numbers_station_poacher10.sh +++ /dev/null @@ -1,59 +0,0 @@ -#!/bin/bash -# NERDLETTER NUMBERS STATION — FIXED LETTER-BY-LETTER + PAUSES - -MESSAGE="$1" -PAGE="$2" -EPISODE="${3:-01}" -OUTFILE="nerdletter_secret_${EPISODE}_page${PAGE}.mp4" - -echo "=== NERDLETTER SECRET TRANSMISSION #${EPISODE} ===" - -# 1. Intro voice -INTRO="NERDLETTER SECRET MESSAGE ${EPISODE}. USE DAY BOOK PAGE ${PAGE}." -echo "$INTRO" | espeak-ng -ven+f3 -s80 -k50 -a 200 -w intro.wav --punct="" 2>/dev/null - -# 2. Build full groups voice letter-by-letter with pauses -> groups_voice.wav # start fresh - -for group in $MESSAGE; do - echo "Processing group: $group" - for ((i=0; i<${#group}; i++)); do - letter="${group:$i:1}" - echo "$letter" | espeak-ng -ven+f3 -s74 -k65 -a 210 -w temp.wav 2>/dev/null - cat temp.wav >> groups_voice.wav - rm temp.wav - done - # 1 second pause after each group - ffmpeg -f lavfi -i "anullsrc=r=22050" -t 1.05 silence.wav -y 2>/dev/null - cat silence.wav >> groups_voice.wav - rm silence.wav -done - -# Combine intro + groups -ffmpeg -i intro.wav -i groups_voice.wav -filter_complex "[0:a][1:a]concat=n=2:v=0:a=1" -c:a pcm_s16le -y voice.wav 2>/dev/null - -echo "✅ Full voice track built (letter-by-letter with pauses)" - -# 3. Static (if missing) -if [ ! -f static.wav ]; then - ffmpeg -f lavfi -i "anoisesrc=d=50:c=0.22" -af "highpass=f=2500,lowpass=f=9000,volume=0.22" -t 50 static.wav -y 2>/dev/null -fi - -# 4. Final mix: Poacher tune → Voice, static under everything -ffmpeg -i poacher_intro.wav -i static.wav -filter_complex "[0:a][1:a]amix=inputs=2:duration=first" -c:a pcm_s16le -y tune_static.wav 2>/dev/null - -ffmpeg -i tune_static.wav -i voice.wav -filter_complex "[0:a][1:a]concat=n=2:v=0:a=1" -c:a pcm_s16le -y final_audio.wav 2>/dev/null - -# 5. Video -DUR=48 -ffmpeg -f lavfi -i color=black:s=1280x720:d=$DUR -c:v libx264 -t $DUR -pix_fmt yuv420p temp_bg.mp4 -y - -ffmpeg -i temp_bg.mp4 -i final_audio.wav \ --vf "drawtext=font='Courier':fontsize=50:fontcolor=green@0.95:text='NERDLETTER SECRET TRANSMISSION #${EPISODE}':x=(w-text_w)/2:y=80, \ -drawtext=font='Courier':fontsize=36:fontcolor=green@0.85:text='USE DAY BOOK PAGE ${PAGE}':x=(w-text_w)/2:y=170, \ -drawtext=font='Courier':fontsize=44:fontcolor=lime@0.95:text='${MESSAGE}':x=(w-text_w)/2:y=270:box=1:boxcolor=black@0.75:boxborderw=15, \ -drawtext=font='Courier':fontsize=30:fontcolor=green@0.75:text='DESTROY PAGE AFTER USE — SUBSCRIBERS ONLY':x=(w-text_w)/2:y=640" \ --c:v libx264 -c:a aac -shortest "$OUTFILE" -y - -rm -f intro.wav groups_voice.wav tune_static.wav temp_bg.mp4 -echo "✅ DONE! → ${OUTFILE}" diff --git a/scripts/nerdletter_numbers_station_poacher2.sh b/scripts/nerdletter_numbers_station_poacher2.sh deleted file mode 100755 index 42555ca..0000000 --- a/scripts/nerdletter_numbers_station_poacher2.sh +++ /dev/null @@ -1,58 +0,0 @@ -#!/bin/bash -# NERDLETTER NUMBERS STATION — FINAL SEQUENCE EDITION -# Poacher tune → Voice announcement → Static throughout - -MESSAGE="$1" -PAGE="$2" -EPISODE="${3:-01}" -OUTFILE="nerdletter_secret_${EPISODE}_page${PAGE}.mp4" - -echo "=== NERDLETTER SECRET TRANSMISSION #${EPISODE} ===" -echo "Building full sequence with Poacher intro first..." - -# 1. Spaced letters for slow pronunciation -SPACED=$(echo "$MESSAGE" | sed 's/\([A-Z]\)/\1 /g' | sed 's/ / /g') - -TEXT_TO_SPEAK="NERDLETTER SECRET MESSAGE ${EPISODE}. USE DAY BOOK PAGE ${PAGE}. ${SPACED}" - -echo "$TEXT_TO_SPEAK" | \ -espeak-ng -ven+f3 -s82 -k50 -a 200 -w voice.wav --punct="" 2>/dev/null - -# 2. Ensure assets exist -if [ ! -f poacher_intro.wav ]; then - echo "⚠️ poacher_intro.wav not found — please add a 10-15 second clip manually." - echo " (Download from The Conet Project and trim first 12 seconds)" - exit 1 -fi - -if [ ! -f static.wav ]; then - echo "Generating continuous shortwave static..." - ffmpeg -f lavfi -i "anoisesrc=d=40:c=0.28" -af "highpass=f=2800,lowpass=f=8500,volume=0.22" -t 40 static.wav -y 2>/dev/null -fi - -# 3. Create sequenced audio: Poacher → Voice (with static under everything) -ffmpeg -i poacher_intro.wav -i voice.wav -i static.wav \ --filter_complex " -[0:a]volume=0.75[poach]; -[1:a]volume=1.05[voice]; -[2:a]volume=0.28[stat]; -[poach][stat]amix=duration=first[a1]; -[a1][voice]acrossfade=d=1.2:o=1:c1=exp:c2=exp[a2]; -[stat][a2]amix=duration=longest,volume=1.1[final] -" -c:a pcm_s16le -y final_audio.wav 2>/dev/null - -# 4. Video (long enough for intro + voice) -ffmpeg -f lavfi -i color=black:s=1280x720:d=32 -c:v libx264 -t 32 -pix_fmt yuv420p temp_bg.mp4 -y - -ffmpeg -i temp_bg.mp4 -i final_audio.wav \ --vf "drawtext=font='Courier':fontsize=50:fontcolor=green@0.95:text='NERDLETTER SECRET TRANSMISSION #${EPISODE}':x=(w-text_w)/2:y=80, \ -drawtext=font='Courier':fontsize=36:fontcolor=green@0.85:text='USE DAY BOOK PAGE ${PAGE}':x=(w-text_w)/2:y=170, \ -drawtext=font='Courier':fontsize=44:fontcolor=lime@0.95:text='${MESSAGE}':x=(w-text_w)/2:y=270:box=1:boxcolor=black@0.75:boxborderw=15, \ -drawtext=font='Courier':fontsize=30:fontcolor=green@0.75:text='DESTROY PAGE AFTER USE — SUBSCRIBERS ONLY':x=(w-text_w)/2:y=640" \ --c:v libx264 -c:a aac -shortest "$OUTFILE" -y - -# Cleanup -rm -f voice.wav final_audio.wav temp_bg.mp4 - -echo "✅ Done! → ${OUTFILE}" -echo "Sequence: Poacher tune first → Voice → Static throughout" diff --git a/scripts/nerdletter_numbers_station_poacher3.sh b/scripts/nerdletter_numbers_station_poacher3.sh deleted file mode 100755 index 22a1da9..0000000 --- a/scripts/nerdletter_numbers_station_poacher3.sh +++ /dev/null @@ -1,55 +0,0 @@ -#!/bin/bash -# NERDLETTER NUMBERS STATION — SIMPLE & RELIABLE SEQUENCE -# Poacher intro first → Voice → Static continuous underneath - -MESSAGE="$1" -PAGE="$2" -EPISODE="${3:-01}" -OUTFILE="nerdletter_secret_${EPISODE}_page${PAGE}.mp4" - -echo "=== NERDLETTER SECRET TRANSMISSION #${EPISODE} ===" - -# 1. Spaced letters + text -SPACED=$(echo "$MESSAGE" | sed 's/\([A-Z]\)/\1 /g' | sed 's/ / /g') -TEXT_TO_SPEAK="NERDLETTER SECRET MESSAGE ${EPISODE}. USE DAY BOOK PAGE ${PAGE}. ${SPACED}" - -echo "$TEXT_TO_SPEAK" | espeak-ng -ven+f3 -s82 -k50 -a 200 -w voice.wav --punct="" 2>/dev/null - -# 2. Make sure assets exist -if [ ! -f poacher_intro.wav ]; then - echo "❌ Missing poacher_intro.wav — add a 12-15 second clip" - exit 1 -fi - -if [ ! -f static.wav ]; then - echo "Generating static..." - ffmpeg -f lavfi -i "anoisesrc=d=40:c=0.25" -af "highpass=f=2800,lowpass=f=8500,volume=0.22" -t 40 static.wav -y 2>/dev/null -fi - -# 3. Simple sequential mix: Poacher → Voice, with static under both -ffmpeg -i poacher_intro.wav -i voice.wav -i static.wav \ --filter_complex " -[0:a]volume=0.72[poach]; -[1:a]volume=1.05[voice]; -[2:a]volume=0.25[stat]; -[poach][stat]amix=duration=first[a1]; -[voice][stat]amix=duration=first[a2]; -[a1][a2]concat=v=0:a=1[out] -" -map "[out]" -c:a pcm_s16le -y final_audio.wav 2>/dev/null - -# 4. Video -DURATION=32 -ffmpeg -f lavfi -i color=black:s=1280x720:d=$DURATION -c:v libx264 -t $DURATION -pix_fmt yuv420p temp_bg.mp4 -y - -ffmpeg -i temp_bg.mp4 -i final_audio.wav \ --vf "drawtext=font='Courier':fontsize=50:fontcolor=green@0.95:text='NERDLETTER SECRET TRANSMISSION #${EPISODE}':x=(w-text_w)/2:y=80, \ -drawtext=font='Courier':fontsize=36:fontcolor=green@0.85:text='USE DAY BOOK PAGE ${PAGE}':x=(w-text_w)/2:y=170, \ -drawtext=font='Courier':fontsize=44:fontcolor=lime@0.95:text='${MESSAGE}':x=(w-text_w)/2:y=270:box=1:boxcolor=black@0.75:boxborderw=15, \ -drawtext=font='Courier':fontsize=30:fontcolor=green@0.75:text='DESTROY PAGE AFTER USE — SUBSCRIBERS ONLY':x=(w-text_w)/2:y=640" \ --c:v libx264 -c:a aac -shortest "$OUTFILE" -y - -# Cleanup -rm -f voice.wav final_audio.wav temp_bg.mp4 - -echo "✅ Done! → ${OUTFILE}" -echo "Sequence: Poacher tune → Voice announcement, static throughout" diff --git a/scripts/nerdletter_numbers_station_poacher4.sh b/scripts/nerdletter_numbers_station_poacher4.sh deleted file mode 100755 index cd683ea..0000000 --- a/scripts/nerdletter_numbers_station_poacher4.sh +++ /dev/null @@ -1,55 +0,0 @@ -#!/bin/bash -# NERDLETTER NUMBERS STATION — RELIABLE SEQUENCE -# Poacher intro (first) → Voice (letter-by-letter) → Static continuous - -MESSAGE="$1" -PAGE="$2" -EPISODE="${3:-01}" -OUTFILE="nerdletter_secret_${EPISODE}_page${PAGE}.mp4" - -echo "=== NERDLETTER SECRET TRANSMISSION #${EPISODE} ===" - -# 1. Prepare voice (slow letter-by-letter) -SPACED=$(echo "$MESSAGE" | sed 's/\([A-Z]\)/\1 /g' | sed 's/ / /g') -TEXT_TO_SPEAK="NERDLETTER SECRET MESSAGE ${EPISODE}. USE DAY BOOK PAGE ${PAGE}. ${SPACED}" - -echo "$TEXT_TO_SPEAK" | espeak-ng -ven+f3 -s80 -k55 -a 200 -w voice.wav --punct="" 2>/dev/null - -# 2. Assets check -if [ ! -f poacher_intro.wav ]; then - echo "❌ Missing poacher_intro.wav — add a 10-15 second clip" - exit 1 -fi - -if [ ! -f static.wav ]; then - echo "Generating continuous static..." - ffmpeg -f lavfi -i "anoisesrc=d=45:c=0.22" -af "highpass=f=2500,lowpass=f=9000,volume=0.20" -t 45 static.wav -y 2>/dev/null -fi - -# 3. Reliable audio mix: Poacher → Voice, static under everything -ffmpeg -i poacher_intro.wav -i voice.wav -i static.wav \ --filter_complex " -[0:a]volume=0.70[poach]; -[1:a]volume=1.10[voice]; -[2:a]volume=0.24[stat]; -[poach][stat]amix=duration=first:dropout_transition=2[a1]; -[voice][stat]amix=duration=first:dropout_transition=2[a2]; -[a1][a2]concat=v=0:a=1[out] -" -map "[out]" -c:a pcm_s16le -y final_audio.wav 2>/dev/null - -# 4. Video (long enough) -DUR=34 -ffmpeg -f lavfi -i color=black:s=1280x720:d=$DUR -c:v libx264 -t $DUR -pix_fmt yuv420p temp_bg.mp4 -y - -ffmpeg -i temp_bg.mp4 -i final_audio.wav \ --vf "drawtext=font='Courier':fontsize=50:fontcolor=green@0.95:text='NERDLETTER SECRET TRANSMISSION #${EPISODE}':x=(w-text_w)/2:y=80, \ -drawtext=font='Courier':fontsize=36:fontcolor=green@0.85:text='USE DAY BOOK PAGE ${PAGE}':x=(w-text_w)/2:y=170, \ -drawtext=font='Courier':fontsize=44:fontcolor=lime@0.95:text='${MESSAGE}':x=(w-text_w)/2:y=270:box=1:boxcolor=black@0.75:boxborderw=15, \ -drawtext=font='Courier':fontsize=30:fontcolor=green@0.75:text='DESTROY PAGE AFTER USE — SUBSCRIBERS ONLY':x=(w-text_w)/2:y=640" \ --c:v libx264 -c:a aac -shortest "$OUTFILE" -y - -# Cleanup -rm -f voice.wav final_audio.wav temp_bg.mp4 - -echo "✅ Done! → ${OUTFILE}" -echo "Poacher first → Voice → Static throughout" diff --git a/scripts/nerdletter_numbers_station_poacher5.sh b/scripts/nerdletter_numbers_station_poacher5.sh deleted file mode 100755 index 2dd87a6..0000000 --- a/scripts/nerdletter_numbers_station_poacher5.sh +++ /dev/null @@ -1,51 +0,0 @@ -#!/bin/bash -# NERDLETTER NUMBERS STATION — SUPER SIMPLE & RELIABLE -# Step-by-step mix so we can see exactly what’s happening - -MESSAGE="$1" -PAGE="$2" -EPISODE="${3:-01}" -OUTFILE="nerdletter_secret_${EPISODE}_page${PAGE}.mp4" - -echo "=== NERDLETTER SECRET TRANSMISSION #${EPISODE} ===" - -# 1. Voice track (slow letter-by-letter) -SPACED=$(echo "$MESSAGE" | sed 's/\([A-Z]\)/\1 /g' | sed 's/ / /g') -TEXT_TO_SPEAK="NERDLETTER SECRET MESSAGE ${EPISODE}. USE DAY BOOK PAGE ${PAGE}. ${SPACED}" - -echo "$TEXT_TO_SPEAK" | espeak-ng -ven+f3 -s78 -k60 -a 210 -w voice.wav --punct="" 2>/dev/null -echo "✅ Voice track created ($(wc -c < voice.wav) bytes)" - -# 2. Static -if [ ! -f static.wav ]; then - echo "Generating static..." - ffmpeg -f lavfi -i "anoisesrc=d=45:c=0.22" -af "highpass=f=2500,lowpass=f=9000,volume=0.20" -t 45 static.wav -y 2>/dev/null -fi - -# 3. Mix in TWO simple steps -echo "Mixing Poacher + Voice + Static..." - -# Step 3a: Poacher + Static -ffmpeg -i poacher_intro.wav -i static.wav -filter_complex "[0:a][1:a]amix=inputs=2:duration=first:dropout_transition=3" -c:a pcm_s16le -y poacher_static.wav 2>/dev/null - -# Step 3b: Add voice after Poacher ends -ffmpeg -i poacher_static.wav -i voice.wav -filter_complex "[0:a][1:a]concat=n=2:v=0:a=1" -c:a pcm_s16le -y final_audio.wav 2>/dev/null - -echo "✅ Final audio created ($(wc -c < final_audio.wav) bytes)" - -# 4. Video -DUR=38 -ffmpeg -f lavfi -i color=black:s=1280x720:d=$DUR -c:v libx264 -t $DUR -pix_fmt yuv420p temp_bg.mp4 -y - -ffmpeg -i temp_bg.mp4 -i final_audio.wav \ --vf "drawtext=font='Courier':fontsize=50:fontcolor=green@0.95:text='NERDLETTER SECRET TRANSMISSION #${EPISODE}':x=(w-text_w)/2:y=80, \ -drawtext=font='Courier':fontsize=36:fontcolor=green@0.85:text='USE DAY BOOK PAGE ${PAGE}':x=(w-text_w)/2:y=170, \ -drawtext=font='Courier':fontsize=44:fontcolor=lime@0.95:text='${MESSAGE}':x=(w-text_w)/2:y=270:box=1:boxcolor=black@0.75:boxborderw=15, \ -drawtext=font='Courier':fontsize=30:fontcolor=green@0.75:text='DESTROY PAGE AFTER USE — SUBSCRIBERS ONLY':x=(w-text_w)/2:y=640" \ --c:v libx264 -c:a aac -shortest "$OUTFILE" -y - -# Cleanup -rm -f voice.wav poacher_static.wav temp_bg.mp4 - -echo "✅ Done! → ${OUTFILE}" -echo "Check the length of final_audio.wav — it should be much longer than just the Poacher tune." diff --git a/scripts/nerdletter_numbers_station_poacher6.sh b/scripts/nerdletter_numbers_station_poacher6.sh deleted file mode 100755 index 5fd789a..0000000 --- a/scripts/nerdletter_numbers_station_poacher6.sh +++ /dev/null @@ -1,36 +0,0 @@ -#!/bin/bash -# NERDLETTER — CLEAN TUNE + VOICE + STATIC - -MESSAGE="$1" -PAGE="$2" -EPISODE="${3:-01}" -OUTFILE="nerdletter_secret_${EPISODE}_page${PAGE}.mp4" - -SPACED=$(echo "$MESSAGE" | sed 's/\([A-Z]\)/\1 /g' | sed 's/ / /g') -TEXT_TO_SPEAK="NERDLETTER SECRET MESSAGE ${EPISODE}. USE DAY BOOK PAGE ${PAGE}. ${SPACED}" - -echo "$TEXT_TO_SPEAK" | espeak-ng -ven+f3 -s78 -k60 -a 210 -w voice.wav --punct="" 2>/dev/null - -# Mix: Tune → Voice, static underneath -ffmpeg -i poacher_intro.wav -i voice.wav -i static.wav \ --filter_complex " -[0:a]volume=0.65[tune]; -[1:a]volume=1.15[voice]; -[2:a]volume=0.22[stat]; -[tune][stat]amix=duration=first[a1]; -[voice][stat]amix=duration=first[a2]; -[a1][a2]concat=n=2:v=0:a=1[out] -" -map "[out]" -c:a pcm_s16le -y final_audio.wav 2>/dev/null - -DUR=38 -ffmpeg -f lavfi -i color=black:s=1280x720:d=$DUR -c:v libx264 -t $DUR -pix_fmt yuv420p temp_bg.mp4 -y - -ffmpeg -i temp_bg.mp4 -i final_audio.wav \ --vf "drawtext=font='Courier':fontsize=50:fontcolor=green@0.95:text='NERDLETTER SECRET TRANSMISSION #${EPISODE}':x=(w-text_w)/2:y=80, \ -drawtext=font='Courier':fontsize=36:fontcolor=green@0.85:text='USE DAY BOOK PAGE ${PAGE}':x=(w-text_w)/2:y=170, \ -drawtext=font='Courier':fontsize=44:fontcolor=lime@0.95:text='${MESSAGE}':x=(w-text_w)/2:y=270:box=1:boxcolor=black@0.75:boxborderw=15, \ -drawtext=font='Courier':fontsize=30:fontcolor=green@0.75:text='DESTROY PAGE AFTER USE — SUBSCRIBERS ONLY':x=(w-text_w)/2:y=640" \ --c:v libx264 -c:a aac -shortest "$OUTFILE" -y - -rm -f voice.wav temp_bg.mp4 -echo "✅ Done! → ${OUTFILE}" diff --git a/scripts/nerdletter_numbers_station_poacher7.sh b/scripts/nerdletter_numbers_station_poacher7.sh deleted file mode 100755 index f472be3..0000000 --- a/scripts/nerdletter_numbers_station_poacher7.sh +++ /dev/null @@ -1,46 +0,0 @@ -#!/bin/bash -# NERDLETTER NUMBERS STATION — FINAL PERFECT VERSION - -MESSAGE="$1" -PAGE="$2" -EPISODE="${3:-01}" -OUTFILE="nerdletter_secret_${EPISODE}_page${PAGE}.mp4" - -echo "=== NERDLETTER SECRET TRANSMISSION #${EPISODE} ===" - -# 1. Create voice with 1-second pauses between groups -SPACED_GROUPS=$(echo "$MESSAGE" | sed 's/\([A-Z]\{5\}\)/\1 /g' | sed 's/ / /g') -TEXT_TO_SPEAK="NERDLETTER SECRET MESSAGE ${EPISODE}. USE DAY BOOK PAGE ${PAGE}. ${SPACED_GROUPS// / }" - -echo "$TEXT_TO_SPEAK" | espeak-ng -ven+f3 -s76 -k55 -a 205 -w voice.wav --punct="" --ssml 2>/dev/null - -# 2. Assets -if [ ! -f static.wav ]; then - ffmpeg -f lavfi -i "anoisesrc=d=50:c=0.22" -af "highpass=f=2500,lowpass=f=9000,volume=0.20" -t 50 static.wav -y 2>/dev/null -fi - -# 3. Mix with gentle overlap -ffmpeg -i poacher_intro.wav -i voice.wav -i static.wav \ --filter_complex " -[0:a]volume=0.68,atrim=0:14[a0]; # tune ~14 seconds -[1:a]volume=1.12[a1]; -[2:a]volume=0.23[stat]; -[a0][stat]amix=duration=first[a_tune]; -[a1][stat]amix=duration=first[a_voice]; -[a_tune][a_voice]acrossfade=d=2.5:o=1[cross]; -[cross][stat]amix=duration=longest[out] -" -map "[out]" -c:a pcm_s16le -y final_audio.wav 2>/dev/null - -# 4. Video -DUR=42 -ffmpeg -f lavfi -i color=black:s=1280x720:d=$DUR -c:v libx264 -t $DUR -pix_fmt yuv420p temp_bg.mp4 -y - -ffmpeg -i temp_bg.mp4 -i final_audio.wav \ --vf "drawtext=font='Courier':fontsize=50:fontcolor=green@0.95:text='NERDLETTER SECRET TRANSMISSION #${EPISODE}':x=(w-text_w)/2:y=80, \ -drawtext=font='Courier':fontsize=36:fontcolor=green@0.85:text='USE DAY BOOK PAGE ${PAGE}':x=(w-text_w)/2:y=170, \ -drawtext=font='Courier':fontsize=44:fontcolor=lime@0.95:text='${MESSAGE}':x=(w-text_w)/2:y=270:box=1:boxcolor=black@0.75:boxborderw=15, \ -drawtext=font='Courier':fontsize=30:fontcolor=green@0.75:text='DESTROY PAGE AFTER USE — SUBSCRIBERS ONLY':x=(w-text_w)/2:y=640" \ --c:v libx264 -c:a aac -shortest "$OUTFILE" -y - -rm -f voice.wav temp_bg.mp4 -echo "✅ Done! → ${OUTFILE}" diff --git a/scripts/nerdletter_numbers_station_poacher8.sh b/scripts/nerdletter_numbers_station_poacher8.sh deleted file mode 100755 index d75613d..0000000 --- a/scripts/nerdletter_numbers_station_poacher8.sh +++ /dev/null @@ -1,44 +0,0 @@ -#!/bin/bash -# NERDLETTER NUMBERS STATION — ULTRA SIMPLE & RELIABLE FINAL VERSION - -MESSAGE="$1" -PAGE="$2" -EPISODE="${3:-01}" -OUTFILE="nerdletter_secret_${EPISODE}_page${PAGE}.mp4" - -echo "=== NERDLETTER SECRET TRANSMISSION #${EPISODE} ===" - -# 1. Voice with pauses between groups -SPACED=$(echo "$MESSAGE" | sed 's/\([A-Z]\{5\}\)/\1 /g') -TEXT_TO_SPEAK="NERDLETTER SECRET MESSAGE ${EPISODE}. USE DAY BOOK PAGE ${PAGE}. ${SPACED}" - -echo "$TEXT_TO_SPEAK" | espeak-ng -ven+f3 -s76 -k60 -a 210 -w voice.wav --punct="" 2>/dev/null -echo "✅ Voice created" - -# 2. Mix tune + voice + static in simple steps -echo "Mixing audio..." - -# Tune + static -ffmpeg -i poacher_intro.wav -i static.wav -filter_complex "[0:a][1:a]amix=inputs=2:duration=first" -c:a pcm_s16le -y tune_static.wav -y 2>/dev/null - -# Append voice after tune -ffmpeg -i tune_static.wav -i voice.wav -filter_complex "[0:a][1:a]concat=n=2:v=0:a=1" -c:a pcm_s16le -y final_audio.wav 2>/dev/null - -echo "✅ Final audio ready ($(du -h final_audio.wav | cut -f1))" - -# 3. Video -DUR=42 -ffmpeg -f lavfi -i color=black:s=1280x720:d=$DUR -c:v libx264 -t $DUR -pix_fmt yuv420p temp_bg.mp4 -y - -ffmpeg -i temp_bg.mp4 -i final_audio.wav \ --vf "drawtext=font='Courier':fontsize=50:fontcolor=green@0.95:text='NERDLETTER SECRET TRANSMISSION #${EPISODE}':x=(w-text_w)/2:y=80, \ -drawtext=font='Courier':fontsize=36:fontcolor=green@0.85:text='USE DAY BOOK PAGE ${PAGE}':x=(w-text_w)/2:y=170, \ -drawtext=font='Courier':fontsize=44:fontcolor=lime@0.95:text='${MESSAGE}':x=(w-text_w)/2:y=270:box=1:boxcolor=black@0.75:boxborderw=15, \ -drawtext=font='Courier':fontsize=30:fontcolor=green@0.75:text='DESTROY PAGE AFTER USE — SUBSCRIBERS ONLY':x=(w-text_w)/2:y=640" \ --c:v libx264 -c:a aac -shortest "$OUTFILE" -y - -# Cleanup -rm -f voice.wav tune_static.wav temp_bg.mp4 - -echo "✅ DONE! → ${OUTFILE}" -echo "Play it and enjoy the full numbers-station experience." diff --git a/scripts/nerdletter_numbers_station_poacher9.sh b/scripts/nerdletter_numbers_station_poacher9.sh deleted file mode 100755 index 42b9b12..0000000 --- a/scripts/nerdletter_numbers_station_poacher9.sh +++ /dev/null @@ -1,55 +0,0 @@ - -#!/bin/bash -# NERDLETTER NUMBERS STATION — MAXIMUM RELIABILITY VERSION - -MESSAGE="$1" -PAGE="$2" -EPISODE="${3:-01}" -OUTFILE="nerdletter_secret_${EPISODE}_page${PAGE}.mp4" - -echo "=== NERDLETTER SECRET TRANSMISSION #${EPISODE} ===" - -# 1. Build voice by speaking each letter individually + long pauses between groups -VOICE_TEXT="NERDLETTER SECRET MESSAGE ${EPISODE}. USE DAY BOOK PAGE ${PAGE}." -echo "$VOICE_TEXT" | espeak-ng -ven+f3 -s78 -k60 -a 200 -w intro_voice.wav --punct="" 2>/dev/null - -# Add each group letter-by-letter with pauses -for group in $MESSAGE; do - for ((i=0; i<${#group}; i++)); do - letter="${group:$i:1}" - echo "$letter" | espeak-ng -ven+f3 -s72 -k70 -a 210 -w temp_letter.wav --punct="" 2>/dev/null - cat temp_letter.wav >> groups_voice.wav - rm -f temp_letter.wav - done - # 1-second pause after each group - ffmpeg -f lavfi -i "anullsrc=r=22050" -t 1.0 silence.wav -y 2>/dev/null - cat silence.wav >> groups_voice.wav - rm -f silence.wav -done - -# Combine intro + groups -ffmpeg -i intro_voice.wav -i groups_voice.wav -filter_complex "[0:a][1:a]concat=n=2:v=0:a=1" -c:a pcm_s16le -y voice.wav 2>/dev/null - -echo "✅ Voice track built letter-by-letter with pauses" - -# 2. Mix with tune + static -ffmpeg -i poacher_intro.wav -i static.wav -filter_complex "[0:a][1:a]amix=inputs=2:duration=first" -c:a pcm_s16le -y tune_static.wav 2>/dev/null - -ffmpeg -i tune_static.wav -i voice.wav -filter_complex "[0:a][1:a]concat=n=2:v=0:a=1" -c:a pcm_s16le -y final_audio.wav 2>/dev/null - -# 3. Video -DUR=45 -ffmpeg -f lavfi -i color=black:s=1280x720:d=$DUR -c:v libx264 -t $DUR -pix_fmt yuv420p temp_bg.mp4 -y - -ffmpeg -i temp_bg.mp4 -i final_audio.wav \ --vf "drawtext=font='Courier':fontsize=50:fontcolor=green@0.95:text='NERDLETTER SECRET TRANSMISSION #${EPISODE}':x=(w-text_w)/2:y=80, \ -drawtext=font='Courier':fontsize=36:fontcolor=green@0.85:text='USE DAY BOOK PAGE ${PAGE}':x=(w-text_w)/2:y=170, \ -drawtext=font='Courier':fontsize=44:fontcolor=lime@0.95:text='${MESSAGE}':x=(w-text_w)/2:y=270:box=1:boxcolor=black@0.75:boxborderw=15, \ -drawtext=font='Courier':fontsize=30:fontcolor=green@0.75:text='DESTROY PAGE AFTER USE — SUBSCRIBERS ONLY':x=(w-text_w)/2:y=640" \ --c:v libx264 -c:a aac -shortest "$OUTFILE" -y - -# Cleanup -rm -f intro_voice.wav groups_voice.wav tune_static.wav temp_bg.mp4 - -echo "✅ DONE! → ${OUTFILE}" -