231 lines
9.0 KiB
SQL
231 lines
9.0 KiB
SQL
-- NB: This is a manually squashed view of all the CREATE and ALTER statements,
|
|
-- with comments attached to the fields for centralized documentation.
|
|
|
|
-- noinspection SqlDialectInspectionForFile
|
|
-- noinspection SqlNoDataSourceInspectionForFile
|
|
-- noinspection SqlResolveForFile
|
|
|
|
CREATE TABLE tts_models (
|
|
-- Not used for anything except replication.
|
|
id BIGINT(20) NOT NULL AUTO_INCREMENT,
|
|
|
|
-- Effective "primary key" (PUBLIC)
|
|
token VARCHAR(32) NOT NULL,
|
|
|
|
-- NB: DO NOT CHANGE ORDER; APPEND ONLY!
|
|
-- THIS MUST MATCH THE RESPECTIVE JOBS TABLE.
|
|
tts_model_type ENUM(
|
|
'not-set',
|
|
'tacotron2',
|
|
'glowtts',
|
|
'glowtts-vocodes',
|
|
'talknet'
|
|
) NOT NULL DEFAULT 'not-set',
|
|
|
|
-- The name of the type of pipeline to use, eg "legacy_fakeyou", "legacy_vocodes", "english_v1", etc.
|
|
-- New pipelines may be added at any point in the future and the source of truth for them will mostly
|
|
-- live in the `storyteller-ml` repository.
|
|
-- Older models and brand new models will have this field set to null, and we'll infer which value to
|
|
-- lazily backfill based on the creation date and language setting.
|
|
text_pipeline_type VARCHAR(64) DEFAULT NULL,
|
|
|
|
-- For models distributed as archives/bundles (eg. TalkNet), we can pack
|
|
-- in a vocoder. Note that this vocoder does not have to be used.
|
|
has_self_contained_vocoder BOOLEAN NOT NULL DEFAULT FALSE,
|
|
|
|
-- For models distributed as archives/bundles (eg. TalkNet), we can pack
|
|
-- in a duration model.
|
|
has_self_contained_duration_model BOOLEAN NOT NULL DEFAULT FALSE,
|
|
|
|
-- For models distributed as archives/bundles (eg. TalkNet), we can pack
|
|
-- in a pitch model.
|
|
has_self_contained_pitch_model BOOLEAN NOT NULL DEFAULT FALSE,
|
|
|
|
-- NB(2022-07-05): THIS IS NOW MEANINGLESS AND SUPERSEDED BY `TEXT_PIPELINE_TYPE`.
|
|
-- NB: DO NOT CHANGE ORDER; APPEND ONLY!
|
|
-- How text should be handled.
|
|
text_preprocessing_algorithm ENUM(
|
|
'basic',
|
|
'arpabet'
|
|
) NOT NULL DEFAULT 'basic',
|
|
|
|
-- If true, multiply the mel outputs before being vocoded by a globally default constant.
|
|
use_default_mel_multiply_factor BOOLEAN NOT NULL DEFAULT FALSE,
|
|
|
|
-- If not null, multiply the mel outputs before being vocoded by this value.
|
|
-- This is used instead of the default if `use_default_mel_multiply_factor` is
|
|
-- set (ie. `use_default_mel_multiply_factor` is ignored and this custom value is used instead)
|
|
maybe_custom_mel_multiply_factor DOUBLE DEFAULT NULL,
|
|
|
|
-- If set, use a different pretrained vocoder.
|
|
-- If not set, use the website default. (Currently HifiGan-SS)
|
|
maybe_default_pretrained_vocoder VARCHAR(64) DEFAULT NULL,
|
|
|
|
-- If set, we'll use a custom vocoder (from table vocoder_models) instead of a default vocoder.
|
|
-- If not set, we'll use `maybe_default_pretrained_vocoder` (or the website default).
|
|
maybe_custom_vocoder_token VARCHAR(32) DEFAULT NULL,
|
|
|
|
-- Optional Pointer to a newer version of the voice
|
|
-- If there's a newer version, we can disable this one.
|
|
-- maybe_updated_model_token VARCHAR(32) DEFAULT NULL,
|
|
|
|
-- We can set as a combination of ['username' + 'voice-name']
|
|
-- There can be public aliases for voices, eg. a voice's default model.
|
|
-- A user can change this.
|
|
-- As such, these should not be foreign keys.
|
|
-- updatable_slug VARCHAR(64) NOT NULL,
|
|
|
|
-- Can be linked to a well-known voice
|
|
-- maybe_subject_token VARCHAR(32) DEFAULT NULL,
|
|
-- maybe_actor_subject_token VARCHAR(32) DEFAULT NULL,
|
|
|
|
-- ========== UNSTRUCTURED METADATA ==========
|
|
|
|
-- The full IETF BCP47 language tag (eg. en, en-US, es-419, ja-JP, pt, etc.)
|
|
ietf_language_tag VARCHAR(64) NOT NULL DEFAULT 'en',
|
|
|
|
-- The IETF BCP47 language tag's primary language subtag (eg. "es-419" becomes "es")
|
|
ietf_primary_language_subtag VARCHAR(12) NOT NULL DEFAULT 'en',
|
|
|
|
-- The "name" of the voice model, which might be complicated.
|
|
-- If maybe_subject_token (etc.) is set, then it's authoritative instead.
|
|
title VARCHAR(255) NOT NULL,
|
|
|
|
-- The description of the model in markdown.
|
|
description_markdown TEXT NOT NULL,
|
|
|
|
-- Generated HTML (not user-editable).
|
|
description_rendered_html TEXT NOT NULL,
|
|
|
|
-- eg. Bill Clinton, Batman, or Goku.
|
|
voice_name VARCHAR(255) DEFAULT NULL,
|
|
|
|
-- Optional; eg. Sean Schemmel
|
|
actor_name VARCHAR(255) DEFAULT NULL,
|
|
|
|
-- Optional; eg. if the voice is "happy" or a singer "a-capella", etc.
|
|
characteristic VARCHAR(255) DEFAULT NULL,
|
|
|
|
-- Optional; eg. if you train the model more than once.
|
|
version_string VARCHAR(255) DEFAULT NULL,
|
|
|
|
-- Whether the voice features on the front of FakeYou or Storyteller Twitch TTS
|
|
is_front_page_featured BOOLEAN NOT NULL DEFAULT FALSE,
|
|
is_twitch_featured BOOLEAN NOT NULL DEFAULT FALSE,
|
|
|
|
-- A suggested bot command prefix, eg. 'sonic' that could be interpreted as '/sonic'
|
|
-- by a TTS system. These are unique strings that can only be applied to one model at
|
|
-- a time at most. Only moderators can set this, and it's only for the best voices.
|
|
maybe_suggested_unique_bot_command VARCHAR(255) DEFAULT NULL,
|
|
|
|
-- ========== IMMUTABLE PROVENANCE AND METADATA ==========
|
|
|
|
-- Where the file was originally downloaded (if it was downloaded)
|
|
original_download_url VARCHAR(512) DEFAULT NULL,
|
|
|
|
-- The filename that was used at upload time (if available)
|
|
original_filename VARCHAR(255) DEFAULT NULL,
|
|
|
|
-- File characteristics
|
|
file_size_bytes INT(10) NOT NULL DEFAULT 0,
|
|
|
|
-- ========== CREATOR DETAILS ==========
|
|
|
|
-- The person that created the template.
|
|
creator_user_token VARCHAR(32) NOT NULL,
|
|
|
|
-- For abuse tracking.
|
|
-- Wide enough for IPv4/6
|
|
creator_ip_address_creation VARCHAR(40) NOT NULL,
|
|
creator_ip_address_last_update VARCHAR(40) NOT NULL,
|
|
|
|
-- (THIS MIGHT NOT BE USED)
|
|
-- NB: DO NOT SORT!
|
|
-- THIS MUST MATCH THE RESPECTIVE JOBS TABLE.
|
|
creator_set_visibility ENUM(
|
|
'public',
|
|
'hidden',
|
|
'private'
|
|
) NOT NULL DEFAULT 'public',
|
|
|
|
-- ========== BUCKET STORAGE ==========
|
|
|
|
-- The pytorch model
|
|
-- For now, this will be a hash of the file contents.
|
|
-- NB: NOT UNIQUE! We can allow duplicate uploads.
|
|
private_bucket_hash CHAR(64) NOT NULL,
|
|
-- The "full url" version of the path
|
|
private_bucket_object_name VARCHAR(255) NOT NULL,
|
|
|
|
-- Whether the file is a zip archive (rather than a model file).
|
|
private_bucket_object_is_archive BOOLEAN NOT NULL DEFAULT FALSE,
|
|
|
|
-- ========== RATING AND RANKING ==========
|
|
|
|
-- Calculated average, on a scale of 0-100
|
|
-- Null with zero ratings.
|
|
-- calculated_average_score INT(3) DEFAULT NULL,
|
|
|
|
-- Other metrics
|
|
-- calculated_total_ratings_submitted_count INT(10) NOT NULL DEFAULT 0,
|
|
-- calculated_total_uses_count BIGINT(10) NOT NULL DEFAULT 0,
|
|
|
|
-- Total count only includes "positive" and "negative" votes, not neutral ones.
|
|
user_ratings_total_count INT(10) UNSIGNED NOT NULL DEFAULT 0,
|
|
user_ratings_positive_count INT(10) UNSIGNED NOT NULL DEFAULT 0,
|
|
user_ratings_negative_count INT(10) UNSIGNED NOT NULL DEFAULT 0,
|
|
|
|
-- ========== MODERATION DETAILS ==========
|
|
|
|
-- Mods have to approve of tts models for them to show up in a public index.
|
|
-- Models can be used by the author (or other parties that know the URL) before
|
|
-- they're approved, but unapproved models won't show up in public indices.
|
|
-- This is independent of other visibility controls (is_mod_disabled, deleted_at,
|
|
-- and creator_set_visibility)
|
|
is_public_listing_approved BOOLEAN DEFAULT NULL,
|
|
|
|
-- Extremely popular models may be locked from deletion or modification by users.
|
|
is_locked_from_user_modification BOOLEAN NOT NULL DEFAULT FALSE,
|
|
|
|
-- In this case, a moderator disables it from being used for inference.
|
|
-- This also disables it for the creator.
|
|
-- Unlike deletion, it remains "visible" to those that have access.
|
|
is_locked_from_use BOOLEAN NOT NULL DEFAULT FALSE,
|
|
|
|
-- If a moderator has comments.
|
|
maybe_mod_comments VARCHAR(255) DEFAULT NULL,
|
|
|
|
-- The last moderator that made changes.
|
|
maybe_mod_user_token VARCHAR(32) DEFAULT NULL,
|
|
|
|
-- ========== VECTOR CLOCK ==========
|
|
|
|
-- Incremented with every update.
|
|
version INT NOT NULL DEFAULT 0,
|
|
|
|
-- ========== TIMESTAMPS ==========
|
|
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
|
|
-- If this is removed by a mod.
|
|
-- It completely disappears from the system.
|
|
user_deleted_at TIMESTAMP NULL,
|
|
mod_deleted_at TIMESTAMP NULL,
|
|
|
|
-- INDICES --
|
|
PRIMARY KEY (id),
|
|
UNIQUE KEY (token),
|
|
KEY fk_creator_user_token (creator_user_token),
|
|
KEY fk_maybe_mod_user_token (maybe_mod_user_token),
|
|
KEY fk_maybe_custom_vocoder_token (maybe_custom_vocoder_token),
|
|
KEY index_creator_ip_address_creation (creator_ip_address_creation),
|
|
KEY index_creator_ip_address_last_update (creator_ip_address_last_update),
|
|
KEY index_creator_set_visibility (creator_set_visibility),
|
|
KEY index_private_bucket_hash (private_bucket_hash),
|
|
KEY index_is_public_listing_approved (is_public_listing_approved),
|
|
KEY index_is_locked_from_user_modification (is_locked_from_user_modification),
|
|
KEY index_is_locked_from_use (is_locked_from_use)
|
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
|