Repository navigation
Releases: T04435/ghostq
Release list
v1.5.0
GhostQ v1.5.0, live at https://ghostq.xyz. RemixQ: the same song for another crowd.
What's new
- RemixQ. Any solo song can be rewritten for another crowd. Pick a new city, new ages, or both; whatever you leave out stays as Qloo reads it for the artist.
- Same song, new crowd. GhostQ reads the new crowd from Qloo and researches it, then rewrites the verses, pre-chorus and bridge around that crowd's signals. The title, key, tempo, sections and the chorus's hook stay.
- Side by side. The original and the remix sit next to each other, each with its own receipts, and the lines that changed for the new crowd are marked ("13 of 21 lines changed").
- One click to the fans' next cities. New songs remember the artist's next-strongest fan areas from Qloo's heatmap, so the remix form offers "Remix for the fans around Wellington" without a search.
- Easy to find. "Remix for another crowd" sits under every finished song, and every song page has the remix form inline. Both versions link each other, and the Library marks remixes.
How RemixQ uses Qloo
- The new crowd's city and ages replace Qloo's for the remix, so those reads are skipped (a picked city skips the heatmap; picked ages skip demographics). Everything else is read again for the new crowd:
/v2/insightsfor themes, styles, films, books and audiences, filtered by the new place and ages. - The quick picks come from the heatmap the original run already read: the next cells after the fans' top area, named by OpenStreetMap. They cost no extra Qloo calls.
Known limits
- CollabQ songs can't be remixed yet.
- Quick picks show only on songs written from v1.5.0, since older songs didn't keep the heatmap's other areas.
Setup and keys: README. What's next: ROADMAP.md.
Licence: MIT.
v1.4.0
GhostQ v1.4.0, live at https://ghostq.xyz. CollabQ: one song for two crowds.
What's new
- CollabQ ("A feat. B"). Under Artist there's a new, optional feat. field (the same Spotify search). With a second artist, GhostQ reads both crowds from Qloo, then asks Qloo what the two crowds share.
- A verse per crowd, a chorus for both. Verse 1 is written for A's crowd in A's voice, verse 2 for B's crowd in B's voice, and the chorus is built on what the crowds share, sung by both.
- Bilingual when the crowds are. Each verse is in its artist's language; when the languages differ, the chorus mixes both.
- Whose signal is whose. Every Qloo receipt shows the crowd it came from: A, B or Shared. The page shows both crowd cards.
- Labelled on every screen. The song page, Library, share preview and Markdown export all read "GhostQ draft for A feat. B, AI-generated, not affiliated with A or B". Singing is blocked if the lyrics name either artist.
- A tidier research trace. Repeated calls to the same Qloo tool fold into one step (for example "Find the artists on Qloo · 2 calls"). Expand it to see each call.
How CollabQ uses Qloo
/searchand/v2/insights(heatmap, demographics, tags, artists, films, books, audiences) run for each artist, as for a solo song./v2/analysis/compare, with one artist on each side andfilter.type=urn:tag, returns the tags both crowds share, ranked by score, plus each side's own tags. The chorus is written from the shared ones.
Known limits
- A CollabQ run makes about twice the Qloo calls of a solo song, so it counts twice against the daily research budget.
- When Qloo has no data on one of the artists, GhostQ asks for it the same way, once per artist.
Setup and keys: README. What's next: ROADMAP.md.
Licence: MIT.
v1.3.0
v1.2.1
v1.2.0
GhostQ v1.1.1
GhostQ v1.1.1, live at https://ghostq.xyz. A patch release with one change: GhostQ now shows which version is running.
What's new
- The version in the footer. A badge on its own line at the bottom of every page reads
v1.1.1 @ <commit>. The tag links to this release and the hash to its commit. A preview or local build adds· preview · <branch>or· local(and· dirty), so it can't be mistaken for production. /api/versionreturns the version, commit, environment, branch and build time as JSON:curl -s https://ghostq.xyz/api/version.- An
app-versionmeta tag in every page, for bug reports.
Under the hood
- The badge is GhostQ's own shadcn Badge in its primary variant, all in monospace.
pnpm check:version-tagfails when a release tag doesn't match package.json.
Everything else is unchanged from v1.1.0.
Licence: MIT.
GhostQ v1.1.0
GhostQ v1.1.0, live at https://ghostq.xyz. Everything that has gone live since v1.0.0, now tagged: real cities, the artist's own voice, and a vocals line that can rap.
What's new
- Live at ghostq.xyz. Songs, their research and their sung MP3s are saved in Neon (Postgres plus Object Storage), so share links and the Library survive restarts.
- Real cities. The crowd city now comes from Qloo's world heatmap: the most popular of the fans' top 30 areas, zoomed in, and named by OpenStreetMap. The old list of 17 cities is gone. When Qloo has no location data, the city question searches any city through Qloo.
- The artist's own voice. Where the artist is from sets the language, slang and images; the crowd sets what the song is about. The artist's own Qloo themes, styles and influences shape the song too.
- Vocals from the artist's data. The singer line has one to three voices, each with a gender, and rap, sung or both, pre-filled from the artist's data. Change it before singing, or pick Instrumental. With two or three voices, the verses take turns and the chorus is sung together.
- Write another, or a new artist. Two buttons under every song. The brief folds into a summary line, and the story field now reads "What's it about? (optional)".
- Plain errors when singing is blocked. Google Lyria sometimes blocks a harmless song under its content policy. GhostQ now says so plainly and offers Try again.
Fixes
- An artist Qloo doesn't know is no longer matched to Qloo's top search result. The run asks for the sound instead.
- Songs written before 22 Oct read their rap or sung from their saved Qloo tags.
- On Vercel, the AI Gateway counts as configured (it authenticates per request), so production no longer reports a missing key.
How GhostQ uses Qloo
/search, pinned by the Spotify id, finds the artist and their own tags./v2/insightswithurn:heatmapover the world, then zoomed into the strongest area, finds where the fans are.urn:demographicsgives the age skew./v2/insightswithurn:tag(themes, styles, genres),urn:entity:artist,urn:entity:movie,urn:entity:bookandurn:audience, filtered by the crowd's place and ages, gives the song's subjects, sound and imagery./searchfor localities answers the city question./v2/tagssemantic search turns your own words into Qloo tags when Qloo doesn't know the act.
Known limits
- There are no rate limits or spend caps yet.
- When an artist is on Spotify but not on Qloo, GhostQ asks for their sound instead of reading their Spotify catalogue.
- Where the artist is from, and their voices, still read MusicBrainz first. Qloo should come first wherever it has the data.
- Lyria's content filter can still block a song; a retry often passes.
Under the hood
- Commits follow Conventional Commits, enforced by a commit-msg hook.
pnpm release-notesdrafts notes from them.
Setup and keys: README. What's next: ROADMAP.md.
Licence: MIT.
GhostQ v1.0.0
GhostQ's first full release. Live at https://ghostq.xyz. Built for the Qloo Agentic Hackathon 2026.
Name an artist. GhostQ reads who their crowd is from Qloo and writes an original song for that crowd, with a Qloo receipt on every line. It can also sing it.
What's in v1.0.0
- Two inputs. The artist (Spotify search, run when you press Enter) and an optional "what's it about". Everything else comes from Qloo.
- The crowd, from Qloo. Inside the run, GhostQ reads the fans' top area from Qloo's world heatmap, up to three age bands the fans skew towards, and the language. The crowd card shows each value and where it came from.
- It asks when Qloo doesn't know. If Qloo has no data on the artist or their fans, the run stops and asks for just the missing fields (the sound, a city, ages), then carries on.
- The agent. Claude, through the AI SDK and Vercel AI Gateway, picks each Qloo call from what it has found so far: genres, artists that sound alike, crowd themes and styles, the local scene, the films, books and audiences the fans love.
- Song sheet with receipts. Lyrics, chords, structure, melody notes and a production brief. Every line cites the Qloo signal behind it. Code checks the receipts and that no real artist, film or book is named, with one repair pass.
- Sing it. Google Lyria 3.5 turns the sheet into a produced, sung MP3 (SynthID-watermarked). The voice matches the artist from MusicBrainz: a person's gender, or a band's members. If MusicBrainz doesn't know, you pick.
- Library and share links. Every song is saved with its research and audio. /song/[id] replays the research. /library lists every song, with search, filters and play in place.
- GhostQ vs a plain AI. /how compares the song with what a model with no Qloo data writes for the same brief.
How GhostQ uses Qloo
/searchfinds the artist, pinned by Spotify id when picked from search./v2/insightswithurn:heatmapover the world finds where the fans are;urn:demographicsgives the age skew./v2/insightswithurn:tag(themes, styles, genres),urn:entity:artist,urn:entity:movie,urn:entity:bookandurn:audience, filtered by the crowd's place and ages, gives the song's subjects, sound and imagery./v2/tagssemantic search turns your own words into Qloo tags when Qloo doesn't know the act.
Known limits
- Lyria sometimes blocks a song for its content policy, even a harmless one, and a retry can pass.
- If an artist is on Spotify but not on Qloo, GhostQ asks for their sound instead of reading their songs (roadmap F2).
- No rate limits or spend caps yet (roadmap item 1).
- Since this tag,
mainhas added Neon storage, the production deploy, "Write another", real cities from Qloo and OpenStreetMap, and the artist's home as the voice. ghostq.xyz runs that newer code.
Setup
Run instructions and keys are in the README. What's next is in ROADMAP.md.
Licence: MIT.
GhostQ v0.1.0-beta.1
GhostQ's first beta: a crowd-aware AI songwriter on Qloo. Built for the Qloo Agentic Hackathon 2026. Not deployed; run it locally (see the README).
What's in v0.1.0-beta.1
- Artist search on Spotify (on Enter). The pick pins the Qloo match by Spotify id.
- Crowd from Qloo: a city from the world heatmap, up to three fan age bands, and a language from the city. You can edit all three before the run.
- Agent: Claude through the AI SDK and AI Gateway chooses Qloo calls for genres, sound-alikes, themes, styles, the local scene, films, books and audiences.
- Song sheet (lyrics, chords, melody, production brief) with a Qloo receipt on every line, checked by code with one repair pass.
- Singing through Google Lyria 3.5.
- /how compares the song with a plain AI's on the same brief.
Known limits
- The city picker is a fixed list of 17 cities.
- The singing voice doesn't follow the artist yet.
- Songs aren't saved.
Licence: MIT.