
서버에서 이미 실시한 변환 히스토리 내역입니다.

Slimmer 미디어 최적화 — 개발 리포트 (계속)
제작: 불패의초인 (BSplus) — https://bsplus.net/ 환경: Rhymix 2.1.33 / PHP 7.4 / Windows XAMPP / Cloudflare
v1.1.x 이전 — MKV 다중 트랙 / 큐 비동기 / 워커 고도화
v1.0.6(모듈명 slimmer 변경) 이후 v1.1.x 계열에서 아래 기능들이 순차 추가됨.
| 항목 | 내용 |
|---|---|
| MKV 다중 트랙 선택 | ffprobe로 오디오/자막 트랙 자동 감지, 큐 화면에서 트랙 선택 UI 제공 |
| GPU NVENC 인코딩 | h264_nvenc / hevc_nvenc 코덱 지원 추가 |
| 큐 AJAX 비동기 처리 | 파일별 AJAX 순차 처리 방식으로 변경 (브라우저 타임아웃 방지) |
| worker.php | PHP CLI 백그라운드 워커 추가 (proc_open + FFmpeg progress 실시간 파싱) |
| 진행률 표시 | out_time_us 파싱으로 인코딩 진행% DB 저장 및 UI 표시 |
| Cron 워커 | 외부 URL 호출로 큐 자동 처리 (worker_secret 인증키 지원) |
| 히스토리 재인코딩 | 원본 백업 보존 시 히스토리에서 재인코딩 큐 재등록 가능 |
| 전체 스캔 | 기존 미변환 파일 일괄 스캔 후 큐 등록 기능 |
| PHP 8 호환 | &getModel → getModel, new Object → new BaseObject 등 전면 점검 |
Slimmer 미디어 최적화 모듈 — 패치 노트
v1.1.9 (2026-06-07)
🐛 버그 수정
[핵심] API 모드에서 변환 완료 후 큐가 사라지는 문제 수정
worker.php에서api_submitted결과를 체크하지 않아 큐를 즉시 삭제하던 문제 수정_processItemViaApi()에서 파일 전송 전에 먼저api_pending상태로 변경하도록 순서 수정triggerAfterDeleteFile()에서file_srl대신queue_srl로 삭제하고status명시적으로 넘기도록 수정 —api_pending상태 큐 보호slimmer_api_worker.php콜백 전송 실패 시 응답 내용을 로그에 남기도록 개선 (재시도 1회 포함)
[핵심] API 모드 동작 방식 변경 — 콜백 방식 → 동기 폴링 방식
- 기존: SAS 서버가 완료 후 콜백 URL 호출 → Rhymix가 파일 교체
- 변경: Rhymix worker가 SAS에 직접 폴링하여 완료 시 파일 교체
- 콜백 타이밍 이슈 및
queue not found오류 근본 해결 - 카페24 등 외부 웹호스팅 환경에서도 SAS API 키만으로 사용 가능
✨ 개선
slimmer_api_worker.php: 콜백 응답 로깅 강화 (성공/실패/재시도 응답 모두 기록)worker.php:api_pending큐 자동 폴링 블록 추가 — 워커가 직접 SAS 상태 확인 후 다운로드+파일교체 수행
====================================2026. 06.16~18 ========================================
# Slimmer 미디어 최적화 — 패치 노트
---
## v1.2.2.1 (2026-06-18)
### 버그 수정
- **레이스컨디션 — 파일 손상** : 로컬 워커와 JS 폴링이 동시에 `_apiDownloadResult()`를 호출해 변환된 파일을 JSON 오류 응답으로 덮어쓰는 문제 수정
- Atomic mutex (`claimDownloading.xml`) 추가 — 첫 번째 호출만 다운로드 진행, 나머지는 즉시 반환
- Content-Type 검증 추가 — `application/json` 응답을 파일로 저장하는 케이스 차단
- 파일 크기 검증 추가 — 다운로드 불완전 시 원본 보존
- **큐 항목 소실 (`pollAndFinishApiJob`)** : JS 폴링이 워커보다 먼저 SAS 'done' 상태를 감지해 다운로드 후 `deleteQueue`까지 실행, 큐 항목이 사라지는 문제 수정
- 워커 lock 파일(60초 TTL) 체크 추가 — 워커 활성 상태면 다운로드 위임
- SAS 'downloaded' 상태 핸들러 추가 — DB 재확인 후 적절한 상태 반환
- **재인코딩 버튼 동작 안 함** : `procSlimmerAdminReEncode()`에서 `backup_path`가 절대경로일 때 기준 경로를 이중으로 붙이는 문제 수정; 필드명 오타 `original_size` → `source_size` 수정
- **`deleteQueue.xml` 조건 무시** : `operation="not_equal"` → `operation="notequal"` 수정 — `api_pending` 상태 보호 조건이 실제로 적용되지 않던 문제
- **설정 완료하기 버튼이 사라지지 않는 문제** : `_hasIndex()` 함수가 항상 `false`를 반환해 `checkUpdate()`가 영구적으로 `true`를 반환하던 문제 수정. `_hasIndex()` 제거 후 `moduleUpdate()`에서 `@` 에러 억제로 재작성
- **미존재 액션 참조** : `module.xml`에서 구현 없이 등록만 된 `getSlimmerDashboardData` 액션 제거
### 보안
- `module.xml`에 `<grants>` 블록 추가 및 모든 admin/API 액션에 `grant="manager"` 적용 — URL 직접 호출로 비인가 접근이 가능하던 문제 차단
- `procSlimmerCronWorker`, `dispSlimmerApiCallback`은 독립 키 인증 방식 유지 (grant 미적용)
- 전체 PHP 파일(`controller`, `admin.controller`, `view`, `admin.view`, `model`, `class`)에 `if (!defined('__XE__')) exit;` 가드 추가
### 개선
- **SAS 워커 중복 실행 방지** : `slimmer_api_worker.php`에 lock 파일 30초 TTL 체크 추가 — 재시도 버튼 연타 시 워커가 20개 이상 동시 실행되어 FFmpeg 오류(E05)가 발생하던 문제 근본 차단
- **SAS 응답 timeout 단축** : `procSlimmerAdminGetProgress` SAS 상태 조회 timeout 5초 → 2초 (로컬 서버 기준 충분한 여유)
- **`worker_alive` 폴링 필드 추가** : `procSlimmerAdminGetProgress` AJAX 응답에 `worker_alive` 필드 추가 — 서버 lock 파일 기준 30초 이내면 `true`. JS가 이 값을 받아 브라우저/탭에 관계없이 3초 내에 버튼 상태를 동기화
- **관리자 UI — 버튼 연타 방지**
- 실행 버튼 클릭 후 30초 카운트다운 비활성화 (같은 탭 내 연타 차단)
- `localStorage` 기반 탭 간 쿨다운 공유 (같은 브라우저 멀티탭 차단)
- `worker_alive` 서버 응답 기반 버튼 동기화 (다른 브라우저/기기에서도 동기화)
- 큐 페이지 상단에 동시 실행 주의 공지 추가
- **`procSlimmerAdminRetryFailed()` 구조 개선** : 날쿼리 → `retryFailedQueue.xml` + `executeQuery()`로 교체
- **`idx_api_job_id` 인덱스 자동 적용** : `moduleUpdate()`에서 `slimmer_queue.api_job_id` 인덱스를 자동 생성 — 기존 설치 환경에서 수동 SQL 없이 적용됨 (이미 존재하면 에러 억제)
- **`dispSlimmerApiCallback()` 뮤텍스 가드** : `status !== 'processing'` 상태 체크 추가 — 중복 콜백 처리 차단
### 내부 구조
- `claimDownloading.xml` 쿼리 추가 (조건부 UPDATE atomic mutex)
- `retryFailedQueue.xml` 쿼리 추가
- `slimmer_queue` 스키마에 `idx_api_job_id` 인덱스 정의 추가
- `slimmer.admin.view.php`의 중복 `dispSlimmerApiCallback()` 함수 제거 (dead code — `type="view"` 라우팅으로 도달 불가)
---
기능 계속 업데이트 및 개발 예정.
자세한 개발 히스토리는 아래 링크에 있습니다.
미디어 최적화 (slimmert) - v1.2.2.1 호스팅업체 사용자도 가능
====== 가격표 =======
| 모듈 (수정, 재배포 자유) | 200,000 |
| 1개월 호스팅(20G) | 15,000 |
| 6개월 호스팅(130G) | 35,000 |
| 1년 호스팅(250G) | 60,000 |
| 모듈 + api서버(수정, 재배포 자유) | 500,000 |
가격표 전면 재수정 하였습니다.
계좌번호는 위에 있습니다.
보내실때 가입하신 성함으로 보내주시면
익명 QA 게시판에 권한을 부여해드리겠습니다.
그곳에서 문의 주시면 감사하겠습니다.
이곳에 문의를 주셔도 됩니다.
오픈 기념 30일 행사 기간은
2026년 06월 06일 ~ 2026년 07월 07일
===============================================
api 서버 키생성 서버입니다.
키 값이 있어야 호스팅 이용자께서는 인코딩을 하실수 있습니다.

서버팩은 총 3개만 판매하겠습니다.
서버팩 수정, 재배포 자유 입니다.