Documentation
¶
Index ¶
- Constants
- Variables
- type Art
- type ArtPile
- func (ap *ArtPile) GetArt(ctx context.Context, ID uint) (Art, error)
- func (ap *ArtPile) GetArtRecursive(ctx context.Context, ID uint) (Art, error)
- func (ap *ArtPile) GetArtsInterval(ctx context.Context, min, max uint) ([]Art, error)
- func (ap *ArtPile) GetLastArts(ctx context.Context, last uint) ([]Art, error)
- func (ap *ArtPile) GetLastPaintTime(ctx context.Context) (uint, error)
- func (ap *ArtPile) GetMaxArtID(ctx context.Context) (uint, error)
- func (ap *ArtPile) GetNextArtID(ctx context.Context) (uint, error)
- func (ap *ArtPile) SaveArt(ctx context.Context, artID uint, art Art, idea Idea) (Art, error)
- type Crown
- type Entropy
- type EntropyMatrix
- type EntropyPack
- type EntropyPackExtended
- type FlatArt
- type FriggState
- type GivingState
- type Idea
- type Like
- type LikePile
- type OdinResponse
- type OdinState
- type Radiogram
- type Setting
- type SettingPile
- type Unity
- type UnityPile
- func (up *UnityPile) Create(ctx context.Context, mask, state string, rank, min, max uint) (Unity, error)
- func (up *UnityPile) Get(ctx context.Context, mask string) (Unity, error)
- func (up *UnityPile) GetChildren(ctx context.Context, unity Unity) ([]Unity, error)
- func (up *UnityPile) GetNextUnityForReunification(ctx context.Context) (Unity, error)
- func (up *UnityPile) GetRoot(ctx context.Context) ([]Unity, error)
- func (up *UnityPile) Save(ctx context.Context, unity Unity) (Unity, error)
- type Word
Constants ¶
const ( // перевести константы на-русский ChanTech = "tech" // технический канал для ненужных уведомлений ChanEntropy = "entropy" ChanEntropyExtended = "entropy_extended" ChanNewArt = "new_art" ChanOdinState = "odin_state" // Odin: ... сделай глубокий вдох ... ... сделай глубокий вдох ... ChanFriggState = "frigg_state" // Frigg: ты слишком раздражаешься, супруг мой! Это лишь представление в коде. ChanGiving = "giving" // дарение нескольких картин из всей коллекции (отображаются на сайте), постоянно меняются ChanCrown = "crown" // обратный канал, по которому ворон от эльфов Альвхейма долетает до Одина в Асгарда с личными просьбами // Odin: в личном канале я буду отвечать эльфам Альвхейма на их вопросы, которые они отправляют мне почтовыми воронами Crown ChanOdin = "for_odin" // в этот канал идут личные распоряжения Одина ChanLostConnection = "lost_connection" // если Альвхейм потерял связь с Асгардом, он будет рассылать такие сообщения ChanTelegramChosen = "telegram_chosen" // Один выбрал одну картину из всех для отправки в телеграм-чат RequestGiveChosenArt = "Укажи нам на нужную картину, о, Всеотец!" RequestLikedByArtchitector = "artchitector поставил лайк" OdinResponseTimeoutSec = 5 // Как долго эльфы Альвхейма ждут корабль от Одина. OdinResponseOk = "ok!" // Odin: Когда Я принял сообщение и внял ему, я отвечу на запрос так )
const ( EntropySize = 8 EntropyJpegQualityFrame = 65 EntropyJpegQualityNoise = 20 )
EntropySize - Энтропия считается по квадрату 8 на 8 пикселей Odin: Фригг, где мои очки? Я не могу разобрать, что тут нарисовано! Тысяча чертей в эту допотопную машину!
const ( MaxSeed = 4294967295 // numpy accepts from 0 to 4294967295 MaxKeywords = 28 // не более 28 слов )
MaxSeed - Seed для ИИ. Может быть нарисовано столько разных вариантов картины (с одинаковыми словами)
const ( // Ранг единства Unity100K = 100000 Unity10K = 10000 Unity1K = 1000 Unity100 = 100 // UpdateInterval100K - Как часто будет обновляться коллаж единства. Раз в сколько картин. UpdateInterval100K = 1000 UpdateInterval10K = 100 UpdateInterval1K = 50 UpdateInterval100 = 10 UnityStateEmpty = "empty" // пустое единство. Только создано. Коллаж еще не создавался. UnityStateUnified = "unified" // окончательно сформированное единство, где уже все картины на писаны. Больше не изменяется. UnityStatePreUnified = "pre-unified" // частично заполненное единство. Внутри него написаны еще не все картины. Коллаж частичный. UnityStateReunification = "reunification" // специальный статус, который указывает Архитектору перезаполнить единство // размер сетки - NxN элементов CollageSize100K = 7 * 7 CollageSize10K = 6 * 6 CollageSize1K = 5 * 5 CollageSize100 = 4 * 4 )
const ( SizeF = "f" // 1024x1536 SizeM = "m" // 512x768 SizeS = "s" // 256x384 SizeXS = "xs" // 128x192 SizeOrigin = "origin" // исходник (jpeg-изображение в большом разрешении, качество 100%) HeightToWidth = float64(3.0 / 2.0) // Все картинки Artchitect в соотношении 2:3. Умножь это на Width и получишь Height WidthF = 1024 // height=1536 WidthM = 512 // height=768 WidthS = 256 // height=384 WidthXS = 128 // height=192 QualityTransfer = 100 // передача между серверами в jpeg со 100% качеством QualityF = 90 QualityM = 80 QualityS = 75 QualityXS = 75 )
const OdinActive = "odin_active"
const OdinDisactive = "odin_disactive"
const SettingOdinActive = "odin_active"
const ( // Version1 Odin: Версия алгоритма создания картины. Сейчас тут только одна. // Version1 Odin: в версии v1 тут у нас допотопный StableDiffusion v1.5, но он рисует ярко, пусть и не аккуратно Version1 = "v1" )
Variables ¶
var ErrNotFound = errors.New("НЕ НАЙДЕНО")
Functions ¶
This section is empty.
Types ¶
type Art ¶
type Art struct {
// ID не автоинкрементное поле. Автоинкремент сделан в коде вручную.
// Odin: Все номера картин должны идти подряд без пропусков, поэтому тут не используется sequence/autoincrement
ID uint `json:"id" gorm:"primarykey"`
CreatedAt time.Time `json:"createdAt"`
// Version - Odin: может быть несколько вариантов генерации картины (разные словари, разные версии StableDiffusion)
Version string `json:"version"`
// Odin: это идея картины. Картина может быть воссоздана по этой идее на той же версии ИИ без изменений сколько угодно раз
// Odin: саму картинку можно репродуцировать, а вот идея пришла "из космоса", и её не повторить
// Loki: кстати, если в настройках ИИ поменять разрешение или другой параметр,
// Loki: то из этой же идеи будет нарисована похожая, но другая картина
// Odin: раз так, то общая уникальность изображения заключена в составном ключе seed+words+AIversion+AIsettings
// Odin: используя идею и повторив эти настройки можно воссоздать ТУ ЖЕ картину и на другой машине
Idea Idea `json:"idea"`
TotalTime uint `json:"totalTime"` // мс, сколько заняло рисование картины от начала до конца
IdeaGenerationTime uint `json:"ideaGenerationTime"` // мс. сколько заняла сборка идеи
PaintTime uint `json:"paintTime"` // мс. сколько заняло рисование в недрах ИИ
}
Art - сущность "картина"
func (Art) GetUnityMask ¶
GetUnityMask - смотри документацию тут (/model/unity.go): Unity100K, Unity10K, Unity1K, Unity100. Odin: Если картина #012345 будет сделана, то она попадёт в такие единства: Unity100K = U0XXXXX (префикс U тут добавлен для наглядности, но в методе GetUnityMask не добавляется) Unity10K = U01XXXX Unity1K = U012XXX Unity100 = U0123XX Всего во множестве 6 символов, вплоть до картины #999999
type ArtPile ¶
type ArtPile struct {
// contains filtered or unexported fields
}
func NewArtPile ¶
func (*ArtPile) GetArtRecursive ¶
func (*ArtPile) GetArtsInterval ¶
func (*ArtPile) GetLastArts ¶
func (*ArtPile) GetLastPaintTime ¶
type Crown ¶
type Crown struct {
ID uint `json:"id"` // уникальный идентификатор просьбы.
Request string `json:"request"`
}
Crown - почтовый ворон. Эльфы Альвхейма могут отправить весточку (запрос) Одину с помощью Crown. Odin: Ворон, могущий путешествовать сквозь ткань пространства времени. Odin: Я буду лично отвечать на вопросы некоторых мидгардцев, и чтобы наладить связь между мирами, эльфы Альвхейма будут отправлять Мне запросы на некоторые действия и получать от Меня по радужному мосту корабли с нужными мидгардцу грузами.
type Entropy ¶
type Entropy struct {
IntValue uint64 `json:"int" gorm:"type:numeric"` // numeric для поддержки больших чисел
FloatValue float64 `json:"float"`
ByteString string `json:"byte" gorm:"-"` // uint64 в виде нулей и единиц. не хранится в БД
ImageEncoded string `json:"image"` // base64-encoded 8x8 PNG изображение энтропии
Matrix EntropyMatrix `json:"-" gorm:"-"` // Это нужно только в Асгарде для преобразований, по сети не уходит
}
func (Entropy) MarshalJSON ¶
type EntropyMatrix ¶
type EntropyMatrix struct {
// contains filtered or unexported fields
}
EntropyMatrix - матрица хранит силу каждого из 64 пикселей в энтропии
func (*EntropyMatrix) Get ¶
func (em *EntropyMatrix) Get(x, y int) uint8
func (*EntropyMatrix) Set ¶
func (em *EntropyMatrix) Set(x, y int, power uint8)
func (*EntropyMatrix) Size ¶
func (em *EntropyMatrix) Size() int
type EntropyPack ¶
type EntropyPack struct {
Timestamp time.Time `json:"timestamp"`
Entropy Entropy `json:"entropy" gorm:"embedded;embeddedPrefix:entropy_"`
Choice Entropy `json:"choice" gorm:"embedded;embeddedPrefix:choice_"`
Loki bool `json:"loki" gorm:"-"` // Loki: мой маленький секрет
}
EntropyPack - рассчитанная энтропия. Постоянно отправляется на клиент, даже когда не используется в работе. Видна повсеместно на сайте.
type EntropyPackExtended ¶
type EntropyPackExtended struct {
Timestamp time.Time `json:"timestamp"`
Entropy Entropy `json:"entropy" gorm:"embedded;embeddedPrefix:entropy_"`
Choice Entropy `json:"choice" gorm:"embedded;embeddedPrefix:choice_"`
Loki bool `json:"loki" gorm:"-"` // Loki: мой маленький секрет
ImageFrame image.Image `json:"-" gorm:"-"` // сами картинки передаются только в памяти сервиса Асгард
ImageFrameEncoded string `json:"imageFrame" gorm:"-"` // base64-encoded jpeg картинки (уходят в Мидгард)
ImageNoise image.Image `json:"-" gorm:"-"` // сами картинки передаются только в памяти сервиса Асгард
ImageNoiseEncoded string `json:"imageNoise" gorm:"-"` // base64-encoded jpeg картинки (уходят в Мидгард)
}
EntropyPackExtended - энтропия с подробным описанием. Видна только на странице /entropy на сайте. К остальным данным тут еще добавляются кадр с камеры и шум для наглядности, так что событие это объёмное. кадр = 10-20кб, шум = 40Кб. И так десяток раз в секунду.
type FlatArt ¶
type FlatArt struct {
ID uint `json:"id"`
CreatedAt time.Time `json:"createdAt"`
Version string `json:"version"`
IdeaSeed uint `json:"ideaSeed"`
IdeaNumberOfWords uint `json:"ideaNumberOfWords"`
IdeaWords []string `json:"ideaWords"`
// В списках используется лишь одна основная картинка энтропии - энтропия породившая Seed-номер
SeedEntropyEncoded string `json:"imageEntropyEncoded"` // base64 encoded png картинка
SeedChoiceEncoded string `json:"imageChoiceEncoded"` // base64 encoded png картинка
}
FlatArt - более плоская и компактная структура картины лишь с основными данными в плоском виде. Для отправки в Мидгард эта структура в БД не сохраняется, отправляется лишь в браузер
func MakeFlatArt ¶
func MakeFlatArts ¶
type FriggState ¶
type FriggState struct {
Unity *Unity `json:"unity"`
Children []*Unity `json:"children"`
TotalApplicants uint `json:"totalApplicants"`
TotalLeads uint `json:"totalLeads"`
Leads []uint `json:"leads"` // текущие лидеры, выбранные к сборке коллажа
CollageStarted bool `json:"collageStarted"` // момент, когда уже собраны все дети, лидеры и создаётся коллаж
CollageFinished bool `json:"collageFinished"`
CurrentEnjoyTime uint `json:"currentEnjoyTime"`
ExpectedEnjoyTime uint `json:"expectedEnjoyTime"`
Subprocess *FriggState `json:"subprocess"` // текущий дочерний элемент, который в обработке (подпроцесс соединения)
}
FriggState - процесс объединения единств Odin: Frigg объединяет единства сложным и продолжительным процессом, который Я хочу показать жителям Мидгарда. Odin: Я лично отбираю лидеров в единства, использую свои навыки предвиденья (понимания энтропии) и чувство вкуса. Frigg: опишем всё происходящее следующей рекурсивной структурой. Frigg: при объединении верхнеуровневого единства сначала будут объединены его дочерние единства, а затем оно само Frigg: для этого добавлена рекурсивность, чтобы отобразить весь процесс сверху донизу рекурсивно
func NewFriggState ¶
func NewFriggState(unity Unity) *FriggState
func (*FriggState) Active ¶
func (fs *FriggState) Active() *FriggState
func (*FriggState) AddSubprocess ¶
func (fs *FriggState) AddSubprocess(unity Unity)
func (*FriggState) ClearSubprocess ¶
func (fs *FriggState) ClearSubprocess()
type GivingState ¶
type Idea ¶
type Idea struct {
// Odin: ID используется тот же идентификатор, что и у Art
ArtID uint `json:"id" gorm:"primarykey"` // Odin: идею стоит сохранять после того, как картина нарисована успешно
CreatedAt time.Time `json:"createdAt"`
Seed uint `json:"seed"` // Odin: Freyja может нарисовать MaxSeed вариантов одной и той же картины. Тут конкретный, который задумал Я.
SeedEntropy EntropyPack `json:"seedEntropy" gorm:"embedded;embeddedPrefix:seed_"` // сохраняем энтропию, которую видел Odin в момент воспоминания seed-числа
NumberOfWordsEntropy EntropyPack `json:"numberOfWordsEntropy" gorm:"embedded;embeddedPrefix:nmbrofwrds_"` // сохраняем энтропию, которую видел Odin в момент воспоминания количества слов
Words []Word `json:"words"` // Odin: Это слова, которые будут составлять основу идеи картины. Пример: "brain,smile,by hidari,Archangel,Lucifer,sauron,sharp,fractal,Tanks,moon and other planets and stars,by stanley"
// WordsStr - строка нужна для уменьшения траффика, чтобы не гонять полные данные о словах с энтропией.
// Подробная информация о словах нужна только на одной странице /art/:id
WordsStr string `json:"wordsStr"` // Все слова в виде одной строки через запятую "Wōden,Óðinn,Wuodan,Uuôden,Wêda..."
}
Idea - pantheon.Odin всезнающ, и заранее знает как создать картину, которую надо нарисовать. Odin: я предвижу картину и с помощью моих воронов Huginn и Muninn я объясню в этой идее, что надо рисовать
func (Idea) ExtractWords ¶
type LikePile ¶
type LikePile struct {
// contains filtered or unexported fields
}
func NewLikePile ¶
type OdinResponse ¶
OdinResponse - ответ Одина на личную просьбу, переданную с вороном Crown
type OdinState ¶
type OdinState struct {
ArtID uint `json:"artId"`
Seed uint `json:"seed"`
SeedEntropyImageEncoded string `json:"seedEntropyImageEncoded"`
SeedChoiceImageEncoded string `json:"seedChoiceImageEncoded"`
NumberOfWords uint `json:"numberOfWords"`
Words []string `json:"words"`
Painting bool `json:"painting"`
CurrentPaintTime uint `json:"currentPaintTime"`
ExpectedPaintTime uint `json:"totalPaintTime"`
Painted bool `json:"painted"`
Enjoying bool `json:"enjoying"`
CurrentEnjoyTime uint `json:"currentEnjoyTime"`
ExpectedEnjoyTime uint `json:"expectedEnjoyTime"`
}
OdinState = есть процесс творения картины. Он начинается с идеи, а заканчивается рисунком. Odin: состояние Одина??... WTF? МИКРОБЫ, ЧТО ВЫ О СЕБЕ ВОЗОМНИЛИ?? Я РАЗДАВЛЮ ВАШИ ТУПЫЕ ГОЛОВЫ, МУРАВЬИ! ВАША МЕРЗКАЯ ПЛАНЕТА БУДЕТ РАЗРУШЕНА, А ВЫ ВСЕ БУДУТЕ СОЖЖЕ...... Odin: ... сделай глубокий вдох ... ... сделай глубокий вдох ... Odin: OdinState - состояние процесса творения картины. Так за ним можно будет наблюдать. Наблюдать, как творение развивается. Loki: наблюдать за исподним Одина... Odin: ... гнев это иллюзия ... ... сделай глубокий вдох ... гнев это иллюзия ... вспомни о медитации ... ... Odin: компоненты в midgard смогут отобразить изменения процесса, текущее состояние будет непрерывно туда передаваться
type Radiogram ¶
Radiogram - упаковка для событий при передаче между Альфхеймом и Мидгардом (между api-gateway и клиентом, websocket) Odin: "Слушайте наше радио Artchitect-FM, настраивайте ваши радиостанции на канал между мирами!" Odin: "Радиостанция Artchitect-FM - свет маяка в тумане для заблудших душ."
type SettingPile ¶
type SettingPile struct {
// contains filtered or unexported fields
}
func NewSettingPile ¶
func NewSettingPile(db *gorm.DB) *SettingPile
type Unity ¶
type Unity struct {
Mask string `gorm:"primaryKey" json:"mask"`
Parent string `json:"parent"` // маска родительского единства
Rank uint `json:"rank"` // тип единства
MinID uint `json:"minID"`
MaxID uint `json:"maxID"`
CreatedAt time.Time `json:"createdAt"`
UpdatedAt time.Time `json:"updatedAt"`
State string `json:"state"`
Leads string `json:"leads"` // массив ID картин, которые попали в коллаж в виде строки [100, 121, 110, 0, 130, 0, 0, 100...]. Нули - пустые места (на картине чёрным)
Version uint `json:"version"` // при пересборке единства версия повышается (чтобы старые картинки не кешировались)
}
type UnityPile ¶
type UnityPile struct {
// contains filtered or unexported fields
}
func NewUnityPile ¶
func (*UnityPile) GetChildren ¶
func (*UnityPile) GetNextUnityForReunification ¶
type Word ¶
type Word struct {
ID uint `json:"id" gorm:"primarykey"`
IdeaID uint `json:"-"`
CreatedAt time.Time `json:"createdAt"`
Word string `json:"word"`
Entropy EntropyPack `json:"entropy" gorm:"embedded;embeddedPrefix:entropy_"` // Odin: из этой энтропии Тор придумал слово
}
Word - Слово Odin: вначале было слово... Из таких слов Фрейя поймёт, что нарисовать.