-
Notifications
You must be signed in to change notification settings - Fork 241
Description
内容
エンジンのリソース情報を取得しようとすると結構な時間がかかることがわかっています。
VOICEVOXエディタは全キャラのリソース取得を起動時に行い、かつそれが必須な形であらゆるものがコーディングされていて、起動時間が10秒ほどかかる要因の1つとなっています。
時間がかかっているのは話者情報の取得API(/speaker_infoと/singer_info)です。
その中でもファイル取得やbase64エンコードに時間がかかっていることもわかっています(その他の関連リンク参照)。
これらの課題を一挙に解決できる方法の1つが、ファイル取得そのものを遅延させる方法です。
このissueでは画像や音声ファイルをbase64エンコードして/speaker_info等で返さず、何らかの方法でURLとして返すようにするかどうかを議論するissueです。
そもそもURL化するのが良いと思う理由
そっちのが一般的なことと、スケーラビリティが高いことと、エディタと親和性が高いためです。
- そっちのが一般的
- base64を返すのはあまり一般的じゃない 気がする
- URLを返す他にも、IDを返してそのIDを元にリクエストしてもらう形式があるけど、後々のスケールのことも考えるとURLのがお得な気がする(↓参照)
- スケーラビリティが高い
- URLで返すなら、エンジンと関係ない場所にあるリソースを返すこともできる
- 外部URLに立ち絵を置いておけば、立ち絵を後から自由に変更できるなど、柔軟な設計も可能にはなる
- エディタと親和性が高い
実現方法
リソースファイルのURLは/static/speaker_infoAPIを作ってstaticでファイルを返せば良さそう。
ファイルパスはspeaker_info関数内で取ってきてるので、それをbase64エンコードするか、ファイルURLにするかの違いなだけなのでコード変更量は大きくなさそう。
エンジン自身のURLを取得するのはrequest.urlを取ってこればできるはず?
互換性を考慮しつつファイルURLを返すように切り替える方法は、ワークアラウンド引数を追加する方法と、v2 APIを作る方法があると思います。
/speaker_infoAPIの引数に「URLで返すかどうか」情報をもたせるワークアラウンド/speaker_info?workaround_resource_url=trueなどとすれば画像・音声をURLで返す- 型の変更がないのでエンジン・エディタともに変更が少なくて済む
engine_manifestは変えなくても良い・・・かも?- ワークアラウンドとしてるけど、正式な方法として提供しても良いかも(問題ないか結構検討したほうが良さそう)
/v2/speaker_infoAPIを作り、SpeakerInfoV2のようなモデルを返す- APIとモデルを作ること自体は簡単
- APIが増えるので
engine_manifestを変える必要がある - エディタ側もマルチエンジンのこと考えるとそれなりの改修が必要
- 他のv2 APIの拡張性も考え始めると検討事項が増えていく
個人的には議論の末引数指定を正式リリースできそうならそっちが良さそうに思いました。
できなそうなら、v2化するかワークアラウンドにするか諦めるかを考える感じかなと。
その他
関連リンク