Compare commits

...

3 Commits

6 changed files with 21 additions and 10 deletions

View File

@@ -3,6 +3,16 @@
FlaskFarm용 범용 다운로드 매니저 플러그인입니다.
여러 다운로더 플러그인(YouTube, Anime 등)의 다운로드 요청을 통합 관리하고 큐(Queue)를 제공합니다.
## v0.2.24 변경사항 (2026-01-08)
- **Chrome 확장프로그램 추가**: YouTube에서 GDM으로 바로 다운로드 전송
- **Public API 추가**: `/public/youtube/formats`, `/public/youtube/add` (로그인 불필요)
- **진행률 표시 개선**: aria2c 다운로드 시 진행률 파싱 수정
- **카드 상태별 색상**: 완료(초록), 에러(빨강), 다운로드 중(파랑) 배경 구분
- **부분 DOM 업데이트**: 이미지 깜빡임 방지, 성능 최적화
- **소스 타입 수정**: ani24 → ohli24로 통일
- **FFmpeg HLS 안정성**: 비표준 m3u8 확장자(`.txt`) 지원 및 호환성 옵션 최적화
- **썸네일 버그 수정**: 외부 플러그인 위임 시 썸네일 누락 현상 수정
## v0.2.17 변경사항 (2026-01-08)
- **yt-dlp HTTP 헤더 지원**: `options.headers` 딕셔너리에서 `--add-header` 인자를 생성하여 Referer/User-Agent 등 커스텀 헤더를 yt-dlp에 전달합니다.
- **Linkkf CDN 리다이렉트 해결**: Referer 헤더 없이 m3u8 URL 접근 시 Google Cloud로 리다이렉트되던 문제 수정.

View File

@@ -12,7 +12,7 @@ def get_downloader(source_type: str) -> Optional[BaseDownloader]:
from .ytdlp_aria2 import YtdlpAria2Downloader
return YtdlpAria2Downloader()
elif source_type in ('ani24', 'hls'):
elif source_type in ('ohli24', 'ani24', 'hls'):
from .ffmpeg_hls import FfmpegHlsDownloader
return FfmpegHlsDownloader()

View File

@@ -80,13 +80,13 @@ class FfmpegHlsDownloader(BaseDownloader):
except Exception as ce:
logger.error(f"Failed to read cookies_file: {ce}")
# 입력 전 설정 (Reconnection & HTTP persistence fix)
# 입력 전 설정 (Reconnection & Allowed extensions for non-standard m3u8 like .txt)
cmd.extend([
'-allowed_extensions', 'ALL',
'-reconnect', '1',
'-reconnect_at_eof', '1',
'-reconnect_streamed', '1',
'-reconnect_delay_max', '5',
'-http_persistent', '0'
'-reconnect_delay_max', '5'
])
# 입력 URL
@@ -178,7 +178,8 @@ class FfmpegHlsDownloader(BaseDownloader):
def _get_duration(self, url: str, ffprobe_path: str, headers: Dict) -> float:
"""ffprobe로 영상 길이 획득"""
try:
cmd = [ffprobe_path, '-v', 'error', '-show_entries', 'format=duration',
cmd = [ffprobe_path, '-v', 'error', '-allowed_extensions', 'ALL',
'-show_entries', 'format=duration',
'-of', 'default=noprint_wrappers=1:nokey=1']
if headers:

View File

@@ -1,6 +1,6 @@
title: "GDM"
package_name: gommi_downloader_manager
version: '0.2.23'
version: '0.2.26'
description: FlaskFarm 범용 다운로더 큐 - YouTube, 애니24, 링크애니, Anilife 지원
developer: projectdx
home: https://gitea.yommi.duckdns.org/projectdx/gommi_downloader_manager

View File

@@ -394,14 +394,14 @@ class ModuleQueue(PluginModuleBase):
if caller_plugin:
cp_lower = caller_plugin.lower()
if 'anilife' in cp_lower: return 'anilife'
if 'ohli24' in cp_lower or 'ani24' in cp_lower: return 'ani24'
if 'ohli24' in cp_lower or 'ani24' in cp_lower: return 'ohli24'
if 'linkkf' in cp_lower: return 'linkkf'
if 'youtube' in cp_lower: return 'youtube'
# 2. 메타데이터 기반 판단
if meta and meta.get('source'):
ms_lower = meta.get('source').lower()
if ms_lower in ['ani24', 'ohli24']: return 'ani24'
if ms_lower in ['ani24', 'ohli24']: return 'ohli24'
if ms_lower == 'anilife': return 'anilife'
if ms_lower == 'linkkf': return 'linkkf'
@@ -409,7 +409,7 @@ class ModuleQueue(PluginModuleBase):
if 'youtube.com' in url_lower or 'youtu.be' in url_lower:
return 'youtube'
elif 'ani24' in url_lower or 'ohli24' in url_lower:
return 'ani24'
return 'ohli24'
elif 'linkkf' in url_lower:
return 'linkkf'
elif 'anilife' in url_lower:

View File

@@ -924,7 +924,7 @@
// Source badge color based on type
const sourceColors = {
'ani24': 'background: linear-gradient(135deg, #f59e0b, #d97706);',
'ohli24': 'background: linear-gradient(135deg, #f59e0b, #d97706);',
'ohli24': 'background: linear-gradient(135deg, #f59e0b, #d97706);',
'anilife': 'background: linear-gradient(135deg, #ec4899, #be185d);',
'youtube': 'background: linear-gradient(135deg, #ef4444, #b91c1c);',