Skip to content
LyraCompanion

LYRACOMPANION

She warns you before you reach the spot where others died.She never presses a key.

Falls and drowning are the number one and two causes of death in Classic Hardcore (Warcraft Tavern, 2 Jan 2025). Since 0.12.0 Lyra tells you 20 to 40 yards ahead.

A face with about thirty expressions, a voice in English and German, a memory of your run — and a warning where ten others have already died. While you play there is no language model, no voice AI and no network.

No automationNo networkSource readable →

Lyra says:

“It was close here, back then. Not this time, alright?”

Level 2 — WarningThis is how it looks in game →
Voice

Listen to her.

About 730 voice lines, all written in advance, all rendered offline in advance, in English and German. Click a situation — then switch the language to hear the same line again.

A click plays the real file from the addon. Nothing starts on its own.

The subtitle always appears in the speech bubble, even with the voice muted. Playing without sound costs you nothing but the sound.

Lyra's voice is AI-generated — and no AI runs while you play. Every line Lyra says was rendered before release from a fixed, hand-written script and ships as an audio file inside the addon. While you play there is no language model, no voice AI and no network — nothing leaves your machine. No audio from World of Warcraft is used or redistributed.

What Lyra never does

  • No automation.She never presses a key, never moves, never casts, never targets.
  • No network.There is no network code in this addon. Nothing leaves your machine.
  • No chat output.She never writes into any channel — not say, not guild, not whisper.
  • No data about other players.No names, no whispers, no group members, no addon channel.
  • No ads, no purchases, no premium features.

Everything runs through the public AddOn API: she reads, she shows, she speaks.

This addon is free and complete — and it stays that way. There is no premium version, there are no paid voice packs, and there never will be. Blizzard's add-on policy requires add-ons to be free and their source code to be publicly readable. We think both are right.

The full source ships inside the addon: Lua, TOC and XML, readable as plain text, no tool required. Read it — that is exactly why it is open. And you do not have to download anything first: it is browsable file by file at lyracompanion.de/source, in exactly the state that sits inside the zip next to it.

Read the source

What she does

Six things she keeps an eye on for you

1

She watches your life

Health thresholds, sudden burst damage, falls, breath, fatigue — spoken and shown, instantly, even mid-fight.

More

Three warning levels. At level 3 the bubble border turns red, the screen edge pulses violet, and Lyra says the shortest sentence she has. Falls and drowning are the number one and two causes of death in Classic Hardcore (Warcraft Tavern, 2 Jan 2025). Since 0.12.0 the warning comes beforehand: run towards a spot where at least ten people have already fallen or drowned and she says so 20 to 40 yards ahead — once, quietly, and never in combat. If it happens anyway, she tells you after the impact what it cost.

2

She names the danger

Adds joining the fight. Elites in your target. Level gaps that will kill you. An empty potion bag.

More

She doesn't just count, she tells you what it means. “Here comes another one” reads differently than a number on a bar. And if your target is four levels above you, she says so before you swing.

3

She warns about the place, not about the death

A data pack aggregated from the public Deathlog database marks the cliffs, the deep water and the deadly camps.

More

Aggregated by zone, level band and grid cell — no character names, no guild names, no last words. From ten deaths in the same cell onwards she looks ahead along your direction of travel and says it before you get there. She does not tell you where to go; she tells you where others died. Plus her own memory: she knows the spots where you nearly died better than any database does.

4

She remembers

Zone greetings with history, a bestiary of your rivals, rituals for sessions and milestones.

More

“Welcome back to the Barrens. Last time you nearly died here.” That is the difference to every other addon: Lyra doesn't know everyone's statistics, she knows your run. The chronicle shows you what she kept — and it is only ever your own data.

5

She speaks

Pre-rendered voice lines in English and German, always with a subtitle in the speech bubble.

More

About 730 lines, all hand-written in advance, all rendered offline in advance, all shipped as OGG files inside the addon. In game she picks a file and plays it — no language model, no service, no network. The voice is AI-generated; it says so here, in the addon and in the license file. If you don't want sound, you get all of it as text.

6

She stays out of your way

Four presets from Quiet to Streamer, every category on its own switch, freely positionable, in three sizes.

More

The default is deliberately quiet — quieter than most addons. In combat she only says the things that can save your life. Combat quiet, group quiet, silent mode and /lyra stumm are four different degrees of “not now”. ---

Example

A page from Lyra's book

Warning you is something others do too. Keeping count of how often you nearly died in the same spot is something nobody else does — and it is exactly what a website cannot show, because a website has no chronicle. So it shows an invented one, and says so in the same card.

Example

Ashenkind — Human · Mage · Level 34 · Hardcore

Invented hero, invented numbers. This is what the page looks like that Lyra keeps about your own run.

  • 17visits to Westfall
  • 4close calls against the Bloodscalp Hunter
  • 61hours out there
  • 128creatures in the bestiary
  • Evening 12Duskwood, Nightwatch — 9 % health

    “Nine percent. I counted, and I do not enjoy counting that far down.”

  • Evening 19Westfall, third return to the same hollow

    “It was close here, back then. Not this time, alright?”

  • Evening 23Bloodscalp Hunter, fourth meeting

    “Him again. With a plan this time, yes?”

  • Evening 31Level 34 — longest session: 4 h 12 min

    “By the ley lines, a level! I took none of it off your hands. Almost.”

Your own page lives in the game — it starts empty at your first login.

Accessibility

For eyes, ears and hands that work differently

Every warning in Lyra arrives three ways: spoken, as text, as a shape. If you cannot hear, you read it in a subtitle bar with the speaker's name on an opaque background. If you cannot see well, you hear every line — including the ones without a recording — and Lyra stays quiet while Blizzard's text-to-speech or a screen reader is talking. If you cannot tell colours apart, you read the warning level from the symbol, not from the red.

/lyra barrierefrei an switches all of it on at once:

  • Permanent subtitle bar, with speaker name, opaque background and larger text
  • Warning levels as shapes: o · ^ · ^^ — in addition to colour, never instead of text
  • Read-aloud for every line that has no recording
  • Never two voices: Lyra yields while Blizzard's TTS or a screen reader speaks
  • Complete without the figure: /lyra figur aus — voice and subtitles only
  • Gamepad: Lyra's windows are registered with ConsolePort's cursor

What is still missing is stated here, not hidden: there is no screen-reader bridge to Sku — Lyra detects a running screen reader and falls silent, and that is all. And the subtitle bar's font and colours are not freely configurable yet. If you need either, say so. This is not a side topic, it is the next release.

Demonstration

This is what a warning looks like at the edge of your screen

Three clicks, three levels. The border pulses in the colour of the situation — brighter, longer, and at alarm level twice over, the higher it goes. And the information is never in the colour alone: shape, word and sentence all say the same thing. The block above, demonstrated rather than claimed.

Lyra:Quiet. Nothing worth reporting.

CalmNo pulse, no sound, no colour at the edge. That is how it is most of the time.
Palette:

No sound — the voice is one section up, on click. A pulse lasts a second at most, then Lyra locks the next one out for four seconds; here it runs three times and then stops. Nothing runs on its own: whatever moves, you clicked it.

Images

What she looks like in game

8 captures from the game, all taken with version 0.11.0 — unedited, apart from the chat log, which has been blurred. Click an image to see it large.

01 At restPortrait mode at the top left, placed wherever you want it. Nothing else on your screen changes.
02 Level 3 alarmWhat a level-3 alarm looks like: red bubble border, screen-edge pulse, spoken line — “Potion or legs. Whichever, now.” Triggered with /lyra test for the picture; the health bar is full on purpose, nobody risks a Hardcore character for a screenshot.
03 BreathUnderwater with air running out. She counts you up before it matters — drowning is the number two cause of death in Classic Hardcore (Warcraft Tavern, 2 Jan 2025). Since 0.12.0 there is one more line before that: swim over a spot where ten people have already drowned with half your breath left and she says so before you get there. (Captured with version 0.11.0.)
04 She remembersZone greetings carry your own history: where you nearly died, and how. Never another player's data.
05 ChronicleYour zones, your close calls with date and place, your sessions. Only your own data, no names.
06 SettingsPresets, language, how she addresses you, voice, view and size — and every category on its own switch under Fine tuning. (The addon list still shows the old working name.)
07 Full figureThe alternative to portrait mode: the whole figure, movable anywhere.
08 German voice and textInterface, text and voice in German — the same scene on a German client.

At rest

Orgrimmar at dusk. Top left a small round portrait of Lyra in a violet ring, calm expression, no speech bubble. The rest of the game interface is untouched.

Portrait mode at the top left, placed wherever you want it. Nothing else on your screen changes.

Use the left and right arrow keys to browse, Escape closes.

Download

Download

Beta 0.14.0 for Classic Era / Hardcore — straight from here. One zip with a SHA-256 to verify. CurseForge (project 1703906) still has 0.11.0 awaiting approval; the version here is three releases ahead, and stays that way until CurseForge catches up. That is why the older zips remain linked below, each with its own checksum.

Installing by hand

  1. Unzip and copy the four folders into World of Warcraft/_classic_era_/Interface/AddOns.
  2. All four belong there: Lyra_Gestalt, Lyra_Gestalt_Daten, Lyra_Gestalt_Stimme_de and Lyra_Gestalt_Stimme_en.
  3. Restart the client completely — a /reload is not enough. Otherwise Lyra stays silent; see the box above.

Read the source →

Restart the game client completely after installing.

World of Warcraft only finds sound files that were already in the AddOns folder when the client started. A /reload is not enough — Lyra will stay silent, and that is not her fault.

CurseForgeSubmitted, awaiting approval — The usual way. Works with the CurseForge app.
Wago AddonsFollows once CurseForge has approved — For WowUp and everyone on Wago.
GitHubReleases from 0.14.0 on, with zip and checksum; the source is readable there and at /source.

What's in the package

One download, four folders: the addon, the German voice, the English voice and the danger map. Nothing needs to be installed separately; voice packs load on demand. About 34 MB — 31 of them are the two voice packs, and that is disk space, not memory.

First launch

On your first login Lyra asks four questions: language, how she should address you, how talkative she may be, portrait or full figure. It takes twenty seconds and you can redo it any time with /lyra einrichten.

Which clients

ClientStatus
Classic Era / Hardcore 1.15.9tested in game — this is where Lyra lives
Burning Crusade AnniversaryTOC in the package, built against Blizzard's API sources and a test harness — not yet tested in game
Mists of Pandaria ClassicTOC in the package, built against Blizzard's API sources and a test harness — not yet tested in game
Retail (Midnight)TOC in the package, not yet tested in game. Fewer combat senses because of the secret-value rules, and the danger map is off there — its data is Era Hardcore data.
WoW: Foreverloads the Era TOC with an “out of date” note until the launch client confirms its interface number
Where things stand

What changed recently

0.14.0Version
20 September 2026As of

Download counts appear once the addon is released. An invented number would be worse than none.

0.14.0
Lyra miscounts less often

The free-text questions from 0.13.0 now answer more precisely — and, above all, less often wrongly. Lyra no longer pulls a mistyped word onto some similar-sounding word that belongs somewhere else entirely, and a single word is no longer enough for her to consider a whole question understood. Where she used to give a real number to the wrong question — "how often was I in the Barrens" answered with your death count — she now simply says: there's nothing in my book about that yet. She understands zone names in both languages. Type "wie oft war ich im Schlingendorntal" on an English client and you get the count for Stranglethorn Vale, and the other way round just the same — for the outdoor zones and capitals of the Classic world. And she answers "why" honestly. "Why did I almost die in Westfall every time?" is not a question a table of numbers can answer. Lyra invents nothing for it; she hands back the fact: "Why? I count, I don't interpret. All I know is: …" /lyra hilfe now ends with a sentence that was always true and was written down nowhere: Lyra answers from fixed templates and your own chronicle. No language model is running.

Colour themes

  • Four named colour palettes for the speech bubble, the subtitle bar and the warning pulse at the screen edge: standard (Lyra's violet, unchanged), kontrast (black/white), warm (amber on brown) and kalt (ice blue on night blue). Switch with /lyra farbe <name>; your choice is remembered. The default is standard — do nothing and nothing changes.
  • Every palette is checked for readability: text sits between 16.8:1 and 21:1 on the bubble background in all four, and the subtitle bar still reaches 11.8:1 to 15.1:1 over the brightest possible game image. The requirement is 4.5:1.
  • The "High contrast" checkbox wins over any palette choice. A colour theme cannot undercut accessibility, and /lyra farbe tells you when your choice is being overridden for that reason.
  • No palette changes the brightness or the rhythm of the pulse — that is the photosensitivity limit, not a matter of taste. And Lyra's alarm is never Blizzard's red in any palette: the client draws its own warning in that colour, and two identical reds cannot be told apart.

Small things

  • Client detection for WoW: Forever now survives a 1.7x–1.9x build line as well. The TOC line itself stays out until a client confirms both the suffix and the number.
  • Licence details for the embedded libraries looked up and documented (Libs/LICENSE.txt). LibDataBroker-1.1 is listed as "All Rights Reserved" on CurseForge and is therefore no longer bundled; the data-broker display (Titan Panel, ElvUI datatexts) keeps working because every one of those addons ships the library itself.
  • Bug reports: German issue templates, and a clear note on which details make a report fixable in one go.

Voice

  • 23 lines that only appeared as subtitles since waves 5, 6, 8 and 9b are now recorded, in German and English: the early warnings before falls and deep water, arriving at one of your own notes, switching accessibility mode on and off, and Lyra's three fallback answers in free text. Lines with placeholders (zone name, number, note title) stay subtitle or read-aloud. As always: the client only hears new sound files after a full restart.

Earlier versions

The list scrolls. Click a version to open it.

0.13.0Wave 9b: Writing freely with Lyra

There is now an input field below Lyra's dialogue window. You can ask her full questions about your own chronicle — zones and visits, your worst enemy, close calls, playtime, sessions, notes and your predecessor. She understands 18 kinds of question in German and English, forgives typos, and recognises zone and creature names from your own chronicle. When she cannot answer, she now says why: "there's nothing in my book about that yet", "maps are not my trade", or simply "I didn't catch that" — three answers instead of one. And she comes back to your question later, on her own. No language model runs. Lyra answers from fixed templates and your own numbers; nothing leaves your computer, and by default what you type is not even saved. The input field takes focus only on click and drops it the moment combat starts — a field that swallows WASD is lethal on hardcore. Switches: /lyra freitext an|aus and "Free writing" in the fine settings. /lyra <question> keeps working as before.

Wave 9a: She says the names right — and keeps what she promised

Personal lines are shown again, never read aloud. /lyra persoenlich has always said "never with voice". Since the reading-aloud feature arrived, that stopped being true — every line without a recording was read out, and personal lines never have one. It is true again. If you want it the other way round, there is a checkbox for it in the fine settings; it is off.

She says the names right. Lyra's own voice is recorded and sounds the way it should. The lines that carry a zone name, a number or your name cannot be recorded in advance — those are read by your operating system, and it used to say "Azeroth" with a hard Z and "Onyxia" with an umlaut. Lyra now ships a pronunciation lexicon for German and English. It applies only to reading aloud: the speech bubble still shows the name, not the phonetic spelling. Missing a word? Add it yourself — /lyra aussprache Onyxia = Oh-nik-see-uh.

She is in your bar now, too. If you use Titan Panel, Bartender4, ChocolateBar or a minimap button collector, you will find Lyra there: her state as text, one click opens the menu. The minimap button stays exactly as it was — this is in addition, not instead.

Take your settings with you. /lyra profil export gives you a string you can copy, keep or send on; /lyra profil import reads it back. It contains settings only — no chronicle, no character name, no realm. Anything that does not belong on the list does not get through on import, not even if somebody has tampered with the string.

NewPronunciation lexicon for spoken lines, 68 entries (de/en), voice only
New/lyra aussprache — add, list and remove your own pronunciations
New/lyra profil export and /lyra profil import with a copy window
NewLibDataBroker feed for Titan Panel, Bartender4, ChocolateBar and button collectors
NewCheckbox Read personal lines aloud too (off) under Fine settings → Voice
ChangedPersonal lines are shown, never read aloud — the way it always said
ChangedQuestie is read through its official API; the old path remains as a fallback
FixedWhen accepting a quest, Lyra's line could come too early, before Questie had finished loading

Test harness: 58 runs, 4,396 checks, all green. Catalogue: 122 events.

0.12.0Wave 8: She warns before it happens

The warning now comes beforehand. Until now Lyra said "people have already fallen here" when you were standing at the cliff edge. Now she looks at where you are running and says it twenty to forty yards ahead — quietly, once, and only in places where at least ten people died the same way. She does not tell you where to go. She tells you where others died.

That comes with a long list of situations in which she does not speak: not in combat, not on the gryphon, not in flight, not in a city or an inn, not in an instance, not while you are standing still, not while you are turning on the spot, not twice in the same place. A warning that comes too often is worse than no warning at all — which is why the locks are longer than the feature.

Swimming. If your breath is below half and you are over a spot where people have already drowned, she says so. Once.

She survives a patch day. At login Lyra checks the eight places where she hooks into the game. If one falls away, she switches off the affected sense and says one sentence in chat — instead of showing you an error with her name in it. The rest keeps running. /lyra selbsttest says exactly what is missing; that is the line that belongs in a bug report.

And she can be grabbed by the scruff of the neck again. When you drag Lyra across the screen she now gets startled even while she is pulling a face at an event.

NewSTURZ_VORAUS, WASSER_VORAUS: one calm line 20–40 yards ahead of a falling or drowning spot, in your direction of travel, from ten deaths there onwards
NewTIEFES_WASSER: over a drowning spot with half your breath left
NewSelf-test at login. If an interface falls away, a sentence comes instead of an error, and only the affected sense goes off
New/lyra selbsttest — eight lines for the bug report
New/lyra vorwarnung an|aus and a checkbox under Fine-tuning → Data sources
ChangedThe settings page is now called "Lyra Companion", the way the addon is called everywhere else
Changed"Warning level as a shape too" has moved into the fine-tuning; the first page is thirteen entries long again
FixedLyra could no longer be startled while being dragged as soon as she was holding a face for an event
FixedAfter a close call in the first few minutes she talked more instead of less. The mood now calculates differently
FixedOn clients with Blizzard's own text-to-speech a category was being guessed. If it is not reported, the client now decides

Everything new lives in two files (Core/Selbsttest.lua, Sinne/Welle8.lua); about 40 new lines were added to existing files. Without the package Lyra_Gestalt_Daten nothing happens, and nothing happens on Retail and Forever either — there a different world lies behind the same maps. Test harness: four scripts, 240 checks, all green.


The edge pulse without corners

Screen-edge pulse: the corners. The warning frame consisted of four bands that overlapped in the corners — in ADD blend the brightness added up to double there, and you saw four brighter rectangles. The edge is now a 9-slice: four edges that stop short of the corner, and four corner tiles that continue the gradient diagonally. No two surfaces share a single pixel any more, so nothing can be drawn twice. From now on the edge width hangs on the short side of the screen instead of on both axes separately: on 16:9, 16:10 and 21:9 the frame is equally wide, whereas before it was almost twice as wide on the left and right as at the top and bottom on ultrawide. For that, bilder/puls_rand.png has gone from a full-screen mask to a corner tile that the edges also take their gradient from — one file for all eight surfaces. The bottom line: despite a stronger effect there is 31 % less light on the screen, and the peak value drops from 0.70 to 0.48. Levels, colours, double beat, display time, Streamer and accessibility behaviour are unchanged.

Note on viewing it: the client only sees a new image file after a full restart, /reload is not enough.

0.11.0Wave 5: The map

Lyra now draws what she knows onto the map. Every spot where you nearly died gets a pin on the world map and the minimap — with the health you had left and who was to blame. Your own points from /lyra punkt sit next to them, with your note in the tooltip. And over the zone you are currently standing in she lays the danger map: semi-transparent cells, orange for falls, blue for drowning, red for creatures; the stronger the colour, the more deaths. What is shown is exactly what she also warns about — a map that claims something other than the companion does would be worse than no map at all.

The find of this round was a number that had been wrong since wave 1. Lyra's warning about an old close-call spot hung on a fixed fraction of the map's width — and zones vary in size. In a wide outdoor zone the same value meant a multiple of what it meant in a city: the warning came far too early or far too late depending on the area. She now calculates in real yards, separately for each zone.

What she explicitly does not do: she does not put a second warning call on the same spot. That one already existed; it was just badly measured.

NewPins on world map and minimap for close calls and for your own points, with Lyra's text in the tooltip
NewDanger-map overlay on the world map of your zone, colour by type of death, opacity by number of deaths. Needs the package Lyra_Gestalt_Daten, Classic clients only
NewPUNKT_NAH: one line when you arrive at a point you set yourself — at most every ten minutes per point, never in combat
New/lyra karte: overview and switches (/lyra karte overlay an|aus, likewise beinahe, notizen, nah)
New/lyra punkt weg [n]: delete a point again
NewFour checkboxes under Fine-tuning → Map and pins, all on by default. The old "Map pins" switch stays the master switch
NewWith TomTom, Lyra tints the waypoint arrow purple — but only if another addon has taken it over and actually keeps the colour
FixedThe warning about an old close-call spot came far too early or far too late depending on zone size. It now measures in yards
FixedClose-call pins were drawn twice, ever since there were two places that wanted to draw them
InternalHereBeDragons is embedded (Libs/). If another addon brings a newer version along, that one wins — Lyra demands nothing

Everything new lives in a single file (Sinne/Karte2.lua); about 50 new lines were added to existing files. Without HereBeDragons nothing happens, and /lyra karte says honestly why. Test harness: four scripts, 388 checks, all green.

Wave 6: Accessibility, coexistence, integrations

Lyra now has an accessibility mode, and it is a switch, not fine print. One click — or /lyra barrierefrei an — and the subtitle bar stays up permanently, every line is prefixed with "Lyra:", the text gets larger, every line stays longer, and lines without a voice recording are read aloud, provided your system has a voice. Turn it off again and you get your old settings back: the mode remembers them, it does not overwrite them.

Warning levels now carry a shape, not just a colour. A dot for a hint, a triangle for a warning, two for an alarm — small on the speech bubble, larger in accessibility mode. That applies without the mode as well. Colour alone does not carry a warning for roughly eight per cent of male players, and Blizzard's own frame colours change nothing about that.

And Lyra works fully without the figure. The first-run assistant has gained a fourth question: "Should I be visible?" Anyone who picks "voice and subtitles only" gets the same Lyra — the same events, the same voice, the same memory — just without the portrait. Her text then appears in the subtitle bar or in a speech bubble at the bottom edge of the screen. It also works after the fact: /lyra figur aus.

NewAccessibility mode as a single switch (top of the panel, `/lyra barrierefrei anaus`) — bar, speaker name, font size, display time, read-aloud, shape symbols in one go, with a complete way back
NewWarning level additionally as a shape: o hint, ^ warning, ^^ alarm. Can be switched off, on by default
New"Voice and subtitles only": fourth option in the first-run assistant and /lyra figur aus. Lyra stays fully functional
NewNever two voices at once: if Blizzard's speech output or a screen reader is talking, Lyra defers her read-aloud until the other one has finished — instead of, as before, staying silent permanently just because the feature is switched on
NewLyra can speak through Blizzard's own combat audio assistant (C_CombatAudioAlert) — on all clients, not just Retail. Then two voices cannot happen at all
NewHold-your-tongue rule for GTFO: during a ground-effect alert Lyra does not chat (3 s, 6 s at the high alert level). Warnings still come through. No switch — a rule that can only make her quieter does not need one
NewGamepad: conversation window and menu can be operated with ConsolePort
NewWeakAuras auras can now hang on exactly one Lyra event: LYRA_EREIGNIS:HP20 as the trigger name, without a line of Lua. Older WeakAuras still get LYRA_EREIGNIS
New/lyra status says what Lyra costs: memory per package and CPU time (the latter only when scriptProfile is running — otherwise it says how to measure it, instead of showing a 0)
NewSelf-Found and Hardcore are detected via C_GameRules instead of guessed; /lyra status names the source and cleanly separates what the realm says from what your switch says. Lyra still does not set it herself
FixedThe client switch hung on interface numbers. A Forever build with a number outside the expected range would have run as "TBC" — with combat-log behaviour locked, which there would have triggered a Blizzard error message with Lyra's name in it. It now falls back first to a runtime test (C_RestrictedActions)
FixedLyra's read-aloud stayed silent permanently as soon as Blizzard's combat audio cues were merely switched on. Now what counts is whether someone is actually speaking right now

Everything new lives in a single file (Sinne/Welle6.lua); about 180 new lines were added to existing files, a good half of them comments and settings texts. Without GTFO, without ConsolePort and without WeakAuras nothing happens, and /lyra status says honestly "not installed". Test harness: 4 scripts, 555 checks, all green.

Wave 7: Screenshot round — pulse, speech bubble, chronicle window, language switch

Screen-edge warning rebuilt. Instead of a hard white block there is now a soft glow at the edge, with its own texture instead of a gradient API that is not reliable on Classic Era. Three distinguishable levels: hint discreetly violet, warning stronger, alarm red-violet with a short double beat. Never longer than a second. In Streamer mode the pulse stays off; in accessibility mode it gets stronger rather than weaker, but with a larger gap between two pulses.

The speech bubble no longer truncates. A long sentence next to the portrait used to end with "…". Now it wraps — in every position. If there is no room left to the right or the left, the bubble moves upwards instead of being pushed against the edge of the screen.

The chronicle is a window. /lyra chronik opens a window with the zones you have visited, the close calls with date and place, the most dangerous enemies and the sessions — instead of five lines in chat. Without character, guild or realm names: a screenshot of it does not give away whose it is.

Language switch without reloading. /lyra sprache de|en switches the settings page, menu, conversation and chronicle over immediately. Should part of it still need a /reload on some client, Lyra says so in chat instead of keeping quiet about it.

The subtitle bar carries the warning symbol (o / ^ / ^^) like the speech bubble. On stream the warning level is therefore recognisable without colour too.


Also in the same version: the six wave 4 events now have voice recordings; /lyra test <ID> bypasses the hourly budget like a click and "say something" do (previously it went mute after 15 tries); the speech bubble stays on screen via clamping; the bubble's edge tile is rotated correctly (ladder pattern fixed); the generated _Vanilla.toc starts with a directive (12.0.7 rule); libs: LibStub, CallbackHandler-1.0, HereBeDragons-2.0 with a license note. Test harness: 45 runs, 3 201 checks, all green — and as of today inside the project instead of in /tmp (tests/pruefstand/).

0.10.0Wave 4: Everyday life II, Hardcore switch, signals

Six new events, none of them loud. Lyra says something at the crafting window about the first bit of progress in a session and when a profession is at a trainer threshold; after a close fight she reminds you once about bandages if there are none in your bags; she greets a switch into or out of Hardcore mode with exactly one sentence; and she quietly keeps count of how many nodes GatherMate2 has newly recorded today. On top of that she answers, on request, the four big Era attunements — the prerequisite, never the route.

The find of this round was hiding in an API nobody had asked about. On Classic Era, Enchanting and Beast Training do not run through TRADE_SKILL_* but through the old Craft API with its own window and its own events. A profession moment that only listens to the crafting window would have stayed permanently blind for mages with Enchanting — one of the most common Era combinations there is. Lyra now listens to both.

And Lyra is a signal source from now on. After every line she sends the custom event LYRA_EREIGNIS (ID, class, level) to WeakAuras. Anyone who wants to build their own aura on Lyra's warnings needs three lines for it — the instructions are in Sinne/WELLE4.md. The old LYRA_GESTALT still fires unchanged; existing auras do not break.

NewBERUF_ERSTER / BERUF_GRENZE: one line for the first point of a session and at the trainer thresholds 75/150/225/300 (TRADE_SKILL_* and the Era Craft API)
NewERSTE_HILFE: after a fight below half health (on Hardcore) or below a third, a chatter line (level 0, not a warning) when there is no bandage in your bags — once per session, and it is dropped if you have bought some in the meantime
NewHC_MODUS_AN / HC_MODUS_AUS: one line when the Hardcore state at login differs from the one last remembered. Once per switch, no setting needed
NewGM2_KNOTEN: counts new GatherMate2 nodes in the session; from the tenth onwards she may say something, after that at most every 30 minutes. The node is never named
New`/lyra attunement [onyxiamcbwlnaxx]`: the prerequisite in three sentences. No route, no step-by-step
NewCustom event LYRA_EREIGNIS for WeakAuras, documented in Sinne/WELLE4.md
NewFour switches under Fine-tuning → Everyday life II and signals, all on by default
New/lyra status says one line about wave 4: which profession API the client has, whether WeakAuras and GatherMate2 were detected and by which route
FixedThe Hardcore line would have starved on the chatter spacing, because wave 4 gets the last login slot. Fourth find of the same pattern since review 5 — and again reproduced in the test harness, not noticed in the game

Everything new lives in a single file (Sinne/Welle4.lua); about 50 new lines were added to existing files, a good half of them comments and settings texts. Without WeakAuras and without GatherMate2 nothing happens, and /lyra status says honestly "missing". Test harness: 34 scripts, 2099 checks, all green — 401 of them new.

Also in the same package: everything from 0.9.1 (below) — both states came about on the same night, but only 0.10.0 is shipped. The six new events have voice recordings (15 German, 14 English takes, checked against Whisper); only lines with live values ({beruf}, {wert}, {anzahl}) deliberately stay subtitle or read-aloud — a recording cannot insert a number.

0.9.1Tidying up before the upload

No new features. This version closes the two points that the port 0.9.0 left open, and puts the license and metadata texts in order — that is the part the CurseForge moderation reads.

The worst find was a line that would have lied in conversation. UI/Dialog.lua did already read the target's level via ns.Compat.unitLevelLesbar(), but appended an or 0 to it. On Retail and Forever the level of a foreign unit in combat is a "secret value" — the helper returns nil there, and nil or 0 became level 0. From your own level 3 upwards that means "easy": in combat Lyra would have rated every enemy whose level she cannot even read as harmless. The right sentence had been sitting ready in dialog.lua the whole time ("I can't read its level. That's rarely a good sign.") and was simply unreachable.

FixedUI/Dialog.lua: an unreadable target level is "unknown" again instead of "easy" (-- REVIEW9:)
FixedLyra_Gestalt_Stimme_de was the only one of the five packages with no flavour lines — on TBC, MoP and Retail Lyra would have been mute there, of all places in German
FixedAll ## X-License: lines referred to a file LICENSE.md that does not exist in the zip (what ships is LICENSE and LICENSE-ASSETS.md)
FixedLICENSE-ASSETS.md still listed the sprites under Lyra_Gestalt/gestalt/*.png — the folder has been called bilder/ (and bilder/rund/) since 0.8.0
NewFeature flag C.F.gefahrenkarte: the danger map is off on Retail and Forever
New/lyra status now says one line about the danger map — cells, switch off, package missing or client does not match

The danger map stays silent on Retail and Forever

The cells in the package Lyra_Gestalt_Daten are aggregated Hardcore deaths from Classic Era. Behind the same mapID there is a reworked zone without Hardcore on Retail, and on Forever a world with reworked classes and mobs. Until now the lookup simply ran there too and mostly found nothing — "mostly" is the gap: a cell that does hit is a false warning there, and a false warning is worse than none at all. Exactly this reasoning has been sitting with the reagent reminders since 0.9.0.

MoP Classic deliberately stays on: Vanilla Azeroth is the same world there, and the fall and water cells — the majority — are terrain, not game content.

It is switched off silently: no notice at login, no line in chat. Whoever asks gets the reason in /lyra status, along with the client profile.

Small things

  • The personal package still carried a real character name in the charKey field and the real account folder in its header, even though the comment above it already spoke of "Testheld-Testrealm". Both are anonymised now. For your own machine: in the copy under Interface/AddOns/ your own Name-Realm has to be there, otherwise the loader ignores the package.
  • Sinne/BRUECKEN.md named an absolute path containing the username of the development machine.
  • Voice descriptions now say the same thing everywhere: synthetic, generated offline and marked as AI-generated (EU AI Act Art. 50).
  • Test harness: two new scenes per client profile (danger map, conversation about the target), 1 698 checks in 29 runs, all green. Both new scenes are counter-checked — with the old code they go red.

See all of it →all 22 versions

Full changelog →

Questions

Frequently asked

01Is this allowed on Hardcore realms?

Yes. Lyra reads the same public AddOn API that Deathlog, Questie and DBM read. She performs no action for you: no key press, no movement, no casting, no targeting, no automation of any kind. The full source is public and browsable file by file at lyracompanion.de/source — if in doubt, read it instead of asking.

02Isn't that automation — an unfair advantage?

She does not act, she talks. And she tells you nothing an attentive player could not already see on screen: your health, your breath, the second mob, the elite in your target. She just remembers better than you do, and that is the whole advantage. She scans nothing: she sees what you have targeted or are fighting, and nothing else.

03Is an AI running while I play?

No. Lyra has about 730 sentences, all written in advance, all rendered in advance, all shipped as OGG files inside the addon. In game she picks a file and plays it — that is all. No language model, no cloud service, no network code. Even when you type to Lyra in game, she answers from fixed templates and your own chronicle. No language model runs. Lines containing a zone name, a number or your own name cannot be recorded in advance — those are read out by your game's or your system's own speech output, which is likewise not an online service. You can read every line she has in plain text: docs/phrasen.json is part of the source.

04And the question box on this page?

The same, one step stricter. “Ask Lyra” in the bottom right answers from fixed templates and computes entirely in your browser — no language model, and whatever you type is sent nowhere. It loads exactly one file of answers from this domain and nothing else: no service, no cookie, no third-party server. Questions about your own chronicle it recognises and honestly hands back — that one lives in the game, not here.

05Is the voice AI-generated?

Yes — entirely, and it says so everywhere: here, in the addon, on CurseForge and in the license file. It was produced offline before release by an AI text-to-speech model from a hand-written script; no human recorded these lines. No audio from World of Warcraft is used, sampled or redistributed. If you'd rather have none of it: /lyra stumm, subtitles stay.

06She talks too much. Or too little.

/lyra leise or /lyra lebendig — or switch off individual categories in the settings. Plus combat quiet, group quiet, /lyra still and /lyra stumm. Lyra starts deliberately quieter than most addons; in combat she only says the things that can save your life. If she still talks too much for you, that is a bug report, not a feature — the dosage is tuned on exactly that.

07Does it cost performance?

She listens for events, she does not poll: at rest she does nothing, in combat she compares a few numbers. She hooks the same events Deathlog and DBM hook, has no combat-time rendering of her own and no network traffic. The 34 MB are disk space, not memory — the voice packs are separate folders and load only the line being spoken. A measured figure will stand here as soon as there is one; until then /lyra status shows the memory per package on your own machine.

08Does she send anything anywhere?

No. There is no network code in this addon. Nothing is uploaded, nothing is collected, nothing about other players is stored: no names, no whispers, no group members, no addon channel. Everything she keeps lives in your SavedVariables, on your machine. /lyra debug prints no character, guild or channel names.

09Where does the danger data come from?

From the public Deathlog database, aggregated by zone, level band and grid cell. The data pack is therefore distributed under GPLv3, as that project's license requires, and Deathlog is credited. It contains no character names, no guild names and no last words.

10Why does she look like that?

Because I chose a drawn character rather than an icon. That is taste, and yours may differ: Lyra starts as a small round portrait at the edge of the screen, comes in three sizes, can be moved anywhere — and if you only want the voice and the speech bubble, /lyra figur aus turns the image off entirely. She works without a face.

11Does she work with Deathlog, Questie, unitscan and the Hardcore addon?

All of them. Lyra writes nothing to chat and uses no addon communication channel, so she cannot collide with anything. She deliberately stays silent about other players' deaths — that is Deathlog's job, not hers. For DBM, BigWigs and GTFO she now holds her tongue.

12Why can't I hear anything?

Three usual reasons. One: you installed while the client was running — restart the client completely, a /reload is not enough. Two: /lyra stumm is active. Three: the in-game “Dialog” sound channel is muted, and everything except the warnings runs on it. The warnings themselves — health, breath, falls — have run on “Master” since 0.11.0 and are no longer swallowed by a muted dialogue channel. /lyra status lists which voice packs are loaded.

13Will there ever be paid features?

No. The addon is free and complete, and it stays that way. No premium version, no paid voice packs, no early access for supporters. Blizzard's add-on policy forbids paid features, and we agree with it.

Get involved

Get involved

Lyra is built by one person, and the best lines in the addon so far came from the community. The Discord server and the repository are open — both are new and small, and that is exactly why every line there gets read. Behind each point is the route that arrives fastest; if you would rather write an e-mail, the address is in the legal notice and on the contact page.

  • Report a bug.Attach /lyra debug — it prints no character, guild or channel names, and it usually turns days of guessing into minutes.→ GitHub Issues
  • Suggest a line.What should Lyra say when something happens that she has no words for yet?→ Discord
  • Translate.Interface and phrases are fully localizable. English and German are done, everything else is open.→ GitHub Issues
  • Send a clipwhere Lyra saved your run. Or one where you didn't listen to her — those are more honest.→ Discord

Support

Lyra Companion is free and complete, and it stays that way. No premium version, no paid voice packs, no early access.

If you want to leave something anyway, you can do it here: one-off, any amount, straight to the operator (Strukturaflow IT e.U., Austria), processed by Stripe.

The money goes into domain, server, rendering new voice lines and sprite sets — and into hours.

What you get: a thank-you by e-mail. That is all there is today, and we promise nothing that does not exist yet.

What you never get: features, voices or warnings other players do not have. That would be a paid feature inside an add-on, and Blizzard's policy rightly forbids it.

If you cannot or do not want to give money: a bug report with /lyra debug, a translated line or a clip where you did not listen to her is worth just as much.

Support the project

Secure via Stripe, one-off, any amount.