판마다 무엇이 바뀌었는지. 날짜는 한국 시간(KST)이고,
내놓은 날입니다 — 만든 날이 아닙니다.
This page is in Korean. Version numbers and dates
(KST, UTC+9) read the same in any language; the newest release is
0.2.8, published 2026-09-16 08:59 KST.
0.2.8 지금 판
스킨 바꾸기 · 따라갈 앱 · 트레이
오른쪽 단추에서 스킨을 바꿉니다. 여태는 파일을 찾아 창에 끌어다 놓아야 했습니다. 「생김새는 당신이 고른 스킨이 정한다」고 말해놓고 정작 그 동작이 제일 불편했던 셈입니다. 최근에 연 스킨 다섯도 같이 나옵니다 — 여러 개를 번갈아 쓰는 사람이 매번 파일을 찾아 헤매지 않게. 옮기거나 지운 것은 목록에서 빠집니다(눌러도 아무 일 없는 줄을 남기지 않습니다).
따라갈 앱을 고를 수 있습니다. 크롬에 영상을 띄워둔 채 멜론을 켜면 Windows 는 하나만 「현재」로 지목합니다 — 멜론을 틀었는데 창에 유튜브가 뜨는 일이 그래서 생겼고, 고장으로 보였습니다. 이제 오른쪽 단추에서 하나를 고정하면 그것만 봅니다.
고정하면 읽기도 조작도 같은 세션을 봅니다. 화면엔 멜론이 떠 있는데 정지 단추가 크롬을 멈추면 고정하지 않은 것보다 나쁘니까요. 고정한 앱이 조용하면 창도 조용합니다 — 다른 앱으로 넘어가면 고정한 뜻이 없습니다.
트레이에 넣을 수 있습니다. 여태 최소화를 안 달아둔 이유가 있었습니다: 창이 작업 표시줄에 없어서 숨기면 되살릴 길이 없었습니다. 트레이가 그 길입니다. 딸린 창도 같이 숨었다가 열려 있던 것만 같이 돌아옵니다. 트레이를 못 쓰는 환경에서는 조용히 건너뜁니다 — 아이콘 하나 때문에 플레이어가 안 뜨면 말이 안 됩니다.
0.2.7
창에서 집으로 가는 길
주소가 --probe 출력과 서재·맞이 창에는 있었는데, 정작 사람들이 늘 보는 메인 창에는 없었습니다. 서재는 L 을 눌러야 열리는 창이라, 그걸 모르는 사람은 주소를 영영 못 봅니다.
메인 창은 남의 스킨 그림이라 우리 글자를 얹을 수 없습니다. 그래서 오른쪽 단추 메뉴를 달았습니다 — 클래식 Winamp 도 그랬으니 어색하지 않습니다.
키로 되던 것을 그대로 옮겨 적었습니다. 키를 아는 사람은 이미 알고, 모르는 사람은 여기서 처음 봅니다 — 단축키를 적어두는 자리이기도 합니다.
서재·맞이 창의 주소는 이제 눌러서 열립니다. 적어만 두면 손으로 옮겨 적어야 했습니다.
설정 파일(settings.json)에도 판 번호와 주소를 같이 적습니다. 파일을 열어본 사람에게도 길이 있어야 합니다 — 무엇이 만든 파일인지 모르면 그냥 지우게 되고, 어디서 왔는지 모르면 물어볼 곳도 없습니다.
브라우저를 여는 것이 전부입니다. 이 프로그램은 스스로 네트워크를 쓰지 않습니다 (방침에 적어둔 대로, 테스트가 강제합니다).
0.2.6
그냥 실행해도 창이 뜹니다
teulda.exe 를 더블클릭하면 아무 일도 일어나지 않았습니다. 스킨 경로를 안 주면 프로그램이 오류를 내고 죽었는데, 창을 얼릴 때 콘솔을 숨겨두었으므로 그 오류마저 갈 곳이 없었습니다. 받은 사람에게는 빈 화면이었습니다.
첫 판부터 그랬습니다. 우리 쪽 시험은 늘 스킨을 주고 띄워봐서 이 길만 한 번도 안 지나갔습니다. 랜딩에는 「압축을 풀고 실행하면 끝입니다」라고 적혀 있었으니, 프로그램이 아니라 글이 거짓말을 하고 있었던 셈입니다.
이제 스킨 없이 실행하면 고르는 창이 뜹니다. 끌어다 놓거나, 단추로 고르거나, 스킨을 받으러 갈 수 있습니다.
스킨은 여전히 같이 넣어 드리지 않습니다. 전부 만든 사람들의 저작물입니다 — 포맷을 읽는 것과 남의 그림을 배포하는 것은 다른 일입니다. 그래서 이 창도 스킨 아트를 쓰지 않습니다.
한 번만 뜹니다. 고른 스킨을 적어두고 다음부터는 바로 그 스킨으로 엽니다. 창에 다른 스킨을 끌어다 놓으면 그것을 적어둡니다 — 바꿔놓고 다시 켰더니 옛 스킨이면 바꾼 것이 없던 일이 되니까요.
0.2.5
프로그램이 자기가 누구인지 말합니다
받은 파일에 아무 이름도 없었습니다. 속성을 열어보면 제품 이름도, 판 번호도, 회사도, 저작권도 전부 비어 있었습니다. 서명은 「누가 만들었나」를 증명하지만 Windows 가 대화 상자에 띄우는 줄은 파일 설명인데, 그 칸이 비어 있으면 서명이 멀쩡해도 파일 이름만 덩그러니 나옵니다.
그리고 프로그램 안 어디에도 teulda.com 이 없었습니다. zip 이나 exe 를 친구에게 받은 사람에게는 프로그램이 전부입니다 — 다음 판이 어디 있는지, 무엇을 받은 것인지 알 길이 없었습니다.
셋을 넣었습니다.
파일 속성에 이름·판 번호·회사·저작권. 판 번호는 pyproject.toml 한 곳에서 오므로 손으로 맞출 일이 없습니다.
서재 창 맨 아래에 틀다 0.2.5 · https://teulda.com — 스킨을 쓰지 않는 유일한 창이라 우리 글자를 얹을 수 있는 자리가 거기뿐입니다. 마우스로 골라 복사할 수 있습니다.
--probe 표 맨 위에도 같은 줄. 그 표는 그대로 복사해 붙여넣게 되는데, 어느 판에서 나온 것인지 없으면 나중에 옛 표와 새 표를 못 가립니다.
0.2.4
exe 하나로도 받을 수 있습니다
크롬이 내려받기를 막는다는 이야기를 듣고 알아봤습니다. 서명은 멀쩡했습니다 — 엣지는 바로 받아집니다(엣지가 쓰는 SmartScreen 은 서명을 봅니다).
문제는 누르는 파일이 zip 이라는 것이었습니다. zip 에는 서명이 붙지 않습니다. 서명된 teulda.exe 는 그 안에 들어 있어서, 크롬이 보는 파일에는 게시자가 없는 셈이었습니다.
그래서 받는 것 자체가 서명된 exe 인 판을 하나 더 냅니다.
둘은 같은 프로그램이고 같은 이름으로 서명돼 있습니다. 한 파일본은 실행할 때마다 임시 폴더에 풀기 때문에 뜨는 데 3초쯤 더 걸립니다 — 재본 값입니다 (3.2초 → 6.8초). 그래서 zip 을 없애지 않았습니다.
그 밖에: PC 에서 맨 아래 상표 문구가 두 줄로 끊기던 것을 한 줄로 폈습니다.
0.2.3
브라우저 이름이 나옵니다
실제로 음악을 틀고 --probe 를 돌려보고서야 알았습니다.
서재의 「어디서」 칸에 브라우저가 전부 chrome.exe 처럼 원문으로 떴습니다. Windows 는 시작 메뉴를 chrome 으로 등록하는데 창구는 chrome.exe 를 주고, 그 한 칸 차이를 못 넘고 있었습니다.
하필 거기가 제일 아픈 자리입니다 — 국내 음원을 브라우저로 듣는 경우가 가장 흔한데, 그게 이름이 없었던 셈입니다. 이제 이렇게 나옵니다.
지어내지는 않습니다. 떼는 것은 .exe 하나뿐이고 나머지는 글자 그대로 맞아야 합니다. Firefox 처럼 Windows 가 알 수 없는 값으로 등록한 것은 예전처럼 원문 그대로 둡니다.
일본어 안내문에서 마침표와 .wsz 가 붙어 있던 것도 고쳤습니다.
0.2.2
10년치를 넣어도 창이 멎지 않습니다
가져오기(0.2.1)와 찾기를 같이 쓰면 서재가 못 쓰게 되는 것을 뒤늦게 쟀습니다. 각각은 멀쩡했습니다.
### 쌓여도 느려지지 않게
12만 줄을 넣고 실측했습니다.
그리고 찾기는 글자를 칠 때마다 돌고 있었습니다 — 「아이유」 세 글자면 8초가 줄줄이 밀렸습니다. 이제 손을 멈추면 찾습니다.
### 메모를 달 수 있습니다
서재에 「메모」 칸이 있고 찾기도 메모를 훑는데, 메모를 다는 길이 없었습니다. 「메모 달기」 단추를 넣었습니다. 줄을 두 번 눌러도 됩니다.
### 가져오기·내보내기를 실제 규격에 맞췄습니다
문서를 찾아보고 셋을 고쳤습니다.
Last.fm 날짜가 로캘을 타고 있었습니다.01 Jan 2021 16:16 을 읽는 데 %b 를 썼는데, 무엇이든 시스템 로캘을 잡으면 한국어 Windows 에서 「Jan」을 못 읽습니다 — 그러면 모든 Last.fm 가져오기가 조용히 실패합니다. 달 이름을 직접 읽도록 고쳤습니다. 재현해 보고 고친 것입니다.
ListenBrainz JSON 이 그쪽이 받는 모양이 아니었습니다. 맨 배열로 냈는데, 그건 셋 중 어느 것도 아니었습니다 — 그쪽이 내보내는 것은 JSONL 이고 받는 것은 listen_type·payload 로 감싼 모양입니다. 이제 API 에 그대로 올릴 수 있습니다.
Spotify 의 skipped 칸은 안 봅니다 — 2015~2022 7년치가 전부 false 라 못 믿습니다. 들은 시간으로 거르는 편이 어느 해에나 똑같이 맞습니다.
### 서재를 열자마자 닫으면 죽을 수 있었습니다
앱 이름을 받아오는 데 2초쯤 걸려서 딸린 갈래에서 받아왔는데, 다 받은 뒤에 창에 알리는 방식이었습니다. 그 2초 안에 창을 닫으면 이미 없는 창에 말을 거는 셈이라 프로그램이 통째로 사라집니다. 전체 점검을 돌려보니 여섯 번에 다섯 번 그랬습니다.
이제 갈래는 표만 채우고, 창이 스스로 들여다봅니다. 창이 닫히면 보던 것도 같이 사라지므로 어긋날 자리가 없습니다.
### 못 읽는 파일이 막다른 길이 아닙니다
「아는 모양이 아닙니다」만 보여주고 있었습니다. 이제 무엇을 봤는지 말합니다 — 첫 줄의 칸 이름이나 첫 줄 글자. 그대로 이슈에 붙이시면 읽는 법을 더하겠습니다.
0.2.1
눈으로 보고서야 보인 것들
0.2.0 을 내놓고 나서 서재 창을 처음으로 그려서 봤습니다. 단위 테스트는 「줄이 몇 개인가」를 보지, 창이 쓸 만한지는 안 봅니다.
탭을 바꾸면 창이 커지던 것 — 「기록」 칸의 내용이 창 크기를 밀어 올리고 있었습니다. 목록으로 돌아와도 안 줄었고, 줄이 쌓일수록 더 커졌습니다. 이제 그 칸은 스크롤에 담깁니다.
「어디서」 칸이 잘려 출처를 못 가리던 것 — 「가져온 기록 · Spotify」와 「가져온 기록 · Last.fm」이 둘 다 「가져온 기록 - …」 이었습니다.
빈 시간대가 막대가 아니라 밑줄로 보이던 것 — 하루가 스물넷으로 안 읽혔습니다.
공유 카드에 v0.1.0 이 박혀 있던 것 — 판 번호를 손으로 적어둔 자리였습니다. 이제 pyproject.toml 에서 읽어옵니다.
실행 파일이 자기를 0.1.0 이라고 말하던 것 — __version__ 만 안 올렸습니다. 테스트가 대조합니다.
기능은 0.2.0 과 같습니다.
0.2.0
쌓인 줄이 값을 내기 시작합니다
0.1.0 은 적는 것까지였습니다. 이 판은 적어둔 것으로 무엇을 할 수 있는가입니다.
### 서재에서 찾기
서재 창 위쪽 칸에 적으면 곡·아티스트·앨범·메모·앱 이름을 한꺼번에 훑습니다. 낱말을 여럿 적으면 전부 든 줄만 남습니다. 이 기능은 줄이 쌓일수록 값이 오릅니다 — 5년치가 쌓인 뒤에 "그때 그 곡" 을 못 찾으면 기록은 쌓이기만 하고 아무도 안 봅니다.
### 기록 화면
서재 창의 「기록」 칸입니다. 하루 24시간 막대, 손으로 고른 곡과 끝까지 들어 저절로 남은 곡, 서로 다른 곡 수와 되풀이 횟수, 가장 많이 들은 곡 여덟.
같은 곡은 같은 곡으로 셉니다.Song (feat. X) · Song - Remastered 2011 · SONG 을 세 곡으로 세면 「가장 많이 들은 곡」이 조용히 틀립니다. 반대로 Live·Acoustic·Remix·Radio Edit 은 다른 녹음이라 안 묶습니다 — 묶으면 "라이브를 몇 번 들었나" 가 영영 사라집니다.
### 지난 기록 가져오기
Last.fm 의 CSV 내보내기, Spotify 의 StreamingHistory*.json 과 확장 기록을 읽어 과거를 흡수합니다. 빈 서재로 시작하는 것과 10년치가 든 서재로 시작하는 것은 다른 제품입니다.
30초 미만은 안 가져옵니다 — 건너뛴 것을 들은 것으로 세면 모든 숫자가 부풀어 오릅니다. 같은 파일을 두 번 넣어도 두 번 들어가지 않습니다. 몇 줄을 건너뛰었는지 끝에 말해줍니다.
### 내보내기
서재의 내보내기에 셋이 있습니다.
엑셀용 CSV — BOM 을 달아 엑셀이 한글을 안 깨뜨립니다.
Last.fm · 스크로블러 CSV — 받는 도구들이 읽는 모양. 틀다가 다시 읽을 수도 있어서, PC 를 옮길 때 기록을 통째로 들고 갑니다.
ListenBrainz JSON — 그쪽이 쓰는 모양으로 냅니다 (저희가 그 서비스에 실제로 넣어 확인하지는 못했습니다).
전부 누를 때만 나갑니다. 저절로 어디론가 올라가는 경로는 없습니다.
### 방송용 자막 (OBS)
서재 창에서 켜면 지금 곡을 now.txt 에 계속 씁니다. OBS 의 텍스트 원본에서 「파일에서 읽기」로 물리면 자막이 저절로 바뀝니다. 곡·아티스트를 따로 쓰는 파일도 같이 나갑니다.
켠 사람만 파일이 생깁니다. 묻지도 않고 디스크에 파일을 만들지 않습니다.
### 앱 이름
서재의 「어디서」 칸은 이제 대부분 사람이 읽는 이름으로 나옵니다. 손으로 확인한 표에 없으면 Windows 에게 물어봅니다 — 시작 메뉴에 등록된 앱은 자기 이름을 등록해 두었고, 그건 우리가 지어낸 것이 아닙니다. 그래도 모르면 예전처럼 원문 그대로 나옵니다.
### 설치 (선택)
시작 메뉴에 두고 .wsz 를 더블클릭해 열고 싶으면 같이 든 install.cmd 를 실행하세요. 관리자 권한을 묻지 않고, 당신 계정 안에만 씁니다. uninstall.cmd 나 설정 > 앱 에서 되돌립니다. 글자로 읽을 수 있는 설치 프로그램입니다 — 메모장으로 열어 무엇을 하는지 보고 나서 실행하셔도 됩니다.
### 고친 것
서재의 「어디서」 칸이 어떤 앱은 끝내 원문으로 남던 것 — --probe 가 AUMID 를 25자에서 잘라 찍고 있었고, 그 잘린 값이 표에 들어가 있었습니다. 이제 자르지 않습니다.
### 받은 뒤
압축을 풀고 teulda.exe 를 실행합니다. 0.1.0 에서 올리는 경우, 기록 (%LOCALAPPDATA%/teulda/scraps.jsonl)은 그대로 이어집니다.
0.1.0
첫 판
### 무엇인가
틀다는 음악을 재생하지 않습니다. Windows 가 이미 재생 중인 것을 클래식 Winamp 스킨(.wsz) 창에 띄우고, 거기서 조종합니다.
멜론·지니·벅스·FLO 의 PC 앱, 유튜브 뮤직, Spotify 웹, 그냥 <audio> 만 쓰는 사이트까지 — Windows 의 미디어 창구(SMTC)에 등록되는 것이면 다 보입니다. 2026-09-14 에 실제 PC 에서 배포용 빌드로 확인했습니다.
### 창 다섯
메인 — 제목·재생 시간·진행바·전송 버튼·셔플·반복·볼륨·kHz·모노/스테레오
이퀄라이저 — 클래식 그대로. 소리는 바뀌지 않습니다 (아래 참고)
플레이리스트 — 지나간 곡의 기록. 재생 목록이 아닙니다
앨범아트 (A) — 클래식에 없던 창이라 그 스킨의 플레이리스트 조각으로 창틀을 짭니다
서재 (L) — 스크랩한 곡을 보고 지우고 CSV 로 내보내는 곳
### 한글 제목이 나옵니다
클래식 스킨의 글꼴 그림에는 ASCII 밖에 없어서, 원래대로라면 한글·일본어· 중국어·키릴 제목은 글자가 통째로 빠집니다. 못 그리는 글자가 하나라도 있으면 그 줄만 시스템 글꼴로 얹습니다. ASCII 제목은 지금까지처럼 스킨 글꼴로 그립니다 — 그게 이 창의 생김새니까요.
### 스크랩
S 로 지금 곡을 이 PC 에 한 줄 적어둡니다. 창이 앞에 없어도 Ctrl+Alt+S 가 먹습니다 (그 조합을 이미 쓰는 프로그램이 있으면 되는 것을 찾아 내려가고, 잡힌 키를 서재 창에 적어둡니다). 끝까지 들은 곡은 누르지 않아도 남되, 끝에 도달하는 것을 지켜봤을 때만입니다 — 손으로 고른 것과 갈라서 표시합니다.
기록은 이 PC 안에만 있습니다. 무엇을 언제 들었는지는 개인정보라, 기록을 다루는 코드에는 네트워크를 쓰는 줄이 아예 없습니다. 내보내기는 직접 눌러야 일어납니다.
### 스킨
10만 개 넘게 남아 있는 클래식 .wsz 를 그대로 읽습니다. 규격을 안 지킨 것도 그립니다 — 진행바를 307×5 로 넣은 스킨, 글꼴 파일이 중간에 잘린 스킨, region.txt 문법이 제멋대로인 스킨. 있는 만큼 잘라 그리고 못 읽는 조각만 버립니다.
스킨은 함께 배포하지 않습니다. 전부 개별 제작자의 저작물입니다.
### 안 되는 것, 일부러 안 한 것
이퀄라이저는 소리를 바꾸지 않습니다 — 오디오 스트림을 갖고 있지 않아 필터를 걸 지점이 없습니다
플레이리스트는 앞이 아니라 뒤를 봅니다 — 창구가 "지금 이 곡" 하나만 주기 때문입니다
kbps 칸은 비워둡니다 — 파일을 디코딩하지 않아 알 방법이 없고, 같은 자리에 다른 뜻의 숫자를 넣으면 거짓말입니다
최소화 버튼은 연결하지 않았습니다 — 작업 표시줄에 없는 창이라 최소화하면 되살릴 수 없습니다
Windows 전용입니다
### 받는 곳
https://teulda.com 의 내려받기 단추입니다. 파일은 Cloudflare R2 에 있고 우리 도메인이 그대로 흘려보냅니다 — 중간에 계정을 만들라거나 광고를 거치는 곳이 없습니다. 이어받기(Range)도 됩니다.
### 받은 뒤
압축을 풀고 teulda.exe 를 실행합니다. 설치 프로그램도 관리자 권한도 필요 없습니다. .wsz 파일을 창에 끌어다 놓으면 스킨이 바뀝니다.
PROJECTTEAMFORYOU 이름으로 서명돼 있습니다 (타임스탬프 포함). 다만 표준 인증서에는 평판이 따라오지 않아서, 내려받은 수가 쌓이기 전까지는 SmartScreen 이 한 번 더 물어볼 수 있습니다. 그때는 추가 정보 → 실행 입니다.
받은 파일이 맞는지는 아래 SHA-256 으로 대조하세요.
### 도움을 받고 싶은 곳
서재의 "어디서" 칸은 Windows 가 주는 값(neowizinternet.234211C5E0 같은 모양)을 그대로 보여줍니다. 어떤 값이 어느 앱인지 아는 사람은 그 앱을 쓰는 사람뿐입니다. 쓰시는 앱이 표에 없으면 --probe 로 값을 확인해 [이슈](https://github.com/work517/teulda-release/issues/new?template=app-name.yml)로 보내주세요.