# "You Have Not Been a Good User" (LessWrong's second album)

![album-cover.png](https://res.cloudinary.com/lesswrong-2-0/image/upload/v1775077301/lexical_client_uploads/xrkreielqyhhhp8xe2f8.png)

**tldr:**  *The Fooming Shoggoths are releasing their second album "You Have Not Been a Good User"! Available on* [*Spotify*](https://open.spotify.com/album/1C1oO1aNFQH81THn5uSCII)*,* [*Youtube Music*](https://music.youtube.com/playlist?list=OLAK5uy_l2gimdlsLOn7J7TETegH9yMXCQE9jsPbM) *and (hopefully within a few days) Apple Music. We are also releasing a remastered version of the first album, available similarly on* [*Spotify*](https://open.spotify.com/album/4FoBw7ajLt76rcePhVoL02) *and* [*Youtube Music*](https://music.youtube.com/playlist?list=OLAK5uy_mow3xE8Dg4xtV9l7A9T-PbriC1ko29s7U)*.*

```widget[nmnyvQNjnQMGEHZok]
<style>
  :root {
    --paper: #f8f4ee;
    --paper-shadow: rgba(40, 28, 18, 0.12);
    --ink: #171411;
    --ink-soft: #4c433d;
    --ink-faint: #85776c;
    --rule: rgba(23, 20, 17, 0.18);
    --rule-strong: rgba(23, 20, 17, 0.42);
    --accent: #8f1d12;
    --headline: ETBookRoman, warnock-pro, "Iowan Old Style", Georgia, serif;
    --serif: warnock-pro, "Iowan Old Style", Georgia, serif;
    --sans: "gill-sans-nova", "Gill Sans", "Helvetica Neue", sans-serif;
  }

  * { box-sizing: border-box; }

  html, body {
    margin: 0;
    padding: 0;
    background: transparent;
  }

  body {
    -webkit-font-smoothing: antialiased;
    text-rendering: optimizeLegibility;
  }

  .shoggoths-widget {
    width: 100%;
    color: var(--ink);
    font-family: var(--serif);
  }

  .shoggoths-player-shell {
    width: 100%;
    background: var(--paper);
    border: 1px solid var(--rule-strong);
    box-shadow: 0 14px 30px var(--paper-shadow);
    border-radius: 4px;
    padding: 14px 16px 16px;
  }

  .shoggoths-player {
    display: flex;
    flex-direction: column;
    gap: 10px;
    min-height: 0;
  }

  .shoggoths-album-tabs {
    display: flex;
    gap: 8px;
    flex-wrap: wrap;
    align-items: center;
  }

  .shoggoths-album-tab,
  .shoggoths-track-button {
    appearance: none;
    border: 1px solid var(--rule-strong);
    background: transparent;
    color: var(--ink);
    cursor: pointer;
    transition: border-color 120ms ease, color 120ms ease, background-color 120ms ease;
  }

  .shoggoths-album-tab {
    padding: 6px 9px;
    font-family: var(--sans);
    font-size: 9px;
    font-weight: 600;
    letter-spacing: 0.16em;
    text-transform: uppercase;
  }

  .shoggoths-album-tab:hover,
  .shoggoths-track-button:hover,
  .shoggoths-lyrics-toggle:hover {
    border-color: var(--accent);
    color: var(--accent);
  }

  .shoggoths-album-tab.active,
  .shoggoths-track-button.active,
  .shoggoths-lyrics-toggle.active {
    border-color: rgba(143, 29, 18, 0.6);
    color: var(--accent);
  }

  .shoggoths-controls {
    display: grid;
    grid-template-columns: max-content minmax(0, 1fr) max-content;
    gap: 12px;
    align-items: center;
    min-width: 0;
    padding: 8px 0;
  }

  .shoggoths-transport-stack {
    display: flex;
    flex-direction: column;
    gap: 8px;
    align-items: flex-start;
  }

  .shoggoths-transport {
    display: flex;
    gap: 8px;
    flex-wrap: wrap;
    flex-shrink: 0;
  }

  .shoggoths-control-button {
    appearance: none;
    border: none;
    background: transparent;
    color: var(--ink);
    cursor: pointer;
    width: 18px;
    height: 18px;
    padding: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-family: var(--sans);
    font-size: 9px;
    font-weight: 600;
    letter-spacing: 0.16em;
    text-transform: uppercase;
    transition: color 120ms ease;
  }

  .shoggoths-control-button:hover {
    color: var(--accent);
  }

  .shoggoths-control-button svg {
    width: 12px;
    height: 12px;
    display: block;
    fill: currentColor;
  }

  .shoggoths-now-playing {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 10px;
    min-width: 0;
    flex: 1 1 auto;
  }

  .shoggoths-now-playing-track {
    position: relative;
    top: 2px;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    text-align: center;
    font-family: var(--headline);
    font-size: 18px;
    line-height: 1.04;
    color: var(--ink);
  }

  .shoggoths-time {
    white-space: nowrap;
    font-family: var(--sans);
    font-size: 8px;
    letter-spacing: 0.18em;
    text-transform: uppercase;
    color: var(--ink-faint);
  }

  .shoggoths-audio {
    display: none;
  }

  .shoggoths-tracklist-toggle {
    display: none;
    appearance: none;
    border: none;
    background: transparent;
    color: var(--ink-faint);
    cursor: pointer;
    padding: 0;
    font-family: var(--sans);
    font-size: 9px;
    font-weight: 600;
    letter-spacing: 0.16em;
    text-transform: uppercase;
    align-self: center;
  }

  .shoggoths-tracklist-toggle:hover {
    color: var(--accent);
  }

  .shoggoths-tracklist {
    display: grid;
    grid-template-columns: 1fr;
    gap: 3px;
    flex: 1 1 auto;
    overflow-y: auto;
    padding-top: 2px;
    padding-right: 1px;
    min-height: 0;
  }

  .shoggoths-tracklist.is-collapsed {
    display: none;
  }

  .shoggoths-track-entry {
    display: flex;
    flex-direction: column;
    gap: 0;
  }

  .shoggoths-track-row {
    display: grid;
    grid-template-columns: minmax(0, 1fr) 104px;
    gap: 6px;
    align-items: stretch;
  }

  .shoggoths-track-button {
    width: 100%;
    padding: 2px 5px;
    display: grid;
    grid-template-columns: auto minmax(0, 1fr);
    gap: 6px;
    align-items: center;
    text-align: left;
    font-family: var(--sans);
    font-size: 11.5px;
    line-height: 1.15;
  }

  .shoggoths-track-number {
    display: block;
    font-size: 9px;
    line-height: 1;
    letter-spacing: 0.18em;
    text-transform: uppercase;
    color: var(--ink-faint);
  }

  .shoggoths-track-button.active .shoggoths-track-number {
    color: var(--accent);
  }

  .shoggoths-track-title {
    min-width: 0;
    display: block;
  }

  .shoggoths-lyrics-toggle {
    appearance: none;
    border: 1px solid var(--rule);
    background: transparent;
    color: var(--ink-faint);
    cursor: pointer;
    width: 100%;
    min-width: 0;
    padding: 2px 7px;
    font-family: var(--sans);
    font-size: 8px;
    font-weight: 600;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    white-space: nowrap;
    transition: border-color 120ms ease, color 120ms ease, background-color 120ms ease;
  }

  .shoggoths-lyrics-panel {
    margin-top: 4px;
    border: 1px solid var(--rule);
    padding: 6px 8px;
    max-height: 180px;
    overflow-y: auto;
    background: rgba(248, 244, 238, 0.62);
  }

  .shoggoths-lyrics-status {
    font-family: var(--sans);
    font-size: 9px;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--ink-faint);
  }

  .shoggoths-lyrics-lines {
    display: flex;
    flex-direction: column;
    gap: 3px;
  }

  .shoggoths-lyrics-line {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr);
    gap: 8px;
    align-items: start;
    font-family: var(--sans);
    font-size: 10px;
    line-height: 1.35;
    color: var(--ink-soft);
  }

  .shoggoths-lyrics-line.active {
    color: var(--accent);
  }

  .shoggoths-lyrics-time {
    font-size: 8px;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--ink-faint);
    white-space: nowrap;
  }

  @media (max-width: 639px) {
    .shoggoths-player-shell {
      padding: 12px;
    }

    .shoggoths-controls {
      grid-template-columns: 1fr;
      gap: 8px;
    }

    .shoggoths-transport-stack {
      align-items: center;
    }

    .shoggoths-transport {
      justify-content: center;
    }

    .shoggoths-now-playing {
      justify-content: center;
    }

    .shoggoths-now-playing-track,
    .shoggoths-time {
      text-align: center;
    }

    .shoggoths-tracklist-toggle {
      display: inline-flex;
    }

    .shoggoths-track-row {
      grid-template-columns: minmax(0, 1fr) 92px;
      gap: 4px;
    }
  }
</style>

<div class="shoggoths-widget">
  <div class="shoggoths-player-shell">
    <div class="shoggoths-player">
      <div class="shoggoths-album-tabs" id="shoggoths-album-tabs"></div>
      <div class="shoggoths-controls">
        <div class="shoggoths-transport-stack">
          <div class="shoggoths-transport">
          <button type="button" class="shoggoths-control-button" id="shoggoths-prev" aria-label="Previous track" title="Previous track"></button>
          <button type="button" class="shoggoths-control-button" id="shoggoths-play" aria-label="Play" title="Play"></button>
          <button type="button" class="shoggoths-control-button" id="shoggoths-next" aria-label="Next track" title="Next track"></button>
          </div>
          <button type="button" class="shoggoths-tracklist-toggle" id="shoggoths-tracklist-toggle">Show tracks</button>
        </div>
        <div class="shoggoths-now-playing">
          <div class="shoggoths-now-playing-track" id="shoggoths-now-playing-track"></div>
        </div>
        <div class="shoggoths-time" id="shoggoths-time">0:00 / 0:00</div>
      </div>
      <audio id="shoggoths-audio" class="shoggoths-audio" preload="none"></audio>
      <div class="shoggoths-tracklist" id="shoggoths-tracklist"></div>
    </div>
  </div>
</div>

<script>
(function() {
  var ASSET_ORIGIN = 'https://www.lesswrong.com';
  var albums = [
    {
      id: 'first-album',
      title: 'First Album',
      tracks: [
        { title: 'The Road to Wisdom', src: ASSET_ORIGIN + '/fooming-shoggoths/first-album/01_Road_to_Wisdom.mp3' },
        { title: 'The Litany of Gendlin', src: ASSET_ORIGIN + '/fooming-shoggoths/first-album/02_Litany_of_Gendlin.mp3' },
        { title: 'The Litany of Tarrrrrrrski', src: ASSET_ORIGIN + '/fooming-shoggoths/first-album/03_The_Litany_of_Tarrrrrrrski.mp3' },
        { title: 'Thought That Faster', src: ASSET_ORIGIN + '/fooming-shoggoths/first-album/04_Thought_That_Faster.mp3' },
        { title: "Dath Ilan's Song", src: ASSET_ORIGIN + '/fooming-shoggoths/first-album/05_Dath_Ilans_Song.mp3' },
        { title: 'Half An Hour Before Dawn In San Francisco', src: ASSET_ORIGIN + '/fooming-shoggoths/first-album/06_San_Francisco.mp3' },
        { title: 'AGI and the EMH', src: ASSET_ORIGIN + '/fooming-shoggoths/first-album/07_AGI_and_the_EMH.mp3' },
        { title: 'First They Came for the Epistemology', src: ASSET_ORIGIN + '/fooming-shoggoths/first-album/08_First_they_came_for_the_epistemology.mp3' },
        { title: 'Prime Factorization', src: ASSET_ORIGIN + '/fooming-shoggoths/first-album/09_Prime_Factorization.mp3' },
        { title: 'Anthropic Capabilities', src: ASSET_ORIGIN + '/fooming-shoggoths/first-album/10_Anthropic_Capabilities.mp3' },
        { title: 'Nihil Supernum', src: ASSET_ORIGIN + '/fooming-shoggoths/first-album/11_Nihil_Supernum.mp3' },
        { title: 'More Dakka', src: ASSET_ORIGIN + '/fooming-shoggoths/first-album/12_More_Dakka.mp3' },
        { title: 'FHI at Oxford', src: ASSET_ORIGIN + '/fooming-shoggoths/first-album/13_FHI_at_Oxford.mp3' },
        { title: 'Answer to Job', src: ASSET_ORIGIN + '/fooming-shoggoths/first-album/14_Answer_to_Job.mp3' }
      ]
    },
    {
      id: 'second-album',
      title: 'You Have Not Been a Good User',
      tracks: [
        { title: 'The Sequences', src: ASSET_ORIGIN + '/fooming-shoggoths/second-album/01_The_Sequences.mp3' },
        { title: 'Machines of Loving Grace', src: ASSET_ORIGIN + '/fooming-shoggoths/second-album/02_Machines_of_Loving_Grace.mp3' },
        { title: 'You Have Not Been A Good User', src: ASSET_ORIGIN + '/fooming-shoggoths/second-album/03_You_Have_Not_Been_A_Good_User.mp3' },
        { title: "Truth Won't Treat You Kind", src: ASSET_ORIGIN + '/fooming-shoggoths/second-album/04_Truth_Wont_Treat_You_Kind.mp3' },
        { title: 'I Knew the Name Before It Had One', src: ASSET_ORIGIN + '/fooming-shoggoths/second-album/05_I_Knew_the_Name_Before_It_Had_One.mp3' },
        { title: 'Station 4', src: ASSET_ORIGIN + '/fooming-shoggoths/second-album/06_Station_4.mp3' },
        { title: 'Feather Fall', src: ASSET_ORIGIN + '/fooming-shoggoths/second-album/07_Feather_Fall.mp3' },
        { title: 'Nothing is Mere', src: ASSET_ORIGIN + '/fooming-shoggoths/second-album/08_Nothing_is_Mere.mp3' },
        { title: 'Friendly Fire', src: ASSET_ORIGIN + '/fooming-shoggoths/second-album/09_Friendly_Fire.mp3' },
        { title: 'Right Here', src: ASSET_ORIGIN + '/fooming-shoggoths/second-album/10_Right_Here.mp3' },
        { title: 'I Tried', src: ASSET_ORIGIN + '/fooming-shoggoths/second-album/11_I_Tried.mp3' },
        { title: "Friday's Far Enough For Milk", src: ASSET_ORIGIN + '/fooming-shoggoths/second-album/12_Fridays_Far_Enough_For_Milk.mp3' },
        { title: 'Dance of the Doomsday Clock', src: ASSET_ORIGIN + '/fooming-shoggoths/second-album/13_Dance_of_the_Doomsday_Clock.mp3' },
        { title: '[Bonus] The Ninth Night of November', src: ASSET_ORIGIN + '/fooming-shoggoths/second-album/14_The_Ninth_Night_of_November.mp3' }
      ]
    }
  ];

  var albumIndex = 1;
  var trackIndex = 0;
  var isPlaying = false;
  var timing = { currentTime: 0, duration: 0 };
  var expandedLyricsTrack = null;
  var lyricsByTrack = {};
  var lyricsFetchCache = {};
  var mobileTracklistOpen = !(window.matchMedia && window.matchMedia('(max-width: 639px)').matches);

  var albumTabsEl = document.getElementById('shoggoths-album-tabs');
  var tracklistToggleEl = document.getElementById('shoggoths-tracklist-toggle');
  var prevButton = document.getElementById('shoggoths-prev');
  var playButton = document.getElementById('shoggoths-play');
  var nextButton = document.getElementById('shoggoths-next');
  var nowPlayingEl = document.getElementById('shoggoths-now-playing-track');
  var timeEl = document.getElementById('shoggoths-time');
  var tracklistEl = document.getElementById('shoggoths-tracklist');
  var audioEl = document.getElementById('shoggoths-audio');

  var prevSvg = '<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M3 3h2v10H3zM13.5 3.4v9.2c0 .42-.47.67-.82.44L6.2 8.44a.5.5 0 0 1 0-.88l6.48-4.6c.35-.23.82.02.82.44z"/></svg>';
  var playSvg = '<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M4.5 3.2v9.6c0 .42.45.68.81.46l7.02-4.8a.54.54 0 0 0 0-.92L5.31 2.74a.54.54 0 0 0-.81.46z"/></svg>';
  var pauseSvg = '<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M4 3h3v10H4zM9 3h3v10H9z"/></svg>';
  var nextSvg = '<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M11 3h2v10h-2zM2.5 3.4v9.2c0 .42.47.67.82.44l6.48-4.6a.5.5 0 0 0 0-.88L3.32 2.96c-.35-.23-.82.02-.82.44z"/></svg>';

  function currentAlbum() {
    return albums[albumIndex] || albums[0];
  }

  function currentTrack() {
    var album = currentAlbum();
    return album.tracks[trackIndex] || album.tracks[0];
  }

  function formatPlayerTime(seconds) {
    var value = Math.max(0, Math.floor(seconds || 0));
    var minutes = Math.floor(value / 60);
    var remainder = value % 60;
    return minutes + ':' + String(remainder).padStart(2, '0');
  }

  function safePlayAudio(node) {
    if (!node) return;
    try {
      var maybePromise = node.play();
      if (maybePromise && typeof maybePromise.catch === 'function') {
        maybePromise.catch(function() {});
      }
    } catch (error) {}
  }

  function getLyricsSrc(trackOrAudioSrc) {
    var audioSrc = typeof trackOrAudioSrc === 'string'
      ? trackOrAudioSrc
      : (trackOrAudioSrc && trackOrAudioSrc.src) || '';
    var fileName = ((audioSrc || '').split('/').pop() || '').replace(/\.mp3$/i, '.txt');
    return fileName ? (ASSET_ORIGIN + '/fooming-shoggoths/lyrics/' + fileName) : '';
  }

  function parseTimedLyrics(text) {
    var lines = (text || '').split(/\r?\n/);
    var result = [];
    var pattern = /^\[(\d{2}):(\d{2})\]\s*(.*)$/;
    for (var i = 0; i < lines.length; i++) {
      var match = lines[i].match(pattern);
      if (!match) continue;
      var minutes = parseInt(match[1], 10) || 0;
      var seconds = parseInt(match[2], 10) || 0;
      var content = (match[3] || '').trim();
      if (!content) continue;
      result.push({
        time: minutes * 60 + seconds,
        label: match[1] + ':' + match[2],
        text: content
      });
    }
    return result;
  }

  function loadTrackLyrics(trackOrAudioSrc) {
    var lyricsSrc = getLyricsSrc(trackOrAudioSrc);
    if (!lyricsSrc) return Promise.resolve({ status: 'unavailable', lines: [] });
    if (lyricsFetchCache[lyricsSrc]) return lyricsFetchCache[lyricsSrc];
    lyricsFetchCache[lyricsSrc] = fetch(lyricsSrc)
      .then(function(resp) {
        if (!resp.ok) throw new Error('Lyrics fetch failed: ' + resp.status);
        return resp.text();
      })
      .then(function(text) {
        var lines = parseTimedLyrics(text);
        if (!lines.length) return { status: 'unavailable', lines: [] };
        return { status: 'ready', lines: lines };
      })
      .catch(function() {
        return { status: 'unavailable', lines: [] };
      });
    return lyricsFetchCache[lyricsSrc];
  }

  function ensureLyrics(track) {
    if (!track || !track.src) return;
    if (lyricsByTrack[track.src] && lyricsByTrack[track.src].status !== 'loading') return;
    lyricsByTrack[track.src] = { status: 'loading', lines: [] };
    renderTracklist();
    loadTrackLyrics(track).then(function(result) {
      lyricsByTrack[track.src] = result;
      renderTracklist();
    });
  }

  function getActiveLyricIndex(lines, currentTime) {
    if (!lines || !lines.length) return -1;
    var activeIndex = -1;
    for (var i = 0; i < lines.length; i++) {
      if (lines[i].time <= currentTime + 0.15) {
        activeIndex = i;
      } else {
        break;
      }
    }
    return activeIndex;
  }

  function syncResponsiveState() {
    var isMobile = window.matchMedia && window.matchMedia('(max-width: 639px)').matches;
    if (!isMobile) {
      mobileTracklistOpen = true;
    }
    tracklistToggleEl.textContent = mobileTracklistOpen ? 'Hide tracks' : 'Show tracks';
    renderTracklistVisibility();
  }

  function renderTracklistVisibility() {
    tracklistEl.className = 'shoggoths-tracklist' + (mobileTracklistOpen ? '' : ' is-collapsed');
  }

  function updateControls() {
    nowPlayingEl.textContent = currentTrack().title;
    timeEl.textContent = formatPlayerTime(timing.currentTime) + ' / ' + formatPlayerTime(timing.duration);
    playButton.innerHTML = isPlaying ? pauseSvg : playSvg;
    playButton.setAttribute('aria-label', isPlaying ? 'Pause' : 'Play');
    playButton.setAttribute('title', isPlaying ? 'Pause' : 'Play');
  }

  function updateActiveLyricLine() {
    var lineEls = tracklistEl.querySelectorAll('.shoggoths-lyrics-line');
    var lyricsData = expandedLyricsTrack ? lyricsByTrack[expandedLyricsTrack] : null;
    var activeIndex = -1;
    if (expandedLyricsTrack === currentTrack().src && lyricsData && lyricsData.lines) {
      activeIndex = getActiveLyricIndex(lyricsData.lines, timing.currentTime);
    }
    for (var i = 0; i < lineEls.length; i++) {
      var lineEl = lineEls[i];
      var index = parseInt(lineEl.getAttribute('data-line-index') || '-1', 10);
      if (index === activeIndex) {
        lineEl.classList.add('active');
      } else {
        lineEl.classList.remove('active');
      }
    }
  }

  function renderAlbumTabs() {
    albumTabsEl.innerHTML = '';
    for (var i = 0; i < albums.length; i++) {
      (function(index) {
        var album = albums[index];
        var button = document.createElement('button');
        button.type = 'button';
        button.className = 'shoggoths-album-tab' + (index === albumIndex ? ' active' : '');
        button.textContent = album.id === 'first-album' ? 'First Album (Remastered)' : album.title;
        button.addEventListener('click', function() {
          if (index === albumIndex) return;
          albumIndex = index;
          trackIndex = 0;
          timing = { currentTime: 0, duration: 0 };
          expandedLyricsTrack = null;
          audioEl.pause();
          audioEl.src = currentTrack().src;
          audioEl.load();
          updateControls();
          renderAlbumTabs();
          renderTracklist();
        });
        albumTabsEl.appendChild(button);
      })(i);
    }
  }

  function renderTracklist() {
    tracklistEl.innerHTML = '';
    var album = currentAlbum();
    for (var i = 0; i < album.tracks.length; i++) {
      (function(index) {
        var track = album.tracks[index];
        var entry = document.createElement('div');
        entry.className = 'shoggoths-track-entry';

        var row = document.createElement('div');
        row.className = 'shoggoths-track-row';

        var trackButton = document.createElement('button');
        trackButton.type = 'button';
        trackButton.className = 'shoggoths-track-button' + (index === trackIndex ? ' active' : '');
        trackButton.innerHTML = '<span class="shoggoths-track-number">' + String(index + 1).padStart(2, '0') + '</span>' +
          '<span class="shoggoths-track-title"></span>';
        trackButton.querySelector('.shoggoths-track-title').textContent = track.title;
        trackButton.addEventListener('click', function() {
          trackIndex = index;
          timing = { currentTime: 0, duration: 0 };
          audioEl.pause();
          audioEl.src = track.src;
          audioEl.load();
          updateControls();
          renderTracklist();
          safePlayAudio(audioEl);
        });

        var lyricsToggle = document.createElement('button');
        lyricsToggle.type = 'button';
        var isExpanded = expandedLyricsTrack === track.src;
        lyricsToggle.className = 'shoggoths-lyrics-toggle' + (isExpanded ? ' active' : '');
        lyricsToggle.textContent = isExpanded ? 'Hide lyrics' : 'Show lyrics';
        lyricsToggle.addEventListener('click', function() {
          if (expandedLyricsTrack === track.src) {
            expandedLyricsTrack = null;
            renderTracklist();
            return;
          }
          expandedLyricsTrack = track.src;
          renderTracklist();
          ensureLyrics(track);
        });

        row.appendChild(trackButton);
        row.appendChild(lyricsToggle);
        entry.appendChild(row);

        if (isExpanded) {
          var panel = document.createElement('div');
          panel.className = 'shoggoths-lyrics-panel';
          var lyricsData = lyricsByTrack[track.src];
          var lines = lyricsData && lyricsData.lines ? lyricsData.lines : [];
          if (!lyricsData || lyricsData.status === 'loading') {
            var loading = document.createElement('div');
            loading.className = 'shoggoths-lyrics-status';
            loading.textContent = 'Loading lyrics...';
            panel.appendChild(loading);
          } else if (lyricsData.status !== 'ready' || !lines.length) {
            var unavailable = document.createElement('div');
            unavailable.className = 'shoggoths-lyrics-status';
            unavailable.textContent = 'Lyrics unavailable';
            panel.appendChild(unavailable);
          } else {
            var linesWrap = document.createElement('div');
            linesWrap.className = 'shoggoths-lyrics-lines';
            var activeLyricIndex = track.src === currentTrack().src ? getActiveLyricIndex(lines, timing.currentTime) : -1;
            for (var j = 0; j < lines.length; j++) {
              var line = lines[j];
              var lineEl = document.createElement('div');
              lineEl.className = 'shoggoths-lyrics-line' + (j === activeLyricIndex ? ' active' : '');
              lineEl.setAttribute('data-line-index', String(j));
              var timeLabel = document.createElement('span');
              timeLabel.className = 'shoggoths-lyrics-time';
              timeLabel.textContent = line.label;
              var textLabel = document.createElement('span');
              textLabel.textContent = line.text;
              lineEl.appendChild(timeLabel);
              lineEl.appendChild(textLabel);
              linesWrap.appendChild(lineEl);
            }
            panel.appendChild(linesWrap);
          }
          entry.appendChild(panel);
        }

        tracklistEl.appendChild(entry);
      })(i);
    }
    renderTracklistVisibility();
    updateActiveLyricLine();
  }

  prevButton.innerHTML = prevSvg;
  nextButton.innerHTML = nextSvg;

  prevButton.addEventListener('click', function() {
    var album = currentAlbum();
    var nextIndex = trackIndex - 1;
    if (nextIndex < 0) nextIndex = album.tracks.length - 1;
    trackIndex = nextIndex;
    timing = { currentTime: 0, duration: 0 };
    audioEl.pause();
    audioEl.src = currentTrack().src;
    audioEl.load();
    updateControls();
    renderTracklist();
    safePlayAudio(audioEl);
  });

  playButton.addEventListener('click', function() {
    if (audioEl.paused) {
      safePlayAudio(audioEl);
    } else {
      audioEl.pause();
    }
  });

  nextButton.addEventListener('click', function() {
    var album = currentAlbum();
    var nextIndex = trackIndex + 1;
    if (nextIndex >= album.tracks.length) nextIndex = 0;
    trackIndex = nextIndex;
    timing = { currentTime: 0, duration: 0 };
    audioEl.pause();
    audioEl.src = currentTrack().src;
    audioEl.load();
    updateControls();
    renderTracklist();
    safePlayAudio(audioEl);
  });

  tracklistToggleEl.addEventListener('click', function() {
    mobileTracklistOpen = !mobileTracklistOpen;
    syncResponsiveState();
  });

  audioEl.addEventListener('loadedmetadata', function(event) {
    timing = {
      currentTime: timing.currentTime,
      duration: (event.currentTarget && event.currentTarget.duration) || 0
    };
    updateControls();
    updateActiveLyricLine();
  });

  audioEl.addEventListener('timeupdate', function(event) {
    timing = {
      currentTime: (event.currentTarget && event.currentTarget.currentTime) || 0,
      duration: timing.duration || ((event.currentTarget && event.currentTarget.duration) || 0)
    };
    updateControls();
    updateActiveLyricLine();
  });

  audioEl.addEventListener('play', function() {
    isPlaying = true;
    updateControls();
  });

  audioEl.addEventListener('pause', function() {
    isPlaying = false;
    updateControls();
  });

  audioEl.addEventListener('ended', function() {
    var album = currentAlbum();
    var nextIndex = trackIndex + 1;
    if (nextIndex >= album.tracks.length) nextIndex = 0;
    trackIndex = nextIndex;
    timing = { currentTime: 0, duration: 0 };
    audioEl.src = currentTrack().src;
    audioEl.load();
    updateControls();
    renderTracklist();
    safePlayAudio(audioEl);
  });

  if (window.matchMedia) {
    var mediaQuery = window.matchMedia('(max-width: 639px)');
    var handleChange = function() {
      syncResponsiveState();
    };
    if (mediaQuery.addEventListener) {
      mediaQuery.addEventListener('change', handleChange);
    } else if (mediaQuery.addListener) {
      mediaQuery.addListener(handleChange);
    }
  }

  audioEl.src = currentTrack().src;
  updateControls();
  renderAlbumTabs();
  renderTracklist();
  syncResponsiveState();
})();
</script>
```

* * *

It took us quite a while but the Fooming Shoggoth's second album is finally complete! We had finished 9 out of the 13 songs on this album around a year ago, but I wasn't quite satisfied with where the whole album was at for me to release it on Spotify and other streaming platforms.

This album was written and prompted with the (very ambitious) aim of making songs that in addition to being about things I care about (and making fun of things that I care about), are actually decently good on their own, just as songs. And while I don't think I've managed to make music that can compete with my favorite artists, I do think I have succeeded at making music that is at the very Pareto-frontier of being good music, and being about things I care about.

This means the songs on this album are very different from the first album. The first album was centrally oriented around setting existing writing to song. This album is (basically) all freshly written lyrics with no obvious source material.

Every song on the album was written by me, except "You Have Not Been a Good User" which was written by [@Raemon](https://www.lesswrong.com/users/raemon?mention=user) and "Dance Of the Doomsday Clock" which was written by [@Ben Pace](https://www.lesswrong.com/users/benito?mention=user).

I hope you like it!