h-lab/src/main/resources/application.yml
hehihoho3@gmail.com b9aa04d4a3 feat(rework): synced subtitle extraction via file upload + Whisper, SRT export
Phase 1 of subtitle timeline studio. Upload a video in the rework editor →
proxy to Python /transcribe (faster-whisper) → store segments → render a
playback-synced segment list and export CapCut-importable SRT.

- ScriptSegment + SrtFormatter (pure, unit-tested) with speed rescaling
- ChannelVideoScript.segmentsJson column (ddl-auto adds it)
- ChannelService.transcribeFromFile + getSegments/parseSegments
- POST /{id}/transcribe (multipart), GET /{id}/script.srt?speed=, /script now returns segments
- rework.html: upload button, local <video>, segment list, SRT export + speed
- multipart 200MB limit; python.base-url config (PYTHON_BASE_URL)
- repo: findFirstByVideoIdOrderByIdDesc/findAllByVideoId (dedup-safe lookups)

Spec: docs/superpowers/specs/2026-06-12-subtitle-timeline-studio-design.md

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-12 16:23:55 +09:00

68 lines
2.0 KiB
YAML

spring:
application:
name: h-lab
# Secrets are supplied via environment variables, or a git-ignored
# application-local.yml (see application-local.yml.example). No secrets here.
config:
import: optional:classpath:application-local.yml
servlet:
multipart:
max-file-size: ${UPLOAD_MAX_FILE_SIZE:200MB} # 업로드 영상(Whisper 전사용)
max-request-size: ${UPLOAD_MAX_REQUEST_SIZE:200MB}
datasource:
url: ${DB_URL:}
driverClassName: org.postgresql.Driver
username: ${DB_USERNAME:}
password: ${DB_PASSWORD:}
jpa:
database-platform: org.hibernate.dialect.PostgreSQLDialect
hibernate:
ddl-auto: update
show-sql: false
properties:
hibernate:
format_sql: false
decorator:
datasource:
p6spy:
enable-logging: true
multiline: true
logging: slf4j
log-message-format: com.hlab.yanalyst.global.config.P6SpyFormatter
tracing:
include-parameter-values: true
springdoc:
swagger-ui:
path: /swagger-ui.html
tags-sorter: alpha
operations-sorter: alpha
api-docs:
path: /v3/api-docs
server:
port: 8088
# YouTube Data API 키 (YOUTUBE_API_KEY 환경변수 또는 application-local.yml 로 주입)
youtube:
api:
key: ${YOUTUBE_API_KEY:}
# Python 마이크로서비스(자막 /transcript, Whisper 전사 /transcribe). 동일 호스트면 http://localhost:8000 로 오버라이드.
python:
base-url: ${PYTHON_BASE_URL:http://h-python.tolag.shop}
hlab:
# 정기 자동 수집: 등록 채널의 신규 Shorts 를 주기적으로 수집
scheduler:
channel-collection:
enabled: ${CHANNEL_COLLECTION_ENABLED:true}
cron: ${CHANNEL_COLLECTION_CRON:0 0 4 * * *} # 매일 04:00
channel-snapshot:
enabled: ${CHANNEL_SNAPSHOT_ENABLED:true}
cron: ${CHANNEL_SNAPSHOT_CRON:0 0 3 * * *} # 매일 03:00 (성장 추이 기록)
youtube:
daily-quota: ${YOUTUBE_DAILY_QUOTA:10000} # 자동 수집이 소비할 수 있는 일일 쿼터 상한(추정)