mirror of
https://github.com/storytold/artcraft.git
synced 2026-11-02 00:18:17 +00:00
248 lines
9.9 KiB
SQL
248 lines
9.9 KiB
SQL
-- noinspection SqlDialectInspectionForFile
|
|
-- noinspection SqlNoDataSourceInspectionForFile
|
|
-- noinspection SqlResolveForFile
|
|
|
|
-- Every type of fine tuned model that users can upload.
|
|
CREATE TABLE model_weights (
|
|
-- Not used for anything except replication.
|
|
id BIGINT(20) NOT NULL AUTO_INCREMENT,
|
|
|
|
-- Effective "primary key" (PUBLIC)
|
|
token VARCHAR(32) NOT NULL,
|
|
|
|
-- ========== WEIGHTS CLASSIFICATION ==========
|
|
|
|
-- The exact type of weights
|
|
-- Currently supported values:
|
|
-- * 'hifigan_tt2' - hifigan for Tacotron2; TTS vocoder
|
|
-- * 'rvc_v2' - RVC (v2); voice conversion
|
|
-- * 'sd_1.5' - Stable Diffusion 1.5; image generation
|
|
-- * 'sdxl' - Stable Diffusion XL; image generation
|
|
-- * 'so_vits_svc' - SVC; voice conversion
|
|
-- * 'tt2' - Tacotron2; TTS
|
|
weights_type VARCHAR(32) NOT NULL,
|
|
|
|
-- The broader category of the weights
|
|
-- Currently supported values:
|
|
-- * 'image_generation' (SD1.5, SDXL)
|
|
-- * 'text_to_speech' (TT2)
|
|
-- * 'vocoder' (Hifigan)
|
|
-- * 'voice_conversion' (RVCv2, SVC)
|
|
weights_category VARCHAR(32) NOT NULL,
|
|
|
|
|
|
-- ========== MODEL DESCRIPTION ==========
|
|
|
|
-- The "name" of the model, which might be complicated.
|
|
title VARCHAR(255) NOT NULL,
|
|
|
|
-- A link to a possible thumbnail (TODO: Build thumbnail support reusing media_files)
|
|
maybe_thumbnail_token VARCHAR(32) DEFAULT NULL,
|
|
|
|
-- The description of the model in markdown.
|
|
description_markdown TEXT NOT NULL,
|
|
|
|
-- Generated HTML (not user-editable).
|
|
description_rendered_html TEXT NOT NULL,
|
|
|
|
|
|
-- ========== CREATOR DETAILS ==========
|
|
|
|
-- The person that created the model.
|
|
creator_user_token VARCHAR(32) NOT NULL,
|
|
|
|
-- For abuse tracking.
|
|
-- Wide enough for IPv4/6.
|
|
-- IP address of creator at time of creation.
|
|
creator_ip_address 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',
|
|
|
|
-- The synthetic id associated with this model.
|
|
-- These ids are incremented on a per-user basis to help users
|
|
-- sequence their own work. They serve no other purpose.
|
|
-- "weights" synthetic ids are incremented over all media files
|
|
-- creator_weights_synthetic_id BIGINT(20) DEFAULT NULL,
|
|
|
|
-- "weights_type" synthetic ids are incremented over a given weight type
|
|
-- creator_weights_type_synthetic_id BIGINT(20) DEFAULT NULL,
|
|
|
|
-- The last user to edit the model. This could be the creator or a moderator.
|
|
-- Check the future audit logs table for more info.
|
|
maybe_last_update_user_token VARCHAR(32) 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,
|
|
|
|
-- Checksum of the original weights file
|
|
-- SHA2 hash [SHA2 = CHAR(64), SHA1 = CHAR(40), MD5 = CHAR(32)]
|
|
-- Note that SHA2 is a hash family (SHA-228, SHA-256, SHA-384, SHA-512, SHA-512/224, SHA-512/256, ...)
|
|
-- and produces different lengths output depending on the choice of algorithm.
|
|
file_checksum_sha2 CHAR(64) NOT NULL,
|
|
|
|
-- ========== BUCKET STORAGE ==========
|
|
|
|
-- The hash for the bucket directory that contains the original upload
|
|
-- as well as any associated other files.
|
|
-- The bucket filename for the primary file (not including the directory path) is given by:
|
|
-- `[{maybe_private_bucket_prefix}]{private_bucket_hash}[{maybe_private_bucket_extension}]`
|
|
private_bucket_hash VARCHAR(32) NOT NULL,
|
|
|
|
-- An optional prefix on the bucket filename.
|
|
-- If present, this will be prepended to the beginning of the bucket filename to access the file.
|
|
-- The bucket filename for the primary file (not including the directory path) is given by:
|
|
-- `[{maybe_private_bucket_prefix}]{private_directory_hash}[{maybe_private_bucket_extension}]`
|
|
maybe_private_bucket_prefix VARCHAR(16) DEFAULT NULL,
|
|
|
|
-- An optional appended extension on the bucket filename.
|
|
-- If present, this will be appended to the end of the bucket filename to access the file.
|
|
-- To allow for flexibility, this extension typically will contain a leading period if
|
|
-- the file needs it (eg ".mp4" rather than "mp4")!
|
|
-- The bucket filename for the primary file (not including the directory path) is given by:
|
|
-- `[{maybe_private_bucket_prefix}]{private_directory_hash}[{maybe_private_bucket_extension}]`
|
|
maybe_private_bucket_extension VARCHAR(16) DEFAULT NULL,
|
|
|
|
|
|
-- ========== MODERATION DETAILS ==========
|
|
|
|
-- Mods may have to approve of vc 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,
|
|
|
|
|
|
-- ========== RATING AND RANKING ==========
|
|
|
|
-- User ratings are cached on the model, but are *not* a source of truth.
|
|
-- Total count only includes "positive" and "negative" votes, not neutral ones.
|
|
cached_user_ratings_total_count INT(10) UNSIGNED NOT NULL DEFAULT 0,
|
|
|
|
-- Total positive
|
|
cached_user_ratings_positive_count INT(10) UNSIGNED NOT NULL DEFAULT 0,
|
|
|
|
-- Total negative
|
|
cached_user_ratings_negative_count INT(10) UNSIGNED NOT NULL DEFAULT 0,
|
|
|
|
-- User ratings are cached on the model, but are *not* a source of truth.
|
|
-- Total count only includes "positive" and "negative" votes, not neutral ones.
|
|
maybe_cached_user_ratings_ratio FLOAT,
|
|
|
|
-- When the cached ratings were last calculated and updated.
|
|
cached_user_ratings_last_updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
|
|
-- ========== MODEL PLACEMENT ==========
|
|
|
|
-- Whether the model features on the front of FakeYou
|
|
-- is_front_page_featured BOOLEAN NOT NULL DEFAULT FALSE,
|
|
|
|
|
|
-- NB: I think this should actually move into polymorphic join tables, so that we don't create a telescopic list of
|
|
-- columns.
|
|
--
|
|
-- -- ========== TTS MODEL METADATA ==========
|
|
--
|
|
-- -- This is for Tacotron2, specifically.
|
|
-- -- 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.
|
|
-- -- tts_text_pipeline_type VARCHAR(64) DEFAULT NULL,
|
|
--
|
|
-- -- If true, multiply the mel outputs before being vocoded by a globally default constant.
|
|
-- tts_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 `tts_use_default_mel_multiply_factor` is
|
|
-- -- set (ie. `tts_use_default_mel_multiply_factor` is ignored and this custom value is used instead)
|
|
-- maybe_tts_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_tts_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_tts_custom_vocoder_token VARCHAR(32) DEFAULT NULL,
|
|
--
|
|
--
|
|
-- -- ========== VOICE CONVERSION MODEL METADATA ==========
|
|
--
|
|
-- -- RVC (v2) specific - whether the model has an index file associated with it
|
|
-- -- These files improve the quality of the results.
|
|
-- vc_has_index_file BOOLEAN NOT NULL DEFAULT FALSE,
|
|
--
|
|
--
|
|
-- -- ========== VOCODER MODEL METADATA ==========
|
|
--
|
|
-- -- Whether the vocoder is recommended for use
|
|
-- -- vocoder_is_staff_recommended BOOLEAN NOT NULL DEFAULT FALSE,
|
|
--
|
|
--
|
|
-- -- ========== VOICE MODEL METADATA (TTS and Voice Conversion Models) ==========
|
|
--
|
|
-- -- The full IETF BCP47 language tag (eg. en, en-US, es-419, ja-JP, pt, etc.)
|
|
-- -- (Not that it matters apart from categorization, since voice conversion is universal.)
|
|
-- voice_ietf_language_tag VARCHAR(64) NOT NULL DEFAULT 'en',
|
|
--
|
|
-- -- The IETF BCP47 language tag's primary language subtag (eg. "es-419" becomes "es")
|
|
-- -- (Not that it matters apart from categorization, since voice conversion is universal.)
|
|
-- voice_ietf_primary_language_subtag VARCHAR(12) NOT NULL DEFAULT 'en',
|
|
--
|
|
-- -- RVC (v2) specific - whether the model has an index file associated with it
|
|
-- -- These files improve the quality of the results.
|
|
-- voice_has_index_file BOOLEAN NOT NULL DEFAULT FALSE,
|
|
|
|
|
|
-- ========== 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)
|
|
-- TODO:
|
|
-- KEY index_model_type (model_type),
|
|
-- KEY fk_maybe_vocoder_token (maybe_vocoder_token),
|
|
-- KEY fk_creator_user_token (creator_user_token),
|
|
-- 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)
|
|
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
|