File size: 2,362 Bytes
44213cc
bd8f290
 
 
44213cc
 
bd8f290
44213cc
 
 
 
bd8f290
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
---
title: Kashikogi Async Space (Draft)
emoji: 🎓
colorFrom: blue
colorTo: purple
sdk: gradio
sdk_version: "4.19.2"
app_file: app.py
pinned: false
---

# Kashikogi Async Space

賢杉賢太郎プロジェクト向けの Hugging Face Space 構成です。Gradio Blocks と FastAPI を同一プロセスで提供し、以下の機能を実装します。

- `POST /api/audio/upload` : Dify 音声化ノードで生成された一時 URL を受け取り、Hugging Face Dataset に保存
- `POST /api/video/render` : PDF とスライド音声一覧を受け取り、バックグラウンドジョブで動画化
- `GET /api/jobs/{job_id}` : 動画化ジョブの進捗と結果確認
- Gradio UI : Audio Upload / Video Render / Job Status タブで手動検証

## ディレクトリ構成

```
majin/kashikogi_async_space/
├── README.md
├── app.py
├── kashikogi_app/
│   ├── core/
│   ├── models/
│   ├── services/
│   ├── utils/
│   └── gradio_interface.py
├── requirements.txt
└── packages.txt
```

## 必要な環境変数

| 変数名 | 内容 |
|--------|------|
| `HF_DATASET_ID` | 音声・動画・プレビューを保存する Dataset ID |
| `HF_TOKEN` | Dataset 書き込み用トークン |
| `AUDIO_STORAGE_PREFIX` | 音声ファイル保存ディレクトリ(既定 `audio/`) |
| `VIDEO_STORAGE_PREFIX` | 動画・プレビュー保存ディレクトリ(既定 `videos/`) |
| `PDF_RENDER_DPI` | PDF→画像変換時の DPI(既定 150) |
| `PREVIEW_SLIDE_INDEX` | プレビューに使うスライド番号(0 始まり、既定 1) |
| `VIDEO_JOBS_MAX_WORKERS` | 動画レンダリングの同時実行数(既定 1) |
| `VIDEO_JOB_CLEANUP_SECONDS` | ジョブ履歴保持秒数(既定 3600) |
| `LOG_LEVEL` | ログレベル(既定 `INFO`) |
| `CALLBACK_TOKEN` | API/Gradio いずれも必須の共有トークン(未入力時は401) |
| `DIFY_WORKFLOW_URL` | 動画完了時に呼び出す Dify ワークフローのエンドポイント |
| `DIFY_API_KEY` | 上記ワークフロー実行用の API キー |
| `DIFY_LINE_TOKEN_VALUE` | Dify 側で LINE トークンを参照するための値(既定 `{{#env.LINE_TOKEN#}}`) |

## Space 依存

```
poppler-utils
ffmpeg
```

Python 依存は `requirements.txt` を参照してください。