Skip to main content

Aivis Voice Model File (.aivm/.aivmx) Utility Library

Project description

aivmlib

PyPI version Python Versions License: MIT

💠 aivmlib: Aivis Voice Model File (.aivm/.aivmx) Utility Library


AIVM (Aivis Voice Model) / AIVMX (Aivis Voice Model for ONNX) は、孊習枈みモデル・ハむパヌパラメヌタ・スタむルベクトル・話者メタデヌタ名前・抂芁・ラむセンス・アむコン・ボむスサンプル などを 1 ぀のファむルにギュッずたずめた、AI 音声合成モデル甚オヌプンファむルフォヌマットです。

[!NOTE]
「AIVM」は、AIVM / AIVMX 䞡方のフォヌマット仕様・メタデヌタ仕様の総称でもありたす。
具䜓的には、AIVM ファむルは「AIVM メタデヌタを远加した Safetensors 圢匏」、AIVMX ファむルは「AIVM メタデヌタを远加した ONNX 圢匏」のモデルファむルです。
「AIVM メタデヌタ」ずは、AIVM 仕様に定矩されおいる、孊習枈みモデルに玐づく各皮メタデヌタのこずをいいたす。

AivisSpeech / AivisSpeech-Engine をはじめずした AIVM 仕様に察応する゜フトりェアに AIVM / AIVMX ファむルを远加するこずで、AI 音声合成モデルを簡単に利甚できたす。

aivmlib / aivmlib-web では、AIVM / AIVMX ファむル内のメタデヌタを読み曞きするためのナヌティリティを提䟛したす。
この aivmlib は、Python で曞かれた AIVM 仕様のリファレンス実装です。Web ブラりザで利甚する堎合は aivmlib-web をご利甚ください。

[!TIP]
AIVM Generator では、ブラりザ䞊の GUI でかんたんに AIVM / AIVMX ファむルを生成・線集できたす。
手動で AIVM / AIVMX ファむルを生成・線集する際は AIVM Generator の利甚をおすすめしたす。

Installation

pip でむンストヌルするず、コマンドラむンツヌル aivmlib も自動的にむンストヌルされたす。
Python 3.11 以䞊が必芁です。

pip install aivmlib

開発時は Poetry を利甚しおいたす。

pip install poetry
git clone https://github.com/Aivis-Project/aivmlib.git
cd aivmlib
poetry install --with dev
poetry run aivmlib --help

Usage

以䞋に CLI ツヌル自䜓の䜿い方を瀺したす。

$ aivmlib --help

 Usage: aivmlib [OPTIONS] COMMAND [ARGS]...

 Aivis Voice Model File (.aivm/.aivmx) Utility Library

╭─ Options ─────────────────────────────────────────────────────────────────────────╮
│ --install-completion          Install completion for the current shell.           │
│ --show-completion             Show completion for the current shell, to copy it   │
│                               or customize the installation.                      │
│ --help                        Show this message and exit.                         │
╰───────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ────────────────────────────────────────────────────────────────────────╮
│ create-aivm    䞎えられたアヌキテクチャ, 孊習枈みモデル, ハむパヌパラメヌタ,      │
│                スタむルベクトルから AIVM メタデヌタを生成した䞊で、               │
│                それを曞き蟌んだ仮の AIVM ファむルを生成する                       │
│ create-aivmx   䞎えられたアヌキテクチャ, 孊習枈みモデル, ハむパヌパラメヌタ,      │
│                スタむルベクトルから AIVM メタデヌタを生成した䞊で、               │
│                それを曞き蟌んだ仮の AIVMX ファむルを生成する                      │
│ show-metadata  指定されたパスの AIVM / AIVMX ファむル内に蚘録されおいる AIVM      │
│                メタデヌタを芋やすく出力する                                       │
╰───────────────────────────────────────────────────────────────────────────────────╯

$ aivmlib show-metadata --help

 Usage: aivmlib show-metadata [OPTIONS] FILE_PATH

 指定されたパスの AIVM / AIVMX ファむル内に蚘録されおいる AIVM メタデヌタを芋やすく出力する

╭─ Arguments ───────────────────────────────────────────────────────────────────────╮
│ *    file_path      PATH  Path to the AIVM / AIVMX file [default: None]           │
│                           [required]                                              │
╰───────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ─────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                       │
╰───────────────────────────────────────────────────────────────────────────────────╯

$ aivmlib create-aivm --help

 Usage: aivmlib create-aivm [OPTIONS]

 䞎えられたアヌキテクチャ, 孊習枈みモデル, ハむパヌパラメヌタ, スタむルベクトルから
 AIVM メタデヌタを生成した䞊で、それを曞き蟌んだ仮の AIVM ファむルを生成する

╭─ Options ─────────────────────────────────────────────────────────────────────────╮
│ *  --output              -o      PATH                    Path to the output AIVM  │
│                                                          file                     │
│                                                          [default: None]          │
│                                                          [required]               │
│ *  --model               -m      PATH                    Path to the Safetensors  │
│                                                          model file               │
│                                                          [default: None]          │
│                                                          [required]               │
│    --hyper-parameters    -h      PATH                    Path to the hyper        │
│                                                          parameters file          │
│                                                          (optional)               │
│                                                          [default: None]          │
│    --style-vectors       -s      PATH                    Path to the style        │
│                                                          vectors file (optional)  │
│                                                          [default: None]          │
│    --model-architecture  -a      [Style-Bert-VITS2|Styl  Model architecture       │
│                                  e-Bert-VITS2            [default:                │
│                                  (JP-Extra)]             Style-Bert-VITS2         │
│                                                          (JP-Extra)]              │
│    --help                                                Show this message and    │
│                                                          exit.                    │
╰───────────────────────────────────────────────────────────────────────────────────╯

$ aivmlib create-aivmx --help

 Usage: aivmlib create-aivmx [OPTIONS]

 䞎えられたアヌキテクチャ, 孊習枈みモデル, ハむパヌパラメヌタ, スタむルベクトルから
 AIVM メタデヌタを生成した䞊で、それを曞き蟌んだ仮の AIVMX ファむルを生成する

╭─ Options ─────────────────────────────────────────────────────────────────────────╮
│ *  --output              -o      PATH                    Path to the output AIVMX │
│                                                          file                     │
│                                                          [default: None]          │
│                                                          [required]               │
│ *  --model               -m      PATH                    Path to the ONNX model   │
│                                                          file                     │
│                                                          [default: None]          │
│                                                          [required]               │
│    --hyper-parameters    -h      PATH                    Path to the hyper        │
│                                                          parameters file          │
│                                                          (optional)               │
│                                                          [default: None]          │
│    --style-vectors       -s      PATH                    Path to the style        │
│                                                          vectors file (optional)  │
│                                                          [default: None]          │
│    --model-architecture  -a      [Style-Bert-VITS2|Styl  Model architecture       │
│                                  e-Bert-VITS2            [default:                │
│                                  (JP-Extra)]             Style-Bert-VITS2         │
│                                                          (JP-Extra)]              │
│    --help                                                Show this message and    │
│                                                          exit.                    │
╰───────────────────────────────────────────────────────────────────────────────────╯

以䞋にコマンドの実行䟋を瀺したす。

# Safetensors 圢匏で保存された "Style-Bert-VITS2 (JP-Extra)" モデルアヌキテクチャの孊習枈みモデルから AIVM ファむルを生成
# .safetensors ず同じディレクトリに config.json ず style_vectors.npy があるこずが前提
# -a オプションを省略した堎合、既定で "Style-Bert-VITS2 (JP-Extra)" の孊習枈みモデルず刀定される
$ aivmlib create-aivm -o ./output.aivm -m ./model.safetensors

# 明瀺的にハむパヌパラメヌタずスタむルベクトルのパスを指定しお生成
$ aivmlib create-aivm -o ./output.aivm -m ./model.safetensors -h ./config.json -s ./style-vectors.npy

# ONNX 圢匏で保存された "Style-Bert-VITS2" モデルアヌキテクチャの孊習枈みモデルから AIVMX ファむルを生成
# .onnx ず同じディレクトリに config.json ず style_vectors.npy があるこずが前提
$ aivmlib create-aivmx -o ./output.aivmx -m ./model.onnx -a "Style-Bert-VITS2"

# 明瀺的にハむパヌパラメヌタずスタむルベクトルのパスを指定しお生成
$ aivmlib create-aivmx -o ./output.aivmx -m ./model.onnx -a "Style-Bert-VITS2" -h ./config.json -s ./style-vectors.npy

# AIVM ファむルに栌玍された AIVM メタデヌタを確認
$ aivmlib show-metadata ./output.aivm

# AIVMX ファむルに栌玍された AIVM メタデヌタを確認
$ aivmlib show-metadata ./output.aivmx

[!TIP]
ラむブラリずしおの䜿い方は、__main__.py に実装されおいる CLI ツヌルの実装を参照しおください。

[!IMPORTANT]
aivmlib / aivmlib-web は、AIVM / AIVMX ファむルフォヌマットの読み蟌み/曞き蟌み機胜のみを有するラむブラリです。
各モデルアヌキテクチャごずの AI 音声合成モデルの掚論ロゞックや、aivmlib / aivmlib-web から取埗したデヌタをどのようにナヌザヌに提瀺するかは、すべおラむブラリの利甚者に委ねられおいたす。

License

MIT License


AIVM Specification

このセクションでは、「AIVM 仕様」に含たれる、䞋蚘の技術仕様を定矩する。

Overview

孊習枈み AI 音声合成モデルず、その利甚に必芁な各皮メタデヌタを単䞀ファむルにたずめるこずで、ファむルの散逞や混乱を防ぎ、モデルの利甚や共有を容易にするこずを目的ずしおいる。

[!TIP]
単䞀ファむルにたずめるこずで、AIVM / AIVMX ファむルをダりンロヌドしお所定のフォルダに配眮するだけで、察応゜フトりェアですぐに音声合成モデルを利甚できるようになるずいった、シンプルな運甚が可胜になる。
圧瞮ファむルではないため、展開の必芁がないのもメリット。

AIVM 仕様は、音声合成モデルのモデルアヌキテクチャに䟝存しない。
異なるモデルアヌキテクチャの音声合成モデルを共通のファむルフォヌマットで扱えるよう、将来的な拡匵性や汎甚性を考慮しお蚭蚈されおいる。

倧元の孊習枈みモデルが単䞀の Safetensors たたは ONNX 圢匏で保存されおいるならば、原則どのようなモデルアヌキテクチャであっおも、メタデヌタを远加しお AIVM / AIVMX ファむルを生成できる。
蚭蚈にあたっおは、倉換凊理を挟むこずなく通垞の Safetensors ファむルや ONNX ファむルずしおロヌドできるよう、既存゚コシステムずの互換性を重芖した。

[!IMPORTANT]
AIVM 仕様は、各モデルアヌキテクチャごずの掚論方法を定矩しない。あくたでも「AI 音声合成モデルのメタデヌタをたずめたファむル」ずしおの仕様のみを定矩する。
たずえば AIVM ファむルの堎合、栌玍されおいる AI 音声合成モデルは PyTorch 甚かもしれないし、TensorFlow 甚かもしれない。
どのように AI 音声合成モデルの掚論を行うかは、AIVM / AIVMX ファむルをサポヌトする゜フトりェアの実装に委ねられおいる。

AIVM File Format Specification

以䞋に、AIVM ファむルフォヌマットの仕様を瀺す。

AIVM (Aivis Voice Model) は、Safetensors (.safetensors) 圢匏で保存された孊習枈みモデルのヘッダヌ領域の䞭に、カスタムメタデヌタずしお話者メタデヌタ (AIVM マニフェスト) ・ハむパヌパラメヌタ・スタむルベクトルずいった各皮情報を栌玍した、Safetensors 圢匏の拡匵仕様である。

「Safetensors 圢匏で保存された AI 音声合成モデル向けの、共通メタデヌタ蚘述仕様」 ずも蚀える。

Safetensors 圢匏ずの互換性

Safetensors 圢匏の拡匵仕様のため、そのたた通垞の Safetensors ファむルずしおロヌドできる。

Safetensors 同様、先頭 8bytes の笊号なし Little-Endian 64bit 敎数がヘッダヌサむズ、その埌ろにヘッダヌサむズの長さだけ UTF-8 の JSON 文字列が続く。
Safetensors のヘッダヌ JSON にはテン゜ルのオフセット等が栌玍されおいるが、__metadata__ キヌには string から string ぞの map を自由に蚭定可胜な仕様である。

この仕様を掻甚し、AIVM は __metadata__ 内の以䞋のキヌに、次の文字列デヌタを栌玍する

  • aivm_manifest : AIVM マニフェスト
    • JSON 文字列ずしお栌玍される
    • マニフェストバヌゞョンや話者メタデヌタを含む倧半の情報が含たれる
  • aivm_hyper_parameters : 音声合成モデルのハむパヌパラメヌタ
    • 栌玍フォヌマットはモデルアヌキテクチャ䟝存
    • Style-Bert-VITS2・Style-Bert-VITS2 (JP-Extra) モデルアヌキテクチャでは JSON 文字列が栌玍される
  • aivm_style_vectors : Base64 ゚ンコヌドされた音声合成モデルのスタむルベクトル (バむナリ)
    • Base64 デコヌド埌のフォヌマットはモデルアヌキテクチャ䟝存
    • Style-Bert-VITS2・Style-Bert-VITS2 (JP-Extra) モデルアヌキテクチャでは NumPy 配列 (.npy) を Base64 ゚ンコヌドした文字列が栌玍される
    • モデルアヌキテクチャ次第では省略されうる

参考文献

AIVMX File Format Specification

以䞋に、AIVMX ファむルフォヌマットの仕様を瀺す。

AIVMX (Aivis Voice Model for ONNX) は、ONNX 圢匏で保存された孊習枈みモデルのメタデヌタ領域の䞭に、カスタムメタデヌタずしお話者メタデヌタ (AIVM マニフェスト) ・ハむパヌパラメヌタ・スタむルベクトルずいった各皮情報を栌玍した、ONNX 圢匏の拡匵仕様である。

「ONNX 圢匏で保存された AI 音声合成モデル向けの、共通メタデヌタ蚘述仕様」 ずも蚀える。

ONNX 圢匏ずの互換性

ONNX 圢匏の拡匵仕様のため、そのたた通垞の ONNX ファむルずしおロヌドできる。

ONNX ファむルは Protocol Buffers 圢匏で定矩されおおり、ルヌトである ModelProto メッセヌゞの metadata_props フィヌルドに、StringStringEntryProto のリストずしおメタデヌタを栌玍できる仕様ずなっおいる。

この仕様を掻甚し、AIVMX は metadata_props 内の以䞋のキヌに、次の文字列デヌタを栌玍する

  • aivm_manifest : AIVM マニフェスト
    • JSON 文字列ずしお栌玍される
    • マニフェストバヌゞョンや話者メタデヌタを含む倧半の情報が含たれる
  • aivm_hyper_parameters : 音声合成モデルのハむパヌパラメヌタ
    • 栌玍フォヌマットはモデルアヌキテクチャ䟝存
    • Style-Bert-VITS2・Style-Bert-VITS2 (JP-Extra) モデルアヌキテクチャでは JSON 文字列が栌玍される
  • aivm_style_vectors : Base64 ゚ンコヌドされた音声合成モデルのスタむルベクトル (バむナリ)
    • Base64 デコヌド埌のフォヌマットはモデルアヌキテクチャ䟝存
    • Style-Bert-VITS2・Style-Bert-VITS2 (JP-Extra) モデルアヌキテクチャでは NumPy 配列 (.npy) を Base64 ゚ンコヌドした文字列が栌玍される
    • モデルアヌキテクチャ次第では省略されうる

参考文献

AIVM Manifest Specification (Version 1.0)

以䞋に、AIVM / AIVMX ファむルフォヌマットに含たれる、AIVM マニフェスト (Version 1.0) の仕様を瀺す。

AIVM マニフェストには、マニフェストバヌゞョン・モデルアヌキテクチャ・モデル名・話者メタデヌタ・スタむル情報などの、音声合成モデルの利甚に必芁ずなる様々な情報が含たれる。

AIVM マニフェストのデヌタ圢匏は、JSON フォヌマットで蚘述された UTF-8 文字列である。
JSON フォヌマットの郜合䞊、画像や音声デヌタは Base64 ゚ンコヌドされた文字列で栌玍される。

[!NOTE]
珟圚 AIVM マニフェストのコンテナフォヌマットずしお定矩されおいる AIVM (Safetensors) ・AIVMX (ONNX) のメタデヌタ領域はネストなしの string 型から string 型ぞの key-value でなければならないため、すべおのメタデヌタを文字列にシリアラむズしお栌玍する仕様ずなっおいる。
画像や音声などのバむナリデヌタに぀いおは、Base64 ゚ンコヌドを斜した䞊で文字列ずしお栌玍する。

サポヌトされるモデルアヌキテクチャ

  • Style-Bert-VITS2
  • Style-Bert-VITS2 (JP-Extra)

[!IMPORTANT]
AIVM / AIVMX ファむルをサポヌトする゜フトりェアでは、自゜フトりェアではサポヌト察象倖のモデルアヌキテクチャの AIVM / AIVMX ファむルを、適切にバリデヌションする必芁がある。
たずえば Style-Bert-VITS2 (JP-Extra) 以倖のモデルアヌキテクチャをサポヌトしない゜フトりェアでは、Style-Bert-VITS2 モデルアヌキテクチャの AIVM / AIVMX ファむルのむンストヌルを求められた際に「このモデルアヌキテクチャには察応しおいたせん」ずアラヌトを衚瀺し、むンストヌルを䞭止するよう実装すべき。

[!IMPORTANT]
技術的には䞊蚘以倖のモデルアヌキテクチャの音声合成モデルも栌玍可胜だが、AIVM マニフェスト (Version 1.0) 仕様で公匏に定矩されおいるモデルアヌキテクチャ文字列は䞊蚘のみ。
独自にモデルアヌキテクチャ文字列を定矩する堎合は、既存のモデルアヌキテクチャずの名前衝突や異なる゜フト間での衚蚘揺れが発生しないよう、现心の泚意を払う必芁がある。
なるべくこのリポゞトリにプルリク゚ストを送信し、公匏に AIVM 仕様に新しいモデルアヌキテクチャのサポヌトを远加する圢を取るこずを掚奚する。

AIVM マニフェストのフィヌルド定矩

以䞋は AIVM マニフェスト (Version 1.0) 仕様時点での AIVM マニフェストのフィヌルド定矩を瀺す (aivmlib の Pydantic スキヌマ定矩 より抜粋) 。

[!IMPORTANT]
AIVM マニフェスト内のフィヌルドは、今埌 AIVM 仕様が曎新された際に远加・拡匵・削陀される可胜性がある。
今埌のバヌゞョン曎新や远加のモデルアヌキテクチャのサポヌトにより、AIVM マニフェストや AIVM / AIVMX ファむルフォヌマット自䜓に新しいメタデヌタが远加されるこずも十分考えられる。
珟圚有効な AIVM マニフェストバヌゞョンは 1.0 のみ。

class ModelArchitecture(StrEnum):
    StyleBertVITS2 = 'Style-Bert-VITS2'  # 察応蚀語: "ja", "en-US", "zh-CN"
    StyleBertVITS2JPExtra = 'Style-Bert-VITS2 (JP-Extra)'  # 察応蚀語: "ja"

class ModelFormat(StrEnum):
    Safetensors = 'Safetensors'
    ONNX = 'ONNX'

class AivmManifest(BaseModel):
    """ AIVM マニフェストのスキヌマ """
    # AIVM マニフェストのバヌゞョン (ex: 1.0)
    # 珟圚は 1.0 のみサポヌト
    manifest_version: Literal['1.0']
    # 音声合成モデルの名前 (最倧 80 文字)
    # 音声合成モデル内の話者が 1 名の堎合は話者名ず同じ倀を蚭定すべき
    name: Annotated[str, StringConstraints(min_length=1, max_length=80)]
    # 音声合成モデルの簡朔な説明 (最倧 140 文字 / 省略時は空文字列を蚭定)
    description: Annotated[str, StringConstraints(max_length=140)] = ''
    # 音声合成モデルの制䜜者名のリスト (省略時は空リストを蚭定)
    # 制䜜者名には npm package.json の "author", "contributors" に指定できるものず同じ曞匏を利甚できる
    # 䟋: ["John Doe", "Jane Doe <jane.doe@example.com>", "John Doe <john.doe@example.com> (https://example.com)"]
    creators: list[Annotated[str, StringConstraints(min_length=1, max_length=255)]] = []
    # 音声合成モデルのラむセンス情報 (Markdown 圢匏たたはプレヌンテキスト / 省略時は None を蚭定)
    # AIVM 仕様に察応する゜フトでラむセンス情報を衚瀺できるよう、Markdown 圢匏たたはプレヌンテキストでラむセンスの党文を蚭定する想定
    # 瀟内のみでの利甚など、この音声合成モデルの公開・配垃を行わない堎合は None を蚭定する
    license: Annotated[str, StringConstraints(min_length=1)] | None = None
    # 音声合成モデルのアヌキテクチャ (音声合成技術の皮類)
    model_architecture: ModelArchitecture
    # 音声合成モデルのモデル圢匏 (Safetensors たたは ONNX)
    # AIVM ファむル (.aivm) のモデル圢匏は Safetensors 、AIVMX ファむル (.aivmx) のモデル圢匏は ONNX である
    model_format: ModelFormat
    # 音声合成モデル孊習時の゚ポック数 (省略時は None を蚭定)
    training_epochs: Annotated[int, Field(ge=0)] | None = None
    # 音声合成モデル孊習時のステップ数 (省略時は None を蚭定)
    training_steps: Annotated[int, Field(ge=0)] | None = None
    # 音声合成モデルを䞀意に識別する UUID
    uuid: UUID
    # 音声合成モデルのバヌゞョン (SemVer 2.0 準拠 / ex: 1.0.0)
    version: Annotated[str, StringConstraints(pattern=r'^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$')]
    # 音声合成モデルの話者情報 (最䜎 1 人以䞊の話者が必芁)
    speakers: list[AivmManifestSpeaker]

class AivmManifestSpeaker(BaseModel):
    """ AIVM マニフェストの話者情報 """
    # 話者の名前 (最倧 80 文字)
    # 音声合成モデル内の話者が 1 名の堎合は音声合成モデル名ず同じ倀を蚭定すべき
    name: Annotated[str, StringConstraints(min_length=1, max_length=80)]
    # 話者のアむコン画像 (Data URL)
    # 画像ファむル圢匏は 512×512 の JPEG (image/jpeg)・PNG (image/png) のいずれか (JPEG を掚奚)
    icon: Annotated[str, StringConstraints(pattern=r'^data:image/(jpeg|png);base64,[A-Za-z0-9+/=]+$')]
    # 話者の察応蚀語のリスト (BCP 47 蚀語タグ)
    # 䟋: 日本語: "ja", アメリカ英語: "en-US", 暙準䞭囜語: "zh-CN"
    supported_languages: list[Annotated[str, StringConstraints(pattern=r'^[a-z]{2,3}(?:-[A-Z]{4})?(?:-(?:[A-Z]{2}|\d{3}))?(?:-(?:[A-Za-z0-9]{5,8}|\d[A-Za-z0-9]{3}))*(?:-[A-Za-z](?:-[A-Za-z0-9]{2,8})+)*(?:-x(?:-[A-Za-z0-9]{1,8})+)?$')]]
    # 話者を䞀意に識別する UUID
    uuid: UUID
    # 話者のロヌカル ID (この音声合成モデル内で話者を識別するための䞀意なロヌカル ID で、uuid ずは異なる)
    local_id: Annotated[int, Field(ge=0)]
    # 話者のスタむル情報 (最䜎 1 ぀以䞊のスタむルが必芁)
    styles: list[AivmManifestSpeakerStyle]

class AivmManifestSpeakerStyle(BaseModel):
    """ AIVM マニフェストの話者スタむル情報 """
    # スタむルの名前 (最倧 20 文字)
    name: Annotated[str, StringConstraints(min_length=1, max_length=20)]
    # スタむルのアむコン画像 (Data URL, 省略可胜)
    # 省略時は話者のアむコン画像がスタむルのアむコン画像ずしお䜿われる想定
    # 画像ファむル圢匏は 512×512 の JPEG (image/jpeg)・PNG (image/png) のいずれか (JPEG を掚奚)
    icon: Annotated[str, StringConstraints(pattern=r'^data:image/(jpeg|png);base64,[A-Za-z0-9+/=]+$')] | None = None
    # スタむルの ID (この話者内でスタむルを識別するための䞀意なロヌカル ID で、uuid ずは異なる)
    local_id: Annotated[int, Field(ge=0, le=31)]  # 最倧 32 スタむルたでサポヌト
    # スタむルごずのボむスサンプル (省略時は空リストを蚭定)
    voice_samples: list[AivmManifestVoiceSample] = []

class AivmManifestVoiceSample(BaseModel):
    """ AIVM マニフェストのボむスサンプル情報 """
    # ボむスサンプルの音声ファむル (Data URL)
    # 音声ファむル圢匏は WAV (audio/wav, Codec: PCM 16bit)・M4A (audio/mp4, Codec: AAC-LC) のいずれか (M4A を掚奚)
    audio: Annotated[str, StringConstraints(pattern=r'^data:audio/(wav|mp4);base64,[A-Za-z0-9+/=]+$')]
    # ボむスサンプルの曞き起こし文
    # 曞き起こし文は音声ファむルでの発話内容ず䞀臎しおいる必芁がある
    transcript: Annotated[str, StringConstraints(min_length=1)]

FAQ

Q. AIVM ず AIVMX ずいう 2 ぀のフォヌマットが定矩されおいるのはなぜですか

A. 異なる甚途や環境に最適化された 2 ぀のフォヌマットを提䟛するこずで、より柔軟な利甚を可胜にするためです。

  • AIVM (.aivm): PyTorch などの機械孊習フレヌムワヌクで盎接利甚できる Safetensors 圢匏をベヌスずしたフォヌマットです。
    • 研究開発やモデルの Fine-Tuning 、モデルマヌゞによる新たな声質生成などに適しおいたす。
    • 䞀般に、NVIDIA GPU (CUDA / TensorRT など) での高速掚論に特化しおいたす。
    • PyTorch には .pth (pickle) 圢匏もありたすが、Python コヌドをそのたたシリアラむズする pickle の特性䞊、任意コヌドの実行が可胜な脆匱性がありたす。したがっお、AIVM 仕様では察応予定はありたせん。
  • AIVMX (.aivmx): 様々な環境で高速な掚論が可胜な ONNX 圢匏をベヌスずしたフォヌマットです。
    • 特に CPU での掚論や、゚ッゞデバむスでの利甚に適しおいたす。たた Web ブラりザでも掚論可胜です。
    • 2024 幎時点では、䞀般的な PC ナヌザヌの倚くは NVIDIA GPU や NPU を搭茉しおいない PC を䜿甚しおいたす。
      • ONNX 圢匏は CPU での掚論性胜に優れおいるため、GPU や NPU がなくおも快適に音声合成を実行できたす。
      • さらに ONNX 圢匏は DirectML 掚論をサポヌトしおおり、Windows では AMD Radeon / Intel Arc GPU でも高速掚論が可胜です。
    • AIVM 仕様察応゜フトりェアのリファレンス実装でもある AivisSpeech は AIVMX ファむルにのみ察応しおいたす。
      • PyTorch 䟝存を排陀しおむンストヌルサむズを削枛し、同時に CPU 掚論速床を向䞊させるためです。

Q. AIVM / AIVMX ファむルを既存のツヌルで読み蟌むこずはできたすか

A. はい、可胜です。

AIVM は Safetensors 圢匏の、AIVMX は ONNX 圢匏の拡匵仕様ずしお蚭蚈されおいるため、それぞれ通垞の Safetensors ファむル・ONNX ファむルずしお読み蟌むこずができたす。
AIVM メタデヌタは既存のモデルフォヌマット仕様で定められたメタデヌタ領域に栌玍されおいるため、既存のツヌルの動䜜に圱響を䞎えるこずはありたせん。

Q. 既存の AI 音声合成モデルを AIVM / AIVMX に倉換するにはどうすればよいですか

A. 以䞋の2぀の方法がありたす。

  1. AIVM Generator (掚奚): ブラりザ䞊の GUI で簡単に AIVM / AIVMX ファむルを生成・線集できたす。
  2. aivmlib: このラむブラリが提䟛する CLI ツヌルを䜿甚しお、コマンドラむンから最䜎限のメタデヌタが蚭定された AIVM / AIVMX ファむルを生成できたす。
    • ハむパヌパラメヌタなどから倉換した最䜎限のメタデヌタのみ蚭定されおいるため、実際に配垃する際は別途メタデヌタを線集する必芁がありたす。

なお、倉換元のモデルは単䞀の Safetensors たたは ONNX 圢匏で保存されおいる必芁がありたす。

Q. AIVM マニフェストのバヌゞョン管理はどのように行われたすか

A. AIVM マニフェストのバヌゞョン管理は以䞋の方針で行われたす。

  • マむナヌバヌゞョンアップ (ex: 1.0 -> 1.1): 新しいフィヌルドの远加など、埌方互換性が保たれた倉曎
  • メゞャヌバヌゞョンアップ (ex: 1.1 -> 2.0): 既存フィヌルドの削陀や構造倉曎など、埌方互換性のない倉曎

珟圚は 1.0 が最新です。

Q. aivmlib ず aivmlib-web の違いはなんですか

A. aivmlib ず aivmlib-web は、同じ AIVM 仕様を異なる蚀語/動䜜環境向けに実装したラむブラリになりたす。

  • aivmlib: Python 実装。デスクトップアプリケヌションやサヌバヌサむドでの利甚を想定しおいたす。
    • NVIDIA GPU 搭茉の高火力サヌバヌで運甚するケヌスでは、モデルアヌキテクチャや掚論環境次第ですが、AIVMX (ONNX) 圢匏よりも AIVM (Safetensors) 圢匏の方が高速な可胜性もありたす。
    • aivmlib は aivmlib-web のリファレンス実装でもありたす。新しい仕様を実装する際は、たず aivmlib に実装しおから、aivmlib-web に移怍する圢をずっおいたす。
  • aivmlib-web: TypeScript 実装。Web ブラりザ䞊での利甚を想定しおいたす。
    • AIVM Generator や Web ブラりザ䞊で音声合成を行うサヌビスで䜿うこずを前提に蚭蚈・開発されおいたす。
    • AIVM ず AIVMX 䞡方のファむルを扱えたす䞻に AIVM Generator 向け。
      • Web ブラりザで掚論可胜なモデルフォヌマットは基本的に ONNX 圢匏に限られるため、実運甚䞊は AIVMX ファむルのみ扱うケヌスがほずんどのはずです。
    • Python の BinaryIO が JavaScript Web API の File (Blob) になるなど、Web ブラりザの特性に応じた実装の違いはありたすが、基本的な API 蚭蚈は aivmlib ず同様です。
      • Node.js や Deno などのサヌバヌサむド JavaScript 環境ぞの察応予定はありたせん。

[!TIP]
珟時点では、aivmlib / aivmlib-web 以倖に、公匏にメンテナンスされる AIVM 仕様察応ラむブラリはありたせん。
今埌、サヌドパヌティヌの他蚀語向けラむブラリが登堎する可胜性はありたす。

[!IMPORTANT]
新しいモデルアヌキテクチャのサポヌトを远加する際は、aivmlib ず aivmlib-web の䞡方に実装を远加する必芁がありたす。
AIVM Generator は aivmlib-web を䜿甚しおいるため、゚ンドナヌザヌに新機胜を提䟛するためには䞡方のラむブラリをアップデヌトする必芁がありたす。

Q. 新しいモデルアヌキテクチャのサポヌトを远加するにはどうすればよいですか

A. AIVM 仕様はモデルアヌキテクチャの実装詳现を芏定しないため、比范的容易に新しいモデルアヌキテクチャを远加できたす。

  1. AIVM マニフェスト内のメタデヌタだけで察応できる堎合: ModelArchitecture に新しい皮類䟋: GPT-SoVITS2を远加するプルリク゚ストを送信するだけで察応可胜です。
    • その際、なるべく同時に generate_aivm_metadata() 関数に新しいモデルアヌキテクチャのサポヌトを远加しおください。
  2. モデルアヌキテクチャ固有のメタデヌタの远加が必芁な堎合: aivm_style_vectors フィヌルドのように、AIVM マニフェストずは別のメタデヌタキヌを新蚭する仕様を策定した䞊で、プルリク゚ストを送信しおください。
    • なるべく aivmlib (Python) ず aivmlib-web (TypeScript Web) の䞡方でサポヌトできる仕様が望たしいです。
    • 圓該モデルアヌキテクチャが Web で掚論可胜な ONNX 圢匏に察応しおいない堎合、掚論時のみ必芁なメタデヌタに関しおは、aivmlib-web で察応可胜な仕様である必芁はありたせん。
    • AIVM マニフェストに远加するメタデヌタは、aivmlib-web でもサポヌトできるものでなければなりたせん埌述。

[!IMPORTANT] 提出される AIVM マニフェスト仕様は、技術的に aivmlib (Python) ず aivmlib-web (TypeScript Web) の䞡方でサポヌトできるものでなければなりたせん。
AIVM Generator の内郚では aivmlib-web が利甚されおいたす。
aivmlib にサポヌトを远加したら、aivmlib-web にも同様にサポヌトを远加しおください。

[!NOTE]
AIVM マニフェストは、モデルアヌキテクチャに䟝存しない共通のメタデヌタのみを定矩する蚭蚈ずしおいたす。
実装固有のハむパヌパラメヌタは、aivm_hyper_parameters フィヌルドに栌玍しおください。
ハむパヌパラメヌタの Pydantic スキヌマ定矩の远加も受け付けたす。珟圚は Style-Bert-VITS2 系アヌキテクチャのハむパヌパラメヌタのスキヌマのみが定矩されおいたす。

[!NOTE]
圓然ですが、AIVM / AIVMX ぞの倉換元モデルは単䞀の Safetensors たたは ONNX 圢匏で保存されおいる必芁がありたす。
したがっお、耇数のモデルファむルにたたがるモデルアヌキテクチャはサポヌトされおいたせん。
モデルファむルを䞀぀に結合する、䞍芁なモデルファむルを削るなどの察応をご怜蚎ください。

Q. ラむセンス情報はどのように蚘述すべきですか

A. ラむセンス情報は Markdown 圢匏たたはプレヌンテキストで、ラむセンスの党文のコピヌを AIVM / AIVMX ファむルに盎接埋め蟌む圢で蚭定したす。

URL 指定ではなくラむセンス党文を埋め蟌む理由は以䞋の通りです。

  • URL の氞続性が保蚌できない
  • URL だけだずラむセンス名が分からない
  • カスタムラむセンスの芏定が難しい
  • AIVM 仕様察応゜フトりェアでラむセンス情報を盎接衚瀺できる必芁がある

Q. 画像・音声デヌタのサむズ制限はありたすか

A. 具䜓的なサむズ制限は芏定しおいたせんが、䞀般にモデルファむル自䜓のファむルサむズが巚倧なため、メタデヌタによるさらなるファむルサむズ増加は最小限に抑えるべきです。

  • 画像ファむル: 512×512 の JPEG たたは PNG (JPEG を掚奚)
  • 音声ファむル: WAV (PCM 16bit) たたは M4A (AAC-LC) (M4A を掚奚)

[!TIP]
リファレンス実装である AIVM Generator では、これらのガむドラむンに埓っお適切なサむズ最適化を行っおいたす。

Q. メタデヌタは手動で線集できたすか

A. メタデヌタは盎接バむナリに埋め蟌たれるため、手動線集は掚奚されたせん。
゚ンドナヌザヌの方は AIVM Generator をご利甚ください。

[!TIP]
開発者は、aivmlib / aivmlib-web を䜿甚しお独自のアプリケヌションを䜜成できたす。
aivmlib CLI は、最䜎限のメタデヌタを持぀ AIVM / AIVMX ファむルの生成ず、メタデヌタの確認機胜のみを提䟛したす。

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aivmlib-1.0.0.tar.gz (33.8 kB view details)

Uploaded Source

Built Distribution

aivmlib-1.0.0-py3-none-any.whl (26.1 kB view details)

Uploaded Python 3

File details

Details for the file aivmlib-1.0.0.tar.gz.

File metadata

  • Download URL: aivmlib-1.0.0.tar.gz
  • Upload date:
  • Size: 33.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for aivmlib-1.0.0.tar.gz
Algorithm Hash digest
SHA256 601d244fd00c73830fb74e0dde4df61091b04f5722426c8019e7e7f18d2d5b11
MD5 97912f7e0bc427673ef00f6bc741d204
BLAKE2b-256 ed00d8e89d6a40d87c099e6b075c4201aee60502774eab77d6d2782bbc21013a

See more details on using hashes here.

File details

Details for the file aivmlib-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: aivmlib-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 26.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for aivmlib-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0e797e52b24ea8ab830198ea7cb95d9f1ee8a07bd72693a813477ee7a471cca7
MD5 2cd7c2fc81fa744552241c0e83a6ca11
BLAKE2b-256 8353a6d4bd106315aa441324d420fe605256a17617d76ce493c01a9482dad950

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page