f01f41499c2db498c0eca1e708ea285338649722
…
Anime Downloader for FlaskFarm
Anime Downloader는 FlaskFarm 플랫폼에서 동작하는 애니메이션 자동 다운로드 플러그인입니다. 국내 주요 스트리밍 사이트(Ohli24, Linkkf, Anilife)를 지원하며, 강력한 보안 우회 기능을 탑재하여 안정적인 다운로드를 보장합니다.
🚀 주요 기능 (Key Features)
- 다중 사이트 지원: Ohli24, Anilife, Linkkf 등 다양한 소스에서 영상 검색 및 다운로드.
- 자막 최적화:
- 자막 전용 다운로드 (Linkkf): 영상 없이 자막(VTT)만 별도로 추출하여 SRT로 변환 후 다운로드할 수 있습니다.
- 자막 합침 (Muxing): 다운로드된 외부 자막(SRT)을 MP4 컨테이너에 자동으로 삽입하여 범용성을 높입니다.
- 강력한 우회 기술 (Anti-Bot Bypass):
- TLS Fingerprint 변조:
curl_cffi를 사용하여 실제 Chrome 브라우저처럼 위장, Cloudflare 및 각종 봇 차단을 무력화합니다. - CDN 자동 감지: 스트리밍 서버(CDN)의 도메인이 수시로 변경되더라도 자동으로 감지하여 대응합니다. (예: 14B 가짜 파일 문제 해결)
- TLS Fingerprint 변조:
- 스마트 다운로드 큐:
ffmpeg및yt-dlp기반의 큐 시스템으로 안정적인 이어받기 및 재시도를 지원합니다. - 사용자 편의성 및 보안:
- 보안 스트리밍 (Secure Streaming): 외부 플레이어(MXPlayer, VLC 등) 연동 시 API 키를 노출하지 않고 **임시 스트리밍 토큰(5분 만료)**을 발급하여 안전한 시청 환경을 제공합니다.
- 범용 플레이어 연동: IINA, PotPlayer, VLC, nPlayer, Infuse, MX Player 등 8종 이상의 외부 플레이어와 정교한 URL Scheme/Intent 연동을 지원합니다.
- Proxy 설정: IP 차단 시 손쉽게 우회할 수 있도록 웹 설정 UI에서 프록시 서버를 지정할 수 있습니다.
- 모듈형 테마 시스템: CSS 변수와 동적 로딩을 활용하여 데스크탑/모바일 모두에 최적화된 사이트별 테마를 제공합니다.
- 실시간 피드백: 다운로드 상태, 중복 파일 감지 등을 실시간 알림으로 제공합니다.
📺 지원 사이트 (Supported Sites)
1. Ohli24 (애니24)
- 특징: 강력한 인프라와 다양한 라이브러리.
- 기술:
Zendriver(Daemon모드) 및Camoufox를 이용한 브라우저 에뮬레이션 우회. - 기능: 검색, 목록 조회, 자동 다운로드, 임시 토큰 기반 보안 스트리밍.
2. Linkkf (링크애니)
- 특징: 빠른 업데이트 속도.
- 기능: 검색 및 다운로드.
3. Anilife (애니라이프)
- 특징: 다양한 화질 제공.
- 기술: Playwright 등을 활용한 브라우저 에뮬레이션(필요 시).
🛠 설치 및 문제 해결 (Troubleshooting)
필수 요구 사항
- Python 패키지 (Dependencies):
curl_cffi: TLS Fingerprint 변조를 통한 Cloudflare 및 보안 사이트 우회용.Zendriver: 가벼운 브라우저 데몬 모드를 통한 고속 크롤링 지원.Camoufox: 강력한 안티봇 탐지 우회를 위한 고보안 브라우저 에뮬레이터.yt-dlp: 스트리밍 영상(HLS/DASH) 다운로드 핵심 엔진.- 기타:
requests,lxml,beautifulsoup4,flask-login등.
- 시스템 도구 (System Tools):
- ffmpeg: 영상/음성 병합 및 자막 합침 기능을 위한 필수 도구 (시스템 PATH 등록 필요).
- Browser (Chrome/Chromium): Zendriver 및 Camoufox 구동을 위한 브라우저 환경 필요.
자주 묻는 질문 (FAQ)
Q1. 설정 페이지 접근 시 404 오류가 뜹니다.
- 원인: 플러그인 초기화 파일(
plugin.py)이 누락되었기 때문입니다. - 해결:
plugin.py파일이 존재하는지 확인하고, 없다면 복구 후 서버를 재시작하세요.
Q2. 검색 시 결과가 없거나 "Document is empty" 오류가 발생합니다.
- 원인: 사이트의 보안 정책에 의해 접속이 차단된 경우입니다.
- 해결:
- 최신 버전으로 업데이트하세요. (
curl_cffi적용 버전) - 설정 페이지에서 Proxy URL을 비워두거나, 작동하는 유효한 프록시 IP를 입력하세요.
- 최신 버전으로 업데이트하세요. (
Q3. 다운로드된 파일 용량이 매우 작습니다 (14 Byte 등).
- 원인: CDN 서버에서 봇 접근을 감지하고 가짜 파일을 보낸 것입니다.
- 해결: 플러그인 자체적으로 이를 감지하고 우회하는 패치가 적용되었습니다. 최신 버전 사용 시 자동으로 해결됩니다.
⚙️ 설정 가이드
- FlaskFarm 웹 > 플러그인 > Anime Downloader > 설정으로 이동합니다.
- Proxy URL: 필요한 경우
http://IP:PORT형식으로 입력 (기본값: 공란). - 저장 경로: 다운로드된 파일이 저장될 경로 설정.
- 다운로드 방법:
yt-dlp(기본) 추천.
📝 변경 이력 (Changelog)
v0.7.7 (2026-01-19)
- Linkkf 추출 핵심 보강 및 Anilife 고속화:
- 전용 헤더 처리: Linkkf 스트리밍 영상(m3u8) 추출 시 Referer 헤더가 유실되던 문제를 CDP 타입 래핑(
zd.cdp.network.Headers())으로 완벽 해결. - Anilife 퍼포먼스: 애니라이프 영상 추출 시 불필요한 대기 시간을 제거하고 네비게이션 전략을 최적화하여 추출 속도를 개선했습니다.
- GDM 연동 안정성: yt-dlp 호출 시
--add-header옵션을 통해 모든 보안 파라미터를 정확히 전달하도록 보강했습니다.
- 전용 헤더 처리: Linkkf 스트리밍 영상(m3u8) 추출 시 Referer 헤더가 유실되던 문제를 CDP 타입 래핑(
v0.7.6 (2026-01-12)
- 모바일 상단 메뉴 스크롤 힌트 도입:
- 메뉴가 가로로 길어질 때 우측에 은은한 페이드 효과를 추가하여 '더 많은 메뉴'가 있음을 직관적으로 알 수 있도록 개선했습니다.
- 아주 가늘고 투명한 스크롤바 가이드를 추가하여 모던한 감성을 더했습니다.
- CSS 구문 최적화 및 미디어 쿼리 중복을 정리했습니다.
v0.7.5 (2026-01-12)
- 모바일 레이아웃 가로 핏 완벽 최적화:
- 화면이 70%만 보이고 오른쪽으로 밀리던 현상을 해결하기 위해 전역적인 너비 정규화(
width: 100%)와 오버플로우 차단을 적용했습니다. - 모바일 브라우저 렌더링 오류를 유발하는
background-attachment: fixed속성을 모바일 한정으로 해제했습니다. - 모든 요소에
box-sizing: border-box를 강제하여 패딩으로 인한 너비 확장을 방지했습니다. - 에피소드 그리드를 모바일 1열 배치로 최적화하여 오버플로우를 원천 차단했습니다.
- 화면이 70%만 보이고 오른쪽으로 밀리던 현상을 해결하기 위해 전역적인 너비 정규화(
v0.7.4 (2026-01-12)
- 모바일 레이아웃 시프트 최종 수정:
- 부트스트랩
row의 음수 마진으로 인해 화면이 오른쪽으로 밀려 보이던 현상을 정규화 작업을 통해 해결했습니다. html,body레벨에서 가로 오버플로우를 차단하고 전역적인 단위 대응(100vw)을 적용하여 안정적인 가로 핏을 구현했습니다.- 상단 메뉴(브레드크럼)가 부모 너비를 확장시키지 않도록
display속성을 개선했습니다.
- 부트스트랩
v0.7.3 (2026-01-12)
- Anilife 모바일 UI 최적화 (프리미엄 개편):
- 분석 페이지: 가로 여백을 최소화(15px -> 2px)하여 모바일 가독성 증대.
- 큐 페이지: 기존 테이블 레이아웃을 모바일 전용 카드형 레이아웃으로 전면 교체. 파일명과 진행률 바를 강조하고 2단 정보 그리드를 도입하여 가시성 확보.
- 오버플로우 수정: 상단 메뉴(브레드크럼) 가로 스크롤 적용 및 액션 버튼 자동 줄바꿈 배치를 통해 화면 넘침 해결.
- Linkkf 안정화 및 자막 연동:
- 자막 자동화: GDM(v0.2.30+) 연동을 통해 비디오와 자막을 동시에 안전하게 다운로드.
- 경로 정규화: 저장 경로 내 중복 구분자(
//./) 발생 문제를 원천 해결. - 추출 성능: 비디오 URL 추출 시 타임아웃 및 예외 처리를 강화하여 UI 프리징 방지.
v0.7.2 (2026-01-11)
- Linkkf 자막 전용 다운로드 지원:
- 에피소드 분석 페이지에 "자막만 다운로드" 버튼 추가. (VTT 추출 및 SRT 자동 변환)
- 백그라운드 스레드 처리를 통해 대량의 자막을 끊김 없이 다운로드 가능.
- Linkkf 목록-분석 연동 강화:
- 목록(
list) 페이지 카드에 "작품소개" 버튼 추가하여 원클릭 분석 지원. - URL 파라미터(
code)를 통한 자동 분석 로직 개선으로 연동 편의성 증대.
- 목록(
- 플러그인 핫 리로드 안정화:
- Linkkf, AniLife, Ohli24 모든 모듈의 DB 모델에
extend_existing: True옵션 적용. - 플러그인 자가 업데이트 시 DB 모델 제약으로 인한 리로드 실패 문제 해결.
- Linkkf, AniLife, Ohli24 모든 모듈의 DB 모델에
- UI/UX 보안:
- 분석 페이지의 AJAX 요청 결과 핸들링을 강화하여 사용자에게 정확한 성공/실패 알림 제공.
v0.7.1 (2026-01-11)
- GDM 통합 버그 수정 (Hotfix):
- UI 필드 매핑 수정: 큐 페이지에서 GDM 작업의 상태, 진행률 등이 'undefined'로 표시되던 필드명 불일치 문제 해결.
- 실시간 업데이트(Socket) 강화: GDM 전용 소켓 이벤트 리스너를 추가하여, 수동 새로고침 없이도 다운로드 상태가 실시간으로 반영되도록 개선.
- 모든 모듈 적용: Linkkf뿐만 아니라 AniLife, Ohli24 큐 페이지에도 동일한 수정 사항 반영.
v0.7.0 (2026-01-11)
- GDM(Gommi Downloader Manager) 통합 고도화:
- 통합 큐 페이지: 링크애니, 애니라이프, 오클리24의 큐 페이지에서 GDM 작업을 실시간으로 확인 및 중지/삭제 가능하도록 통합.
- 상태 자동 동기화: GDM 다운로드 완료 시 콜백을 통해 로컬 DB 상태를 자동으로 '컴플리트'로 업데이트하여 목록 페이지(
list)에 즉시 반영. - GDM 작업 매핑: GDM의 다양한 상태 코드 및 진행률을 각 플러그인 UI 형식에 맞게 변환 처리.
- 안정성 강화:
- 백그라운드 DB 안정화: 스케줄러 및 비동기 작업 중 데이터베이스 접근 시
app_context오류 방지를 위해 전역적인 컨텍스트 래핑 적용. - 자동 다운로드 로직 개선: 링크애니 '전체(all)' 모드 모니터링 및 자동 에피소드 등록 로직 보강.
- 백그라운드 DB 안정화: 스케줄러 및 비동기 작업 중 데이터베이스 접근 시
- 알림 시스템: 링크애니 새 에피소드 감지 시 Discord/Telegram 알림 기능 및 설정 UI 추가.
v0.6.25 (2026-01-09)
- 자가 업데이트 기능 추가: 모든 설정 페이지 (Ohli24, Anilife, Linkkf)에서 "업데이트" 버튼 클릭으로 Git Pull 및 플러그인 핫 리로드 지원
- 버전 체크 API: GitHub에서 최신 버전 정보를 가져와 업데이트 알림 표시 (1시간 캐싱)
- 공통 베이스 통합:
AnimeModuleBase에get_update_info,reload_plugin메서드 추가로 모든 모듈에서 자동 사용 가능
v0.6.24 (2026-01-08)
- Ohli24 GDM 연동 버그 수정:
- 썸네일 누락 해결: GDM 위임 시
image키를thumbnail로 올바르게 매핑하여 목록에서 이미지가 보이도록 수정. - 소스 타입 통일: GDM 측 명칭 변경에 맞춰
ani24대신ohli24를 기본값으로 사용 (하위 호환 유지). - 검색 결과 썸네일: 일부 환경에서 썸네일 URL이 누락되던 필드 보강.
- 썸네일 누락 해결: GDM 위임 시
v0.6.23 (2026-01-08)
- Linkkf 다운로드 완전 복구:
- Zendriver Daemon CDP 헤더 버그 수정:
zd.cdp.network.Headers()타입 래핑 누락으로 Referer 헤더가 적용되지 않던 문제 해결. - HTML 엔티티 디코딩 개선: iframe URL의
&등 HTML 엔티티를html.unescape()로 올바르게 디코딩. - GDM yt-dlp 헤더 전달:
--add-header옵션으로 Referer/User-Agent를 yt-dlp에 전달하여 CDN 리다이렉트 방지.
- Zendriver Daemon CDP 헤더 버그 수정:
- 부수 효과: Ohli24 등 모든 브라우저 기반 추출에서 동일한 헤더 적용 개선.
v0.6.22 (2026-01-08)
- Linkkf 추출 로직 강화: Cloudflare 보호가 강화된 Linkkf 도메인(flexora.xyz 등)에 대응하기 위해 브라우저 기반(Zendriver/Camoufox) 추출 엔진을 도입했습니다.
- 오추출 방지: 광고나 서비스 차단 페이지(Google Cloud 등)의 iframe을 비디오 URL로 오인하는 문제를 수정했습니다.
v0.6.21 (2026-01-07)
- Linkkf GDM 연동 수정:
- GDM 위임 전 실제 스트림 URL(m3u8) 추출 로직을 강제 호출하여 "Invalid data" 오류 해결.
- Linkkf 설정의 다운로드 방식 및 쓰레드 수를 GDM에 전달하도록 개선.
- 추출된 Referer 헤더 및 자막 정보를 GDM에 누락 없이 전달.
v0.6.20 (2026-01-07)
- GDM 연동 고도화 및 버그 수정:
- App Context 오류 해결: 백그라운드 쓰레드(일괄 추가, Camoufox 설치, 자막 합침)에서 발생하던
RuntimeError: Working outside of application context수정. - 다운로드 설정 연동: Ohli24 설정의 다운로드 방식(aria2c/ytdlp) 및 쓰레드 수를 GDM에 그대로 전달하여 멀티쓰레드 다운로드 지원.
- App Context 오류 해결: 백그라운드 쓰레드(일괄 추가, Camoufox 설치, 자막 합침)에서 발생하던
- 안정성 개선:
- GDM 위임 시 파일명/제목/썸네일 등 메타데이터 가공 로직 보강.
v0.6.15 (2026-01-07)
- Zendriver Daemon 비동기 네비게이션 최적화:
browser.get(url)대기 시간으로 인한 17초 지연 해결- 네비게이션 전 리소스 블로킹 설정 (about:blank에서 미리 차단)
asyncio.create_task()를 활용한 비동기 네비게이션 + 병렬 DOM 폴링- 리스트/에피소드 페이지 마커 발견 즉시 조기 반환 → 예상 속도 1~3초
v0.6.14 (2026-01-07)
- Ohli24 Docker 성능 고속화:
- Zendriver Daemon에 리눅스/도커 전용 최적화 플래그 추가 (
--no-zygote,--disable-dev-shm-usage,--disable-features=IsolateOrigins,site-per-process등) - 정밀 성능 메트릭 도입 (
/tmp/zendriver_daemon.log에서 Init/Nav/Block/Poll 단계별 시간 측정 가능) - 목록 페이지 페칭 시 Zendriver Daemon(Layer 3A)을 최우선 순위로 격상 (기존 17초 → 1초 내외 단축 기대)
LogicOhli24.get_base_url()및 각 모듈에서 URL 끝 슬래시 제거(rstrip) 처리를 강화하여 불필요한 리다이렉트 방지
- Zendriver Daemon에 리눅스/도커 전용 최적화 플래그 추가 (
- Zendriver Daemon 안정성:
- 리눅스 환경의
/dev/shm여유 공간 체크 로직 추가 - 변수 참조 오류(
NameError,elapsed->total_elapsed) 수정 및 에러 핸들링 보강
- 리눅스 환경의
v0.6.13 (2026-01-07)
- 초기화 순서 오류 수정:
P.logger접근 전P인스턴스 생성이 완료되도록curl_cffi자동 설치 루틴 위치 조정 (NameError: name 'P' is not defined해결)
v0.6.11 (2026-01-07)
- Docker 환경 최적화:
curl_cffi라이브러리 부재 시 자동 설치(pip install) 루틴 추가- URL 추출 실패 시 GDM 위임 중단 및 에러 처리 강화
- Ohli24 GDM 연동 버그 수정:
LogicOhli24.add메서드의 인덴트 오류 및 문법 오류 해결- 다운로드 완료 시 Ohli24 DB 자동 업데이트 로직 안정화
__init__.py안정성 강화 (P.logic 지연 로딩 대응)
- Anilife GDM 연동:
ModuleQueue연동으로 Anilife 다운로드가 GDM (Gommi Downloader Manager)으로 통합- Ohli24와 동일한 패턴으로
source_type: "anilife"메타데이터 포함 - Go FFMPEG 버튼 → Go GDM 버튼으로 변경 및 GDM 큐 페이지로 링크
- 파일명 정리 개선:
Util.change_text_for_use_filename()함수에서 연속 점(..) → 단일 점(.) 변환- 끝에 오는 점/공백 자동 제거로 Synology NAS에서 Windows 8.3 단축 파일명 생성 방지
- Git 워크플로우 개선:
- GitHub + Gitea 양방향 동시 푸시 설정 (GitHub 우선)
v0.5.3 (2026-01-04)
- 보안 스트리밍 토큰 시스템 도입:
- 외부 플레이어 연동 시 API 키 노출 방지를 위한 임시 토큰(TTL 5분) 발급 로직 구현
- 인증 없이 접근 가능한
/normal/라우트를 통한 보안 스트리밍 엔드포인트 추가
- 외부 플레이어 연동 고도화:
- VLC Android 지원:
vlc://대신 Android Intent 형식을 적용하여 재생 오류 해결 - MXPlayer 최적화: MIME 타입 명시 및 한글 파일명 URL 인코딩 안정화 (RFC 5987 대응)
- VLC Android 지원:
- 모바일 UI/UX 미세 조정:
- 외부 플레이어 아이콘 오버플로우 수정 (모바일에서 두 줄로 자동 줄바꿈)
- 비디오 플레이어 모달 내 영상 세로 중앙 정렬 보강
- 다운로드 목록 페이지(
list)의 카드 여백 최적화 (p-4→p-3)
- 버그 수정:
Content-Disposition헤더의 한글 파일명 유니코드 오류 해결
v0.5.2 (2026-01-04)
- 재사용 가능한 비디오 모달 컴포넌트 도입:
templates/anime_downloader/components/video_modal.html- 공통 모달 HTMLstatic/js/video_modal.js- VideoModal JavaScript 모듈static/css/video_modal.css- 비디오 모달 전용 스타일시트
- Alist 스타일 UI 개선:
- 에피소드 드롭다운: 파란색 하이라이트 배경의 에피소드 선택기
- 자동 다음 토글 스위치: iOS 스타일 슬라이더 토글
- 외부 플레이어 버튼: IINA, PotPlayer, VLC, nPlayer, Infuse, OmniPlayer, MX Player, MPV 지원
- 코드 재사용성 향상:
- Ohli24 list 페이지에서 인라인 코드 ~145줄 → ~9줄로 축소
VideoModal.init()API로 간편 초기화 및openWithPlaylist()메서드 지원
v0.5.1 (2026-01-04)
- Ohli24 레이아웃 표준화:
- 모든 Ohli24 페이지(Setting, Search, Queue, List, Request)에 일관된 1400px max-width 및 중앙 정렬 적용
ohli24.css에 공통 wrapper(.ohli24-common-wrapper) 및 헤더 스타일 추가- List/Queue 페이지
visible클래스 누락 수정 (content-cloak 트리거 추가) - Request 페이지 에피소드 카드 순차 렌더링 문제 해결 (
requestAnimationFrame사용)
- Anilife 폴백 체인 개선:
get_html함수에 Zendriver subprocess 폴백 추가 (Daemon 실패 시 자동 전환)- Playwright 폴백을 Camoufox로 변경 (더 강력한 안티봇 우회)
- 3단계 폴백: Zendriver Daemon → Zendriver Subprocess → Camoufox
- Anilife 반응형 레이아웃:
- Request 페이지에
anilife-common-wrapper클래스 적용 - 모바일(
<992px): 100% 너비 / 데스크탑(≥992px): 1400px max-width
- Request 페이지에
- Linkkf CSS 준비:
linkkf.css에 공통 wrapper 스타일 추가 (향후 레이아웃 표준화 대비)
v0.5.0 (2026-01-03)
- Ohli24 비디오 플레이어 UI 전면 개편:
- 프리미엄 글래스모피즘 디자인: 플레이어 모달 및 플레이리스트 컨트롤에 투명 유리 테마 적용
- Video.js 8.10.0 업그레이드: 최신 엔진으로 안정성 및 재생 성능 최적화
- "Scale to Fill" (줌) 기능: 모바일 전체화면 시 검은 여백을 없애고 화면을 가득 채우는 기능 추가
- 중앙 재생 버튼 개선: 모바일에 최적화된 대형 중앙 재생 버튼 및 아이콘 정렬 수정
- Anilife / Ohli24 검색 엔진 고도화:
- Zendriver Daemon 최적화: 매 요청마다 브라우저를 띄우지 않고 백그라운드 프로세스 활용 (응답 속도 2~3초로 단축)
- 완결 카테고리 & 년도별 필터링: Ohli24 검색에 '완결' 버튼 추가 및 년도별(2020~2025) 상세 필터링 지원
- 모던 로딩 UI: 시각적으로 세련된 멀티 링 프리로더 및 글래스모피즘 AJAX 스피너 도입
- Python 3.14 및 최신 스택 지원:
- Flask 3.1.2, SQLAlchemy 2.0.45 등 최신 라이브러리 호환성 확보 및
AssertionError경고 제거
- Flask 3.1.2, SQLAlchemy 2.0.45 등 최신 라이브러리 호환성 확보 및
- 안정성 및 UX 강화:
- Enter 키 검색: 모든 분석/검색 페이지에서 Enter 키 지원
- Zendriver 자동 설치: 환경에 패키지가 없을 경우 실행 시 자동 설치
- 타입 힌트 리팩토링:
mod_ohli24.py,mod_anilife.py전반에 엄격한 타입 힌트 적용
v0.4.18 (2026-01-03)
- Ohli24 4단계 폴백 체인 구현:
curl_cffi→cloudscraper→Zendriver→Camoufox - 현재 전략: 가볍고 빠른
Zendriver와 풀 브라우저Camoufox조합으로 클라우드플레어 완전 우회
v0.4.17 (2026-01-02)
- Ohli24 디자인 고도화 (전반적 UI 개선):
- 썸네일 에피소드 배지: 이미지 좌측 상단에 글래스모피즘 스타일의 세련된 에피소드 번호 배지(앰버 컬러) 추가
- 액션 버튼 디자인: 목록 페이지 버튼("작품보기", "보기", "삭제" 등)을 미니멀한
.btn-minimal디자인으로 개편 - 모바일 UX 최적화: 모바일에서 "보기"(블루), "삭제"(레드) 버튼에 선명한 색상을 부여하여 가독성 및 조작성 증대
- 데스크탑 레이아웃: 시작/완료 날짜와 액션 버튼 사이의 간격을 대폭 늘려(Horizontal Separation) 시각적 균형 확보
- 인터렉션: 호버 효과 및 블루 그래디언트 강조로 프리미엄 피드백 제공
v0.4.15 (2026-01-02)
- Ohli24 날짜 표시 및 디자인 개선:
- 요청일(시작) 및 완료일 배지에 색상 구분 적용 (Slate/Green) 및 "시작:", "완료:" 라벨 추가
- 모바일 뷰에서 날짜 배지가 카드 내부에 깔끔하게 스택되도록 레이아웃 최적화
- Ohli24 검색 UI 모바일 최적화:
- 모바일 화면에서 검색 필터(정렬, 옵션) 및 버튼의 크기를 줄여 공간 효율성 증대
- 검색창과 버튼 배치를 모바일에 맞게 2단 레이아웃으로 조정
v0.4.13 (2026-01-02)
- Ohli24 CSS 사이드 이펙트 수정:
- 페이지별 독립 wrapper (
.ohli24-list-page,.ohli24-request-page,.ohli24-queue-page) 적용으로 스타일 간섭 완전 차단 - 요청(Request) 페이지의 에피소드 카드 가로 정렬 레이아웃 복구 및 최적화
- 요청 페이지 내 불필요한 인라인 스타일 제거 및 외부 CSS로 일원화
- 페이지별 독립 wrapper (
- 안정성 강화:
- Ohli24: 큐 추가 시 즉시 메타데이터 파싱 및 DB 동기화 로직 강화
- FfmpegQueue: 로컬 파일 존재 시 DB 상태 동기화 누락 수정
- 검색: Ohli24 검색 결과 유효성 체크 로직 추가로 런타임 오류 방지
- 모듈 검색 지원:
model_base.py내 Ohli24 및 Linkkf 전용 검색 지원 추가
v0.4.5 (2026-01-02)
- CSS 테마 아키텍처 전면 개편:
- 사이트별 독립 테마 파일 분리 (
anilife.css,linkkf.css,ohli24.css) - 공통 모바일 로직 및 알림 스타일을
mobile_custom.css로 통합 (중복 코드 ~2,000줄 제거) - Jinja2 템플릿을 활용한 테마 동적 로딩 시스템 구현
- 사이트별 독립 테마 파일 분리 (
- 백엔드 안정성 및 UX 강화:
- Anilife:
get_series_info파싱 로직 개선으로IndexError방지 및 크롤링 안정성 확보 - 중복 다운로드 알림: 이미 파일이 존재하거나 DB에 기록이 있을 경우 사용자에게 명확한 알림 메시지 출력
- CSS 호환성:
line-clamp속성 크로스 브라우저 호환성 패치 적용
- Anilife:
v0.4.3 (2026-01-02)
- 모바일 UX 대폭 개선:
- 시스템 알림(bootstrap-notify) 커스텀 스타일링 (사이트별 테마 색상 적용)
- Anilife: Cosmic Violet / Linkkf: Forest Green / Ohli24: Slate Blue
- 모바일에서 상단 nav-pills 메뉴가 가려지는 문제 수정 (margin-top 50px)
- List 페이지 검색/초기화 버튼 사이즈 최적화
- DOM 요소 오버플로우 방지 및 컨텐츠 정렬 개선
- 다운로더 쓰레드 설정:
anilife_download_threads설정 추가 (yt-dlp concurrent-fragments)- Linkkf
get_downloader에서linkkf_download_threads설정 반영
v0.4.0 (2026-01-02)
- Discord 알림 개선:
- 다운로드 완료 시에만 알림 전송 (시작 시 알림 제거)
- 알림 메시지에 포스터 이미지 및 파일명 포함
- DB 매핑 개선:
- 다운로드 시작 즉시 메타데이터(제목, 에피소드 번호, 화질 등) DB 동기화
download_completed에서 모든 필드 정확히 매핑
- UI/UX 개선:
- Ohli24 목록에 에피소드 번호 배지 추가 (고대비 노란색)
- Linkkf 목록에 "자막합침" 버튼 추가 (ffmpeg로 SRT 자막 MP4에 삽입)
- Linkkf 다운로드 수정:
get_downloader메서드 추가 및 설정 페이지의 다운로드 방식 반영prepare_extraURL 덮어쓰기 버그 수정- yt-dlp Fragment 파일 자동 정리
- 로그 최적화:
- yt-dlp 진행률 로그 빈도 감소 (10회당 1회)
- 중복 로그 제거 (
download_completed단일 호출)
v0.3.7 (2026-01-01)
- 설정 페이지 폴더 탐색 기능 추가:
- Ohli24, Anilife, Linkkf 모든 설정 페이지에 폴더 탐색 버튼 적용
- 저장 폴더 옆 "탐색" 버튼 클릭 시 모달 폴더 브라우저 팝업
..(상위 폴더),.(현재 폴더) 네비게이션 지원- 더블클릭으로 하위 폴더 진입, 클릭으로 선택
- 최소/최대 높이 설정으로 일관된 UI 제공 (min-height: 300px, max-height: 600px)
v0.3.3 (2026-01-01)
- Ohli24 Play 버튼 구현:
- 요청 페이지에서 파일이 존재할 경우 즉시 재생 가능한 "Play" 버튼 추가
- VideoJS 기반의 비디오 플레이어 및 플레이리스트 UI 적용 (Linkkf와 동일한 UX 제공)
- 백그라운드 파일 감지 로직 개선 (파일명의 해상도 부분 등을 glob 패턴으로 유연하게 매칭)
- 모바일 UI 최적화:
- Ohli24 요청 페이지에서 모바일 상단 메뉴가 컨텐츠를 가리는 현상 수정 (CSS 미디어 쿼리 적용)
- Linkkf 리팩토링 및 개선:
- 카테고리 데이터 소스를 API 기반(
singlefilter.php)으로 전면 전환하여 안정성 확보 - "완결" 버튼 제거 및 "방영중" 버튼 클릭 시 "Anime List" 로드되도록 변경
- 검색창 및 버튼 UI 디자인 개선 (높이 조정, 정렬 수정, "Elegant" 스타일 적용)
- "Top" 카테고리를 내부 API 연동으로 전환하여 정확도 향상
- 카테고리 데이터 소스를 API 기반(
v0.3.0 (2025-12-31)
- VideoJS 플레이리스트: 비디오 플레이어에서 다음 에피소드 자동 재생
- 플레이리스트 UI: 이전/다음 버튼, 에피소드 목록 토글
- 실시간 갱신: 플레이어 열려있을 때 10초마다 새 에피소드 감지 및 알림
v0.2.2 (2025-12-31)
- 해상도 자동 감지: m3u8 master playlist에서 해상도(1080p/720p 등)를 파싱하여 파일명에 반영
- Discord 알림 개선: 큰 썸네일 이미지, Discord Blurple 색상, ISO 타임스탬프 적용
- Queue 페이지 UI: 좌우 여백을 다른 페이지들과 일치하도록 수정
- Pre-commit hook: 커밋 시 info.yaml 버전 자동 증가 (patch 버전)
v0.2.1 (2025-12-30)
- CDN 보안 우회: cdndania.com 쿠키 기반 인증 처리 (
curl_cffi세션 유지) - CdndaniaDownloader: 별도 프로세스 기반 HLS 세그먼트 다운로더 추가
- 프록시 지원 강화: 세그먼트 다운로드 시 프록시 적용
Description
Languages
HTML
48.5%
Python
45.3%
CSS
2.4%
Jupyter Notebook
1.9%
JavaScript
1.7%
Other
0.2%