2025/06/25

, ,

자작 5탄, Gemini API 기반 EPUB/TEXT/SRT 만능 번역기

🤖📖 메모장으로 열리는 건 다 번역한다! AICoding 5탄

제미나이 AI와 함께하는 AICoding 그 대망의 다섯 번째 작품은 Text/Epub 문서 번역기다. 원래 목적은 자작 1탄인 SRT 자막 번역기와 구별되는 텍스트 전용 번역기를 만들려고 했는데, 프롬프트 기능을 추가해 놓고 보니 사실상 텍스트(txt) 기반의 모든 파일은 원본 형식을 유지한 채 번역이 가능한 만능 번역기가 되고 말았다. 한마디로, 메모장으로 열 수 있는 파일은 다 번역할 수 있다는 것. 역시 프롬프트 기반의 AI 번역기는 다재다능하다.

예를 들어, smi 형식의 자막(확장자는 txt로 변경)도 “원래 서식인 SAMI 형식을 유지하십시오”라고 프롬프트를 넣어주면, 말 그대로 SAMI 형식을 유지한 채 번역이 완료된다.

EPUB 번역 기능도 넣긴 했지만, 텍스트 번역에 비해 번역 시간도 더디고, EPUB 기본 구조를 유지하기는 하지만, 원본 구조를 그대로 유지하지는 못한다. 고로 EPUB을 텍스트로 변환한 후 번역할 것을 추천한다.

참고로 AI 번역의 놀라운 품질에 대해선 「AI 번역 어디까지 왔니? 원서의 오류까지 잡아준다네!」 글 참고.

무료 API는 어디까지나 테스트, 소규모 프로젝트, 개인적인 학습 등을 위한 것이지 대량 번역을 위한 것은 아니다. 과도한 사용은 API가 차단될 수 있으며 전체 사용자에게도 악영향을 끼칠 수 있음을 명심하자. 대량 번역은 번역 품질도 더 좋은 유료 API 결제. 비용은 소설 한 권 분량인 20만 토큰 번역하는데 3,780원 정도!

✨ 주요 기능 ✨

  • New SRT 번역 및 번역 프로필 저장/불러오기(v6)!
  • 품질 프리셋(퀄리티 프로필) 기능 추가(v5)!
  • 용어집 주입 기능 추가(v4)!
  • 강력한 Gemini API 활용: 최신 AI 모델인 Google Gemini를 통해 자연스럽고 품질 높은 번역 결과를 얻을 수 있음
  • EPUB 및 TXT 파일 지원: 전자책 표준인 EPUB 파일은 물론, 일반 텍스트 파일(TXT)도 번역 가능
  • 프롬프트 지원: 사용자가 직접 프롬프트를 입력하여 번역 스타일, 번역 대상 언어, 출력 형식(번역본만/원본+번역본 등)까지 세밀하게 제어 가능. 이로써 AI의 능력 최대 활용!
  • 다국어 UI 지원: 한국어와 영어 인터페이를 지원하며, 필요에 따라 다른 언어 UI도 쉽게 추가할 수 있는 구조
  • API 키 관리: 여러 개의 API 키를 등록하고 자동으로 다음 키로 전환하여 안정적인 번역 가능
  • 요청 지연 설정: API 요청 사이에 지연 시간을 두어 API 사용량 제한에 유연하게 대응
  • 청크 크기 조절: TXT, SRT 파일 번역 시 한 번에 API로 보낼 글자 수를 조절하여, 긴 글도 효과적으로 분할 번역
  • 자동 진행 저장: TXT, SRT 파일 번역 시 일정 간격 자동 저장.
  • 번역 완료 후 자동 절전(Windows): 번역 작업 후 자동으로 절전 상태로 전환

⬇ EPUB/TEXT/SRT Translate 다운로드(업데이트: 2025/06/25) ⬇

다운로드: 🔗 테라 링크 / 🔗 픽팍 링크
┗ v4, v5 업데이트는 론 DeRossi님 작품!!!


자작 AI 코딩 시리즈
소설/책 AI 번역을 위한 맞춤 프롬프트 추천

🆕 v6 업데이트 내역 🆕

📜 펼쳐보기 📜
  • 지원 파일 형식 확장
    • SRT 자막 파일 지원 추가 (.srt)
    • TXT, EPUB 외에 SRT 파일 번역 가능
    • SRT 전용 청크 분할 및 자동 구분자 삽입 처리 로직 포함 (|||SUB_SEPARATOR||| 유지)
  • 프롬프트 템플릿 개선
    • 기본 번역 프롬프트에 SRT 구분자 관련 안내 자동 삽입
  • 설정 프로필 기능 추가
    • 번역 설정을 프로필로 저장/불러오기/삭제 가능 (JSON 파일 저장)
    • 번역 프로필만 별도로 공유 가능
    • GUI에 프로필 관련 메뉴 항목 및 대화 상자 추가
  • 진행률 저장 로직 통합
    • EPUB 전용 → TXT, SRT 공용으로 통합
    • 상수 이름 변경 (EPUB_* → 일반화된 이름)
  • 에러 메시지/안정성 개선
    • google.api_core.exceptions 추가로 예외 유형 구분 강화
    • simpledialog 추가 (프로필 저장 시 이름 입력 등)
    • 예외 메시지 다양화 및 정확도 향상
  • 기타 세부 개선 사항
    • 설정 파일에 기본 프로필명 추가 (DEFAULT_PROFILE_NAME = "기본 설정")
    • 내부 변수명 통일성 향상
    • SRT 실패 시 자동 재시도 (구분자 불일치 시 블록 단위 재번역)

🆕 v5.1 업데이트 내역 🆕

gemini-2.5-flash, gemini-2.5-pro(유료), gemini-2.5-flash-lite-preview-06-17 모델 추가

🆕 v5 업데이트 내역 🆕

📜 펼쳐보기 📜
  • 품질 프리셋(퀄리티 프로파일) 기능 추가
    • 사용자가 직접 온도(temperature), top_p, API 모델 설정 대신 사전 정의된 프로파일(FastestFlash, BalancedFlash 등) 선택 가능
    • "Custom" 모드에서는 수동 설정 가능
    • GUI에 "Quality Preset" 드롭다운 추가
  • 파라미터 설정값 범위 및 검증 로직 추가
    • 설정 항목별 허용 범위(SETTING_RANGES) 도입
    • 예: request_delay: 0~60초, temperature: 0.0~2.0 등
    • 유효하지 않은 값은 자동 교정 및 GUI에 메시지 표시
  • 새로운 하이퍼파라미터 설정 추가
    • temperature (창의성 조절)
    • top_p (nucleus sampling)
    • Gemini API 제어 수준 향상
  • EPUB 번역 중간 저장 및 복원 기능 개선
    • 번역 중단 시 다음 실행에서 자동 복원
    • 관련 파일: "_progress" 폴더, "_progress_state.json", ".html_translated_temp" 임시 파일
  • 실패한 번역 파트 별도 로깅
    • 실패한 청크/EPUB 항목에 대해 _failed_parts.txt 생성
    • GUI에서 사용자에게 경고 및 경로 제공
  • 코드 구조 및 안정성 개선
    • 내부 구현 세부 사항 개선
  • UI 텍스트 및 다국어 번역 갱신
    • 다국어 지원 강화

🆕 v4 업데이트 내역 🆕

📜 펼쳐보기 📜
  • API 키 유효성 검사 (핑 테스트) 재활성화 및 개선
    • 번역 전 또는 API 키 첫 사용 시 "hello" 요청으로 유효성 검사 수행
    • 단일 API 키: 번역 시작 시 자동 검사 → 실패 시 오류 메시지
    • 다중 API 키: 각 키의 첫 번역 요청 전 검사
    • 타임아웃 설정(request_options) 적용됨
  • Gemini API 타임아웃 설정 방식 변경
    • client_options 대신 request_options={"timeout": seconds} 사용
    • 기본값: 핑 테스트 60초, 실제 번역 180초
    • 사용자 조작 불필요
  • API 키 관리 로직 개선
    • collections.deque로 활성 키/무효 키 풀 분리 관리
    • 키 순환 및 재시도 로직 강화
    • 여러 API 키 파일에 등록 시 자동 순환
  • 로깅 및 오류 메시지 개선
    • 로그 메시지 명확화, 다국어 지원 메시지 업데이트
    • 로그 창/메시지 박스에서 상세 정보 확인 가능
  • 용어집 주입 기능 추가
    • 프롬프트 템플릿에 {{glossary_data}} 플레이스홀더 지원
    • 용어집 파일(glossary.txt)에 원본단어=번역단어 형식 작성
    • GUI에서 파일 경로 지정 후 프롬프트 템플릿에 플레이스홀더 포함
  • EPUB 시스템 파일 처리 명확화
    • .css, .js, .opf, .ncx 등 시스템 파일은 번역 제외 후 복사
    • EPUB 선택 시 HTML/XHTML 콘텐츠만 번역
  • GUI 핸들러 중복 추가 방지
    • 로그 메시지 중복 출력 방지를 위해 TextHandler 추가 전 중복 확인

※ 공통: 대부분의 기능은 자동 적용되며, 용어집 기능만 별도 설정 필요합니다.

📚 사용 방법 📚

Gemini API 기반 EPUB/TEXT 만능 번역기 사용법

1. Google Gemini API 키 준비: Google AI Studio 등에서 API 키를 발급받은 다음 API. txt 텍스트 파일에 발급받은 API 키를 한 줄에 하나씩 입력하여 저장(주석은 #으로 시작).

2. (프로그램 실행 후) UI 언어 및 Gemini API 모델 선택.

3. 번역할 EPUB 또는 TXT 파일 선택.

4. 번역된 파일이 저장될 폴더 선택(기본적으로 원본 파일 폴더로 지정).

5. API 키 파일 선택(기본적으로 같은 폴더의 API.txt 선택).

6. 요청 지연: API 요청 간격을 초 단위로 설정(API가 다수라면 5~10초 권장, 한 개라면 10~20초 이상 권장, 번역 분량에 따라 적절히 조절).

7. API 키 전환: 하나의 API 키로 몇 번 번역 요청하고 다음 키로 넘어갈지 결정(0이면 비활성화).

8. 청크당 최대 글자수(TXT): TXT 파일 번역 시 한 번에 처리할 최대 글자 수 설정(API 키가 다수라면 5000 추천).

9. 결과 파일 언어 태그: 출력 파일명에 붙을 태그 입력(예: Eng, Korean). EPUB의 경우, 2~3글자 ISO 언어 코드(예: en, ko, fr)를 입력하면 EPUB 메타데이터에도 반영됨.

10. 프롬프트 설정(고급): 이 부분이 매우 중요! 여기에 번역 대상 언어와 원하는 출력 형식을 직접 명시. 이때 ‘원본 텍스트 : {text_chunk}’ 플레이스홀더는 반드시 포함되어야 함(이 부분에 실제 번역할 텍스트가 들어감).

11. 자동 진행 저장: TXT, SRT 파일 번역 시, 설정된 청크/항목 수마다 중간 결과를 저장.


프롬프트 예시: 미쓰다 신조의 '도조 겐야 시리즈'의 중국어판입니다.
이것을 한국어로 번역하세요.
번역된 텍스트만 제공하세요.
원래 형식을 유지하세요.

원본 텍스트:
{text_chunk}

🎬 SRT 자막 번역 프롬프트 예시 📝

📜 펼쳐보기 📜

Please translate the following SRT subtitle text into [Target Language, e.g., Korean, French].
{{glossary_data}}
Provide only the translated text, without any introductory phrases or repeating the original text.
Maintain the original formatting and line breaks, as they are important for subtitle display.
The text may contain '|||SUB_SEPARATOR|||' which separates individual subtitle blocks. It is crucial that you preserve this separator exactly as it is in your translated output. Do not translate or modify it.

Original text:
{{text_chunk}}


다음 SRT 자막 텍스트를 [번역할 언어, 예: 영어, 일본어]로 번역해 주십시오.
{{glossary_data}}
서론이나 원본 텍스트 반복 없이 번역된 텍스트만 제공해 주십시오.
자막 표시에 중요한 원래 서식과 줄바꿈을 반드시 유지하십시오.
텍스트에는 개별 자막 블록을 나누는 '|||SUB_SEPARATOR|||' 구분자가 포함될 수 있습니다. 이 구분자는 절대 번역하거나 수정하지 말고, 번역 결과에 반드시 그대로 유지해야 합니다.

원본 텍스트:
{{text_chunk}}

⚠ 사용 시 주의 사항 ⚠

  • API 키 유출 주의: API 키는 개인 정보와 같으므로, 절대 공개적인 곳에 공유하거나 코드에 직접 하드 코딩하면 안 된다.
  • 무료 API 제한: Google Gemini 무료 API는 사용량에 따라 제한될 수 있다. 테스트 용도로만 사용하고 본격적인 작업은 유료 API 결제 추천.
  • 프롬프트의 중요성: 번역 품질과 형식은 사용자가 작성한 '번역 프롬프트 템플릿'에 크게 좌우된다. 원하는 결과를 얻기 위해 다양한 프롬프트를 실험하면서 최적의 프롬프트를 찾는 것이 중요하다({text_chunk} 플레이스홀더는 필수).
  • EPUB 파일 복잡성: EPUB 파일은 내부 구조가 다양하고 복잡하다. 이 프로그램은 일반적인 HTML 구조의 텍스트를 추출하여 번역하지만, 이미지 내 텍스트, 특수한 스크립트로 동적 생성되는 텍스트 등은 번역되지 않을 수 있다. 또한, 번역 후 레이아웃이 일부 변경될 수 있다.
  • 번역 품질 한계: AI 번역은 매우 발전했지만, 여전히 문맥에 따른 미묘한 오류나 어색함이 있을 수 있다. 중요한 문서의 경우 반드시 전문가의 검토를 거치는 것을 추천.
  • 모델 및 Safety Settings: Gemini API는 자체적으로 유해 콘텐츠를 차단하는 기능(Safety Settings)이 있어서 때로는 번역 내용과 관계없이 응답이 차단될 수 있고, 이 경우 로그에 관련 정보가 표시된다. 프로그램에서는 기본적으로 대부분의 차단을 해제하려고 시도하지만, API 정책에 따라 달라질 수 있다.

☕ 마치면서 ☕

모델에 따라 번역 시간이 다르다는 것

번역 품질의 경우 현재로선 gemini-2.5-flash-preview 모델이 단연코 뛰어나 보이고(pro 모델은 무료 API로는 접근이 안 되는 것 같음), gemini-2.0 모델의 번역 품질도 기존의 구글/파파고/카카오에 비하면 비교 불가 급이다. 다만 2.5 모델은 번역 속도가 매우 느리다는 것.

무료 API는 어디까지나 테스트, 소규모 프로젝트, 개인적인 학습 등을 위한 것이고, 지속적이고 안정적인 대량 처리를 보장하지는 않는다. 고로 꼭 읽고 싶은 텍스트가 있는데 한국어판이 없을 때 일주일에 1권 정도 번역하는 데 사용해야지, 그렇지 않으면 사용자의 API가 제한될 뿐만 아니라 무료 API 정책에도 영향을 끼쳐 모두에게 피해가 갈 수도 있다는 것 명심하자! 대량 번역이라면 유료 API를 결제하도록.

Related Posts:

0 comments:

댓글 쓰기

댓글은 검토 후 게재됩니다.
본문이나 댓글을 정독하신 후 신중히 작성해주세요