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 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" // если Альвхейм потерял связь с Асгардом, он будет рассылать такие сообщения RequestGiveChosenArt = "Укажи нам на нужную картину, о, Всеотец!" RequestLikedByArtchitector = "artchitector поставил лайк" OdinResponseTimeoutSec = 5 // Как долго эльфы Альвхейма ждут корабль от Одина. OdinResponseOk = "ok!" // Odin: Когда Я принял сообщение и внял ему, я отвечу на запрос так )
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 EntropyJpegQualityFrame = 65
const EntropyJpegQualityNoise = 20
const EntropySize = 8
EntropySize - Энтропия считается по квадрату 8 на 8 пикселей Odin: Фригг, где мои очки? Я не могу разобрать, что тут нарисовано! Тысяча чертей в эту допотопную машину!
const MaxKeywords = 28 // не более 28 слов
const MaxSeed = 4294967295 // numpy accepts from 0 to 4294967295
MaxSeed - Seed для ИИ. Может быть нарисовано столько разных вариантов картины (с одинаковыми словами)
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 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: вначале было слово... Из таких слов Фрейя поймёт, что нарисовать.