참치게시판/
LibrAA - 호기심에 만들어본 일본 AA 번역 뷰어
38
0

#11227LibrAA - 호기심에 만들어본 일본 AA 번역 뷰어

작성자 참나기수작성일 2026-04-06 (월) 13:06:27갱신일 2026-06-07 (일) 16:27:41
Attachment
원래는 AA를 LLM이 인식할 수 있는지에 대한 궁금증으로 시작한 이 프로젝트는, 어쩌다보니 AA 번역 뷰어가 되어버렸다...

앵커판에서나 쓸 물건이지만 저기에 주제글을 파면 분명히 나도 놓칠 게 뻔하므로 내 고향인 참치게시판에 올린다.
최근 위키 문서를 RAG로 말아서 활용하는 사례들을 종종 보다보니 'AA도 RAG로 말아주면 의미 검색이 될까?'라는 의문이 들어 조사 시작.
AA에 대한 건 사실 전혀 알지 못하기 때문에 나무위키를 좀 뒤져가며 겨우 AAHub라는 곳을 찾음.

.mlt 파일 자체는 OrinrinEditor 한국어화 때 봤기 때문에 대강은 알고 있었음.
(실제로 열어보니 정말 너무 단순한 파일이었다...)

적당히 주술회전(읽을 수 있는 한자가 이것밖에 없었음.) mlt 파일을 하나 내려받아서 LLM으로 인식할 수 있는지 확인.
AA를 LLM이 인식하고 이해할 수 있나? -> 못 했음.
그럼 AA를 이미지로 찍어서 보여주면 이해하나? -> 못 함.

그럼 AA에 대한 설명은 사용자가 작성한다고 치고 임베딩만 LLM이 하도록 시켜보자. -> 이거 내 잘못일 수도 있는데 아무튼 실패함.

쪼금 화가 났지만 일단 만들어뒀던 코드가 AA를 보관, 감상하는 용도로는 쓸 수 있겠다 싶었음.
그래서 뚝딱뚝딱 고치고 나니 일종의 아카이브 뷰어가 완성됨.

-> 이쯤에서 나는 "여기에 번역기능만 달면 일본어 AA 편하게 볼 수 있는 거 아님?"
-> 방향을 틀어 번역 기능이 포함된 뷰어를 개발하기 시작.
다행이라고 해야할지, 일본 AA들은 포맷이 다 비슷한 듯하다...

RSS 사이트 사이트에서 적당한 AA 작품 하나를 긁어서 파싱함.
(RSS 사이트는 예전에 웹 AA 편집기 한국어화하면서 갔던 적이 있었음.)

파싱 자체는 매우 잘 되나 그 이후부터 문제 발생 시작.

-> 원래는 리스폰스 데이터를 통째로 넣고 "너가 알아서 Haman-readable한 내용만 한국어로 번역해." 수준.
-> 아마도 검은색을 표현하기 위해 한자 (二)를 많이 쓰는 모양.
-> AA가 '둘둘둘둘' 같은 걸로 도배됨.
프롬프트를 깨작거리다보니 결국 어떻게든 문장 같은 것들만 번역하기 시작.
-> 하지만 정확도가 너무 떨어진다...

그래서 드래그로 문장을 선택한 뒤 번역하는 기능을 개발함.
이 부분은 단순히 번역 요청이었으므로 매우 잘 동작.

-> 여기서 나는 생각했다.
-> "일본어는 띄어쓰기가 없으니까 공백, 특문을 기준으로 데이터를 쪼개서 문장 단위로 '이게 읽을 수 있는 문장인지'를 먼저 LLM이 구분하도록 하면 되지 않나?"
우선 정규표현식으로 적당히 공백이 아닌 일본어 문자, 숫자 등의 문장을 뽑아내서...
그걸 LLM한테 던진다.

"이걸 한국어로 번역하고 의미가 있는 문장인지 분석해서 알려줘."

-> 몇 번의 프롬프트 수정 및 최적화 과정이 있었으나 어찌저찌 그냥저냥 쓸만한 결과가 나옴.
이후에는 UI 수정이나 몇 가지 편의기능 같은 걸 좀 추가한 뒤 릴리즈.

지금부터 사용법에 대해 강의하겠음.
Attachment
처음 프로그램을 실행하면 요래 황량한 화면이 뜬다.
시리즈 칼럼에서 + 버튼을 누르면 시리즈(폴더 역할)를 만들 수 있다.
스레드 칼럼에서 + 버튼을 누르면 빈 스레드를 만들 수 있다. 빈 스레드에는 직접 리스폰스를 하나씩 채울 수 있다.

하지만 빈 스레드로 작업하는 것은 너무 번거롭기 때문에...
스레드 칼럼의 가장 왼쪽 버튼(붙여넣기)을 누르면 데이터 붙여넣기 창이 뜬다.
Attachment
일본어로 된 야루오? 스레드의 본문을 긁어서...
Attachment
요렇게 제목과 함께 채워넣어준다.
Attachment
파싱 버튼을 누르면 데이터를 적당히 리스폰스별로 구분해준다.
저장 버튼을 누르면 이제 스레드 칼럼에서 해당 스레드를 볼 수 있다.
Attachment
요런 식.
(나는 지금 시스템 테마가 다크로 되어있어서 앱이 죄다 시커멓게 나온다. BG 슬라이드 토글을 활성화 하면 뷰어 부분만 흰색이 된다.)
LibrAA는 (테스트를 했어야 했기 때문에)여러 LLM 프로바이더를 지원한다.
Gemini, OpenAI, Claude, Ollama.

Ollama를 사용할 수 있는 환경이고 난 무조건 무료로 번역을 돌려야겠다고 한다면 Ollama를 쓰면 된다.

하지만 대부분의 경우에는 충분한 수준의 모델을 돌릴만한 컴퓨터 성능을 가지고 있지 않을 것이고, 내 32GB 짜리 맥 스튜디오에서도 말도 안 되는 소음과 열을 뿜어댔으므로 그냥 몇 백 원 정도 내고 Gemini를 사용하자...
Attachment
https://aistudio.google.com/api-keys

Google AI Studio에서 API 키라는 것을 만들어주자.
별도로 결제 정보를 등록하지 않았다면 무료로 사용할 수 있으니(물론 매우 느림) 걱정하지 않아도 된다.
Attachment
키가 생성되면 생성된 키를 복사한 다음...
Attachment
LibrAA 설정에서 LLM 프로바이더를 Gemini로 변경하고 복사한 API Key를 넣어준다.

Ollama나 다른 프로바이더 또는 유료 계정을 쓸 정도라면 대충 봐도 알아먹을 테니 알아서 하면 될 것이고...
뭔지 잘 모르겠다면 아래와 같이 설정한다.

모델: 2.5 Lite(압도적으로 싸다! => 무료 계정에서도 어느 정도 쓸 수 있다! => 일본어 번역 정도는 충분!)
동시번역수: 1(유료 계정이라면 알아서 하면 된다. 무료 계정은 분당 요청할 수 있는 횟수가 정해져있기 때문에 무조건 1이다. 1로 해도 리밋에 걸린다...)
블록 배치 번역: 활성화(유료 버전이라도 딱히 활성화하지 않을 이유는 없음...)
Attachment
상단 툴바의 번역 버튼을 누르면 번역을 시작한다.
무료 버전이라면 시간이 꽤 걸리고... 중간중간 작업이 취소될 수도 있으니 끝날 때까지 알아서 계속 번역 버튼 눌러주면 된다...

앱 하단의 "번역 중" 바를 눌러보면 번역 작업 상태를 확인할 수 있다.
(꼭 볼 필요는 없음.)
스크린샷을 찍기 귀찮아 말로만 설명하지만 몇 가지 기능이 있다.

- 만약 문장 중 일부가 번역이 안 된 경우
Shift 키를 누르고 일본어 문장 위로 커서를 올리면 문장이 선택된다.
클릭하면 해당 문장만 따로 번역해준다.

- 만약 특정 리스폰스만 번역하고 싶다면
리스폰스 오른쪽에 보면 번역 아이콘이 있다.
누르면 번역한다.

- 이미 번역이 한 번 돌아서 추가로 번역이 안 돼요!
상단 툴바의 번역이나 리스폰스 우측의 번역 버튼의 경우 Shift 키를 누른 상태에서 클릭하면 강제로 번역을 수행한다.

- AA가 좀 깨진 부분이 있어서 직접 수정하고 싶어요.
리스폰스 우측 편집(연필) 버튼을 누르면 해당 리스폰스의 내용을 수정할 수 있다.

- 시리즈랑 스레드 칼럼에 있는 버튼은 뭐죠?
LibrAA는 .laa라는 파일을 통해 데이터를 백업하거나 사용자들간 공유할 수 있다.
시리즈/스레드 목록에서 Export 버튼을 누르면 지정된 경로에 .laa 파일이 생성된다.
나중에 새 컴퓨터에서 자신이 수집한 작품들을 불러오고 싶거나 다른 사람들에게 작품을 공유하고 싶다면 해당 파일을 전송해서 사용하면 된다.
(칼럼의 Import 버튼을 사용하면 .laa 파일을 불러올 수 있다. .laa 파일을 Import할 때 특정 시리즈를 선택한 상태에서 Import하면 모든 스레드가 해당 시리즈로 들어간다.)

- 시리즈/스레드 목록에 있는 버튼은 뭐죠?
왼쪽부터 순서대로, 정보 편집, .laa로 Export, HTML로 출력, 삭제다.

*사실 앱 매뉴얼에 이런저런 내용이 적혀있으니 그걸 참고하면 된다.
LLM 비용(유료로 사용하는 경우)에 관해 얘기하자면, Gemini 2.5 Flash Lite 기준으로 대충 1000개 정도 리스폰스를 번역해봤는데 1200원 정도 나왔다.
(테스트 하면서 막 돌리고 지우고 다시 돌리고 한 것들이 있어서 실제로는 저것보다 더 적게 나올 수도 있다.)
블럭 단위로 번역을 진행하고 번역 이후에도 기존 원어로 된 블럭이 유지되므로 잘못 번역이 된 부분을 다시 원어(AA)로 되돌릴 수도 있지만 귀찮기 때문에 그 부분은 구현하지 않았다.
다 만들고 나서야 깨달은 건데 블록(문장일 수도 있는 녀석들) 수집, 블록 별로 meaningful 계산 및 번역, 원 위치에 번역된 내용 삽입 <- 이 원리만 똑 떼서 브라우저 확장기능으로 만들면 굳이 뷰어 같은 거 신경쓸 필요 없이 브라우저 내에서 자체적으로 번역해서 볼 수 있는 거 아닌가...싶긴 한데 역시 그 부분도 구현하기 귀찮기 때문에...
Attachment
생각보다 별 거 아닌듯해서 크롬 확장도 만들었다.
잘 동작하는듯.

https://github.com/tunaground/LibrAA/releases

Download LibrAA-Extension-*.zip from Releases
Extract the zip
Go to chrome://extensions
Enable "Developer mode"
Click "Load unpacked" and select the extracted folder
블럭 배치를 적용했더니 속도가 엄청 빨라졌는데, 뭐 하나만 추가로 고치면 돼서 고치는 와중에 클로드가 터졌다..
방금전에 뭔가 궁금해져서 캔드민 깃허브를 뒤적이다가 이걸 발견하고 이런게 있었네? 했었는데
이런 글을 내가 발견하기 몇시간전에 올렸었을 줄이야.
왜... 내 깃헙을 뒤지는 거야...
오전에 대충 사파리 익스텐션까지 말았다.
외계어가 한가득 🥰
>>26 참치JS와 관련해서 살짝 구경하고싶었을뿐이야..
>>29
사실 퍼블릭으로 공개한 시점에서 내 저장소를 까보는 건 자유지만, 타인에게 내 코드를 보여주는 건 아무래도 떨린단 말이지.

생각해보니 참치JS는 내가 짠 코드도 아니긴 한가... 95% 이상은 AI가 짠 거니까.
번역 비용이 좀 많이 나오는데 어케 안될까..
무료 계정이면 비용이 나올리가 없고...
유료 계정으로 전환해서 쓰고 있다는 의미인데, 유료 계정일 경우 비용을 안 내고 쓸 방법은 없지.

아니면 구글 내장 번역기능을 쓰는 건?
자동으로 전체 페이지 번역이 안되긴 하지만 적당히 클릭해주면 번역되니까.
무료로 AI를 제공하는 사업자가 나타나지 않는 이상 무료로 번역을 할 수 있는 방법은 없어.
내가 돈을 받는 게 아니라 AI 제공업체에서 돈을 받는 거니까, 굳이 따지자면 내가 아니라 구글이나 OpenAI한테 무료로 쓸 수 있게 해달라고 하는 게 맞지.

결국 돈을 전혀 내고 싶지 않다면 아래 3가지 방법 밖에 없어.
- 크롬 내장 번역기능을 이용한다.(수동으로 문장 클릭해줘야함.)
- Gemini 무료 등급 키를 사용한다.(속도는 꽤나 느려짐.)
- 본인 컴퓨터에서 직접 LLM을 구동(Ollama)한다.(컴퓨터 성능이 매우 좋아야함...)
만약 무료로 AI(API)를 쓸 수 있는 프로바이더를 알려준다면 그걸 추가해줄 수는 있다.
내가 찾아봤을 때는 딱히 없었어.
아... 혹시 크롬 번역을 몰랐을 수도 있으니 설명하자면, 정확하게 "크롬"에 한해서 내장 번역 도구를 쓸 수 있어.
이 경우엔 "의미 있는 문장인지 구분"하는 건 불가능하기 때문에 수동으로 문장을 클릭해줘야하긴 한데, 번역 자체는 무료로 쓸 수 있다.
크롬일 경우에는 PROVIDER 쪽에 "브라우저 내장 번역"이라는 항목이 나오니까 그걸 시도해봐.
Gemini 2.5 Flash Lite 기준으로 무료 키 돌려봤는데 평범하게 읽는다고하면 그렇게 느린 편은 아닌 것 같은데.
하나 돌려두고 기다렸다가 -> 다음 거 돌려두고 기존에 돌려둔 거 읽기 -> 반복...하면 충분히 무료로 쓸만하지 않나?