entity

package
v0.0.0-...-2f5502e Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 23, 2024 License: AGPL-3.0 Imports: 70 Imported by: 0

Documentation

Overview

Package entity provides entity models based on the GORM library.

Copyright (c) 2018 - 2024 PhotoPrism UG. All rights reserved.

This program is free software: you can redistribute it and/or modify
it under Version 3 of the GNU Affero General Public License (the "AGPL"):
<https://docs.photoprism.app/license/agpl>

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Affero General Public License for more details.

The AGPL is supplemented by our Trademark and Brand Guidelines,
which describe how our Brand Assets may be used:
<https://www.photoprism.app/trademark>

Feel free to send an email to hello@photoprism.app if you have questions, want to support our work, or just want to say hello.

Additional information can be found in our Developer Guide: <https://docs.photoprism.app/developer-guide/>

Index

Constants

View Source
const (
	AlbumUID    = byte('a')
	AlbumManual = "album"
	AlbumFolder = "folder"
	AlbumMoment = "moment"
	AlbumMonth  = "month"
	AlbumState  = "state"
)
View Source
const (
	SessionPrefix = "sess"
	UnknownIP     = limiter.DefaultIP
)

SessionPrefix for RefID.

View Source
const (
	UserUID               = byte('u')
	UserPrefix            = "user"
	OwnerUnknown          = ""
	UsernameLengthDefault = 1
	PasswordLengthDefault = 8
)

User identifier prefixes.

View Source
const (
	AdminUserName      = "admin"
	AdminDisplayName   = "Admin"
	VisitorDisplayName = "Visitor"
	UnknownDisplayName = "Unknown"
)

Role defaults.

View Source
const (
	GenderMale   = "male"
	GenderFemale = "female"
	GenderOther  = "other"
)
View Source
const (
	PermNone uint = 1 << iota
	PermView
	PermReact
	PermComment
	PermUpload
	PermEdit
	PermShare
	PermAll
)
View Source
const (
	MySQL           = "mysql"
	SQLite3         = "sqlite3"
	SQLiteTestDB    = ".test.db"
	SQLiteMemoryDSN = ":memory:?cache=shared"
)

Supported test databases.

View Source
const (
	Unknown      = ""
	UnknownYear  = -1
	UnknownMonth = -1
	UnknownDay   = -1
	UnknownName  = "Unknown"
	UnknownTitle = UnknownName
	UnknownID    = "zz"
)

Defaults.

View Source
const (
	MediaUnknown  = ""
	MediaImage    = string(media.Image)
	MediaRaw      = string(media.Raw)
	MediaAnimated = string(media.Animated)
	MediaLive     = string(media.Live)
	MediaVideo    = string(media.Video)
	MediaVector   = string(media.Vector)
)

Media types.

View Source
const (
	RootUnknown   = ""
	RootOriginals = "/"
	RootExamples  = "examples"
	RootSidecar   = "sidecar"
	RootImport    = "import"
	RootPath      = "/"
)

Base folders.

View Source
const (
	Created = "created"
	Updated = "updated"
	Deleted = "deleted"
)

Event types.

View Source
const (
	IsStacked   int8 = 1
	IsStackable int8 = 0
	IsUnstacked int8 = -1
)

Stacking states.

View Source
const (
	FileShareNew     = "new"
	FileShareError   = "error"
	FileShareShared  = "shared"
	FileShareRemoved = "removed"
)
View Source
const (
	FileSyncNew        = "new"
	FileSyncIgnore     = "ignore"
	FileSyncExists     = "exists"
	FileSyncDownloaded = "downloaded"
	FileSyncUploaded   = "uploaded"
)
View Source
const (
	LinkUID    = byte('s')
	LinkPrefix = "link"
)

LinkPrefix for RefID.

View Source
const (
	MarkerUnknown = ""
	MarkerFace    = "face"  // MarkerType for faces (implemented).
	MarkerLabel   = "label" // MarkerType for labels (todo).
)
View Source
const (
	SyncStatusRefresh  = "refresh"
	SyncStatusDownload = "download"
	SyncStatusUpload   = "upload"
	SyncStatusSynced   = "synced"
)
View Source
const (
	SrcAuto     = ""                   // Prio 1
	SrcDefault  = "default"            // Prio 1
	SrcEstimate = "estimate"           // Prio 2
	SrcName     = "name"               // Prio 4
	SrcYaml     = "yaml"               // Prio 8
	SrcLDAP     = "ldap"               // Prio 8
	SrcLocation = classify.SrcLocation // Prio 8
	SrcMarker   = "marker"             // Prio 8
	SrcImage    = classify.SrcImage    // Prio 8
	SrcKeyword  = classify.SrcKeyword  // Prio 16
	SrcMeta     = "meta"               // Prio 16
	SrcXmp      = "xmp"                // Prio 32
	SrcManual   = "manual"             // Prio 64
	SrcAdmin    = "admin"              // Prio 128
)

Data source names.

View Source
const Accuracy1Km = 1000
View Source
const (
	ClientUID = byte('c')
)

ClientUID is the unique ID prefix.

View Source
const (
	ClipStringType = 64
)
View Source
const Day = time.Hour * 24

Day specified as time.Duration to improve readability.

View Source
const (
	FileUID = byte('f')
)
View Source
const (
	LabelUID = byte('l')
)
View Source
const PermDefault uint = 0
View Source
const (
	PhotoUID = byte('p')
)
View Source
const (
	SharePrefix = "share"
)

SharePrefix for RefID.

View Source
const (
	SubjPerson = "person" // SubjType for people.
)
View Source
const TokenConfig = "__config__"
View Source
const TokenPublic = "public"

Variables

View Source
var (
	PasscodeFixtureAlice, _ = NewPasscode("uqxetse3cy5eo9z2", "otpauth://totp/PhotoPrism:alice?algorithm=SHA1&digits=6&issuer=PhotoPrism%20Pro&period=30&secret=LKBTPGHABW2BVQVIROIGFTLQV4IRBXMV", "0t37foocgp2w")
	PasscodeFixtureJane, _  = NewPasscode("usamyuogp49vd4lh", "otpauth://totp/PhotoPrism:jane?algorithm=SHA1&digits=6&issuer=PhotoPrism%20Pro&period=30&secret=RUYYIDJZBJLKD6OL6WFBJO6PXEZOYIZW", "0wg68oc6jg92")
	PasscodeFixtures        = PasscodeMap{
		"alice": *PasscodeFixtureAlice,
		"jane":  *PasscodeFixtureJane,
	}
)
View Source
var Admin = User{
	ID:            1,
	UserName:      AdminUserName,
	AuthProvider:  authn.ProviderLocal.String(),
	UserRole:      acl.RoleAdmin.String(),
	DisplayName:   AdminDisplayName,
	SuperAdmin:    true,
	CanLogin:      true,
	WebDAV:        true,
	CanInvite:     true,
	InviteToken:   GenerateToken(),
	PreviewToken:  GenerateToken(),
	DownloadToken: GenerateToken(),
}

Admin is the default admin user.

View Source
var AlbumFixtures = AlbumMap{
	"christmas2030": {
		ID:               1000000,
		AlbumUID:         "as6sg6bxpogaaba7",
		AlbumSlug:        "christmas-2030",
		AlbumPath:        "",
		AlbumType:        AlbumManual,
		AlbumTitle:       "Christmas 2030",
		AlbumLocation:    "",
		AlbumCategory:    "",
		AlbumCaption:     "",
		AlbumDescription: "Wonderful Christmas",
		AlbumNotes:       "",
		AlbumFilter:      "",
		AlbumOrder:       "oldest",
		AlbumTemplate:    "",
		AlbumCountry:     UnknownID,
		AlbumYear:        0,
		AlbumMonth:       0,
		AlbumDay:         0,
		AlbumFavorite:    false,
		AlbumPrivate:     false,
		CreatedAt:        time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:        time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		DeletedAt:        nil,
	},
	"holiday-2030": {
		ID:               1000001,
		AlbumUID:         "as6sg6bxpogaaba8",
		AlbumSlug:        "holiday-2030",
		AlbumPath:        "",
		AlbumType:        AlbumManual,
		AlbumTitle:       "Holiday 2030",
		AlbumLocation:    "",
		AlbumCategory:    "",
		AlbumCaption:     "",
		AlbumDescription: "Wonderful Christmas Holiday",
		AlbumNotes:       "",
		AlbumFilter:      "",
		AlbumOrder:       "newest",
		AlbumTemplate:    "",
		AlbumCountry:     UnknownID,
		AlbumYear:        0,
		AlbumMonth:       0,
		AlbumDay:         0,
		AlbumFavorite:    true,
		AlbumPrivate:     false,
		CreatedAt:        time.Date(2019, 7, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:        time.Date(2020, 2, 1, 0, 0, 0, 0, time.UTC),
		DeletedAt:        nil,
	},
	"berlin-2019": {
		ID:               1000002,
		AlbumUID:         "as6sg6bxpogaaba9",
		AlbumSlug:        "berlin-2019",
		AlbumPath:        "",
		AlbumType:        AlbumManual,
		AlbumTitle:       "Berlin 2019",
		AlbumLocation:    "Berlin",
		AlbumCategory:    "City",
		AlbumCaption:     "",
		AlbumDescription: "We love Berlin 🌿!",
		AlbumNotes:       "",
		AlbumFilter:      "",
		AlbumOrder:       "oldest",
		AlbumTemplate:    "",
		AlbumCountry:     "",
		AlbumYear:        0,
		AlbumMonth:       0,
		AlbumDay:         0,
		AlbumFavorite:    false,
		AlbumPrivate:     false,
		CreatedAt:        time.Date(2019, 7, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:        time.Date(2020, 2, 1, 0, 0, 0, 0, time.UTC),
		DeletedAt:        nil,
	},
	"april-1990": {
		ID:               1000003,
		AlbumUID:         "as6sg6bipogaaba1",
		AlbumSlug:        "april-1990",
		AlbumPath:        "1990/04",
		AlbumType:        AlbumFolder,
		AlbumTitle:       "April 1990",
		AlbumLocation:    "",
		AlbumCategory:    "Friends",
		AlbumCaption:     "",
		AlbumDescription: "Spring is the time of year when many things change.",
		AlbumNotes:       "",
		AlbumFilter:      "path:\"1990/04\" public:true",
		AlbumOrder:       "added",
		AlbumTemplate:    "",
		AlbumCountry:     "ca",
		AlbumYear:        1990,
		AlbumMonth:       4,
		AlbumDay:         11,
		AlbumFavorite:    false,
		AlbumPrivate:     false,
		CreatedAt:        time.Date(2019, 7, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:        time.Date(2020, 2, 1, 0, 0, 0, 0, time.UTC),
		DeletedAt:        nil,
	},
	"import": {
		ID:               1000004,
		AlbumUID:         "as6sg6bitoga0004",
		AlbumSlug:        "import",
		AlbumPath:        "",
		AlbumType:        AlbumManual,
		AlbumTitle:       "Import Album",
		AlbumLocation:    "",
		AlbumCategory:    "",
		AlbumCaption:     "",
		AlbumDescription: "",
		AlbumNotes:       "",
		AlbumFilter:      "",
		AlbumOrder:       "name",
		AlbumTemplate:    "",
		AlbumCountry:     "ca",
		AlbumYear:        0,
		AlbumMonth:       0,
		AlbumDay:         0,
		AlbumFavorite:    false,
		AlbumPrivate:     false,
		CreatedAt:        time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:        time.Date(2020, 2, 1, 0, 0, 0, 0, time.UTC),
		DeletedAt:        nil,
	},
	"emptyMoment": {
		ID:               1000005,
		AlbumUID:         "as6sg6bitoga0005",
		AlbumSlug:        "empty-moment",
		AlbumPath:        "",
		AlbumType:        AlbumMoment,
		AlbumTitle:       "Empty Moment",
		AlbumLocation:    "Favorite Park",
		AlbumCategory:    "Fun",
		AlbumCaption:     "",
		AlbumDescription: "",
		AlbumNotes:       "",
		AlbumFilter:      "public:true country:at year:2016",
		AlbumOrder:       "oldest",
		AlbumTemplate:    "",
		AlbumCountry:     "at",
		AlbumYear:        2016,
		AlbumMonth:       0,
		AlbumDay:         0,
		AlbumFavorite:    false,
		AlbumPrivate:     false,
		CreatedAt:        time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:        time.Date(2020, 2, 1, 0, 0, 0, 0, time.UTC),
		DeletedAt:        nil,
	},
	"2016-04": {
		ID:               1000006,
		AlbumUID:         "as6sg6bipogaabj8",
		AlbumSlug:        "2016-04",
		AlbumPath:        "2016/04",
		AlbumType:        AlbumFolder,
		AlbumTitle:       "April 2016",
		AlbumLocation:    "",
		AlbumCategory:    "Fun",
		AlbumCaption:     "",
		AlbumDescription: "",
		AlbumNotes:       "",
		AlbumFilter:      "path:\"2016/04\" public:true",
		AlbumOrder:       "added",
		AlbumTemplate:    "",
		AlbumCountry:     UnknownID,
		AlbumYear:        0,
		AlbumMonth:       0,
		AlbumDay:         0,
		AlbumFavorite:    false,
		CreatedAt:        time.Date(2019, 7, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:        time.Date(2020, 2, 1, 0, 0, 0, 0, time.UTC),
		DeletedAt:        nil,
	},
	"september-2021": {
		ID:               1000007,
		AlbumUID:         "as6sg6bipogaabj9",
		AlbumSlug:        "september-2021",
		AlbumPath:        "",
		AlbumType:        AlbumMonth,
		AlbumTitle:       "September 2021",
		AlbumLocation:    "",
		AlbumCategory:    "",
		AlbumCaption:     "",
		AlbumDescription: "",
		AlbumNotes:       "",
		AlbumFilter:      "public:true year:2021 month:9",
		AlbumOrder:       "newest",
		AlbumTemplate:    "",
		AlbumCountry:     UnknownID,
		AlbumYear:        0,
		AlbumMonth:       0,
		AlbumDay:         0,
		AlbumFavorite:    false,
		CreatedAt:        time.Date(2019, 7, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:        time.Date(2020, 2, 1, 0, 0, 0, 0, time.UTC),
		DeletedAt:        nil,
	},
	"california-usa": {
		ID:               1000008,
		AlbumUID:         "as6sg6bipogaab11",
		AlbumSlug:        "california-usa",
		AlbumPath:        "",
		AlbumType:        AlbumState,
		AlbumTitle:       "California / USA",
		AlbumLocation:    "",
		AlbumCategory:    "",
		AlbumCaption:     "",
		AlbumDescription: "",
		AlbumNotes:       "",
		AlbumFilter:      "public:true country:us state:California",
		AlbumOrder:       "newest",
		AlbumTemplate:    "",
		AlbumCountry:     "us",
		AlbumYear:        0,
		AlbumMonth:       0,
		AlbumDay:         0,
		AlbumFavorite:    false,
		CreatedAt:        time.Date(2019, 7, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:        time.Date(2020, 2, 1, 0, 0, 0, 0, time.UTC),
		DeletedAt:        nil,
	},
	"california-duplicate-1": {
		ID:               1000009,
		AlbumUID:         "as6sg6bipotaab12",
		AlbumSlug:        "california-usa",
		AlbumPath:        "",
		AlbumType:        AlbumState,
		AlbumTitle:       "California / USA",
		AlbumLocation:    "",
		AlbumCategory:    "",
		AlbumCaption:     "",
		AlbumDescription: "",
		AlbumNotes:       "",
		AlbumFilter:      "country:us state:California",
		AlbumOrder:       "newest",
		AlbumTemplate:    "",
		AlbumCountry:     "us",
		AlbumYear:        0,
		AlbumMonth:       0,
		AlbumDay:         0,
		AlbumFavorite:    false,
		CreatedAt:        time.Date(2019, 7, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:        time.Date(2020, 2, 1, 0, 0, 0, 0, time.UTC),
		DeletedAt:        nil,
	},
	"california-duplicate-2": {
		ID:               1000010,
		AlbumUID:         "as6sg6bipotaab19",
		AlbumSlug:        "california",
		AlbumPath:        "",
		AlbumType:        AlbumState,
		AlbumTitle:       "California",
		AlbumLocation:    "",
		AlbumCategory:    "",
		AlbumCaption:     "",
		AlbumDescription: "",
		AlbumNotes:       "",
		AlbumFilter:      "public:true country:us state:California",
		AlbumOrder:       "newest",
		AlbumTemplate:    "",
		AlbumCountry:     "us",
		AlbumYear:        0,
		AlbumMonth:       0,
		AlbumDay:         0,
		AlbumFavorite:    false,
		CreatedAt:        time.Date(2019, 7, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:        time.Date(2020, 2, 1, 0, 0, 0, 0, time.UTC),
		DeletedAt:        nil,
	},
	"&ilikefood": {
		ID:               1000011,
		AlbumUID:         "as6sg6bipotaab19",
		AlbumSlug:        "&ilikefood",
		AlbumPath:        "",
		AlbumType:        AlbumManual,
		AlbumTitle:       "&IlikeFood",
		AlbumLocation:    "",
		AlbumCategory:    "",
		AlbumCaption:     "",
		AlbumDescription: "",
		AlbumNotes:       "",
		AlbumFilter:      "",
		AlbumOrder:       "name",
		AlbumTemplate:    "",
		AlbumCountry:     "zz",
		AlbumYear:        0,
		AlbumMonth:       0,
		AlbumDay:         0,
		AlbumFavorite:    false,
		AlbumPrivate:     false,
		CreatedAt:        time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:        time.Date(2020, 2, 1, 0, 0, 0, 0, time.UTC),
		DeletedAt:        nil,
	},
	"i-love-%-dog": {
		ID:               1000012,
		AlbumUID:         "as6sg6bipotaab20",
		AlbumSlug:        "i-love-%-dog",
		AlbumPath:        "",
		AlbumType:        AlbumManual,
		AlbumTitle:       "I love % dog",
		AlbumLocation:    "",
		AlbumCategory:    "",
		AlbumCaption:     "",
		AlbumDescription: "",
		AlbumNotes:       "",
		AlbumFilter:      "",
		AlbumOrder:       "name",
		AlbumTemplate:    "",
		AlbumCountry:     "zz",
		AlbumYear:        0,
		AlbumMonth:       0,
		AlbumDay:         0,
		AlbumFavorite:    false,
		AlbumPrivate:     false,
		CreatedAt:        time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:        time.Date(2020, 2, 1, 0, 0, 0, 0, time.UTC),
		DeletedAt:        nil,
	},
	"%gold": {
		ID:               1000013,
		AlbumUID:         "as6sg6bipotaab21",
		AlbumSlug:        "%gold",
		AlbumPath:        "",
		AlbumType:        AlbumManual,
		AlbumTitle:       "%gold",
		AlbumLocation:    "",
		AlbumCategory:    "",
		AlbumCaption:     "",
		AlbumDescription: "",
		AlbumNotes:       "",
		AlbumFilter:      "",
		AlbumOrder:       "name",
		AlbumTemplate:    "",
		AlbumCountry:     "zz",
		AlbumYear:        0,
		AlbumMonth:       0,
		AlbumDay:         0,
		AlbumFavorite:    false,
		AlbumPrivate:     false,
		CreatedAt:        time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:        time.Date(2020, 2, 1, 0, 0, 0, 0, time.UTC),
		DeletedAt:        nil,
	},
	"sale%": {
		ID:               1000014,
		AlbumUID:         "as6sg6bipotaab22",
		AlbumSlug:        "sale%",
		AlbumPath:        "",
		AlbumType:        AlbumManual,
		AlbumTitle:       "sale%",
		AlbumLocation:    "",
		AlbumCategory:    "",
		AlbumCaption:     "",
		AlbumDescription: "",
		AlbumNotes:       "",
		AlbumFilter:      "",
		AlbumOrder:       "name",
		AlbumTemplate:    "",
		AlbumCountry:     "zz",
		AlbumYear:        0,
		AlbumMonth:       0,
		AlbumDay:         0,
		AlbumFavorite:    false,
		AlbumPrivate:     false,
		CreatedAt:        time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:        time.Date(2020, 2, 1, 0, 0, 0, 0, time.UTC),
		DeletedAt:        nil,
	},
	"pets&dogs": {
		ID:               1000015,
		AlbumUID:         "as6sg6bipotaab23",
		AlbumSlug:        "pest&dogs",
		AlbumPath:        "",
		AlbumType:        AlbumManual,
		AlbumTitle:       "Pets & Dogs",
		AlbumLocation:    "",
		AlbumCategory:    "",
		AlbumCaption:     "",
		AlbumDescription: "",
		AlbumNotes:       "",
		AlbumFilter:      "",
		AlbumOrder:       "name",
		AlbumTemplate:    "",
		AlbumCountry:     "zz",
		AlbumYear:        0,
		AlbumMonth:       0,
		AlbumDay:         0,
		AlbumFavorite:    false,
		AlbumPrivate:     false,
		CreatedAt:        time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:        time.Date(2020, 2, 1, 0, 0, 0, 0, time.UTC),
		DeletedAt:        nil,
	},
	"light&": {
		ID:               1000016,
		AlbumUID:         "as6sg6bipotaab24",
		AlbumSlug:        "light&",
		AlbumPath:        "",
		AlbumType:        AlbumManual,
		AlbumTitle:       "Light&",
		AlbumLocation:    "",
		AlbumCategory:    "",
		AlbumCaption:     "",
		AlbumDescription: "",
		AlbumNotes:       "",
		AlbumFilter:      "",
		AlbumOrder:       "name",
		AlbumTemplate:    "",
		AlbumCountry:     "zz",
		AlbumYear:        0,
		AlbumMonth:       0,
		AlbumDay:         0,
		AlbumFavorite:    false,
		AlbumPrivate:     false,
		CreatedAt:        time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:        time.Date(2020, 2, 1, 0, 0, 0, 0, time.UTC),
		DeletedAt:        nil,
	},
	"'family": {
		ID:               1000017,
		AlbumUID:         "as6sg6bipotaab25",
		AlbumSlug:        "'family",
		AlbumPath:        "",
		AlbumType:        AlbumManual,
		AlbumTitle:       "'Family",
		AlbumLocation:    "",
		AlbumCategory:    "",
		AlbumCaption:     "",
		AlbumDescription: "",
		AlbumNotes:       "",
		AlbumFilter:      "",
		AlbumOrder:       "name",
		AlbumTemplate:    "",
		AlbumCountry:     "zz",
		AlbumYear:        0,
		AlbumMonth:       0,
		AlbumDay:         0,
		AlbumFavorite:    false,
		AlbumPrivate:     false,
		CreatedAt:        time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:        time.Date(2020, 2, 1, 0, 0, 0, 0, time.UTC),
		DeletedAt:        nil,
	},
	"father's-day": {
		ID:               1000018,
		AlbumUID:         "as6sg6bipotaab26",
		AlbumSlug:        "father's-day",
		AlbumPath:        "",
		AlbumType:        AlbumManual,
		AlbumTitle:       "Father's Day",
		AlbumLocation:    "",
		AlbumCategory:    "",
		AlbumCaption:     "",
		AlbumDescription: "",
		AlbumNotes:       "",
		AlbumFilter:      "",
		AlbumOrder:       "name",
		AlbumTemplate:    "",
		AlbumCountry:     "zz",
		AlbumYear:        0,
		AlbumMonth:       0,
		AlbumDay:         0,
		AlbumFavorite:    false,
		AlbumPrivate:     false,
		CreatedAt:        time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:        time.Date(2020, 2, 1, 0, 0, 0, 0, time.UTC),
		DeletedAt:        nil,
	},
	"ice-cream'": {
		ID:               1000019,
		AlbumUID:         "as6sg6bipotaab27",
		AlbumSlug:        "ice-cream'",
		AlbumPath:        "",
		AlbumType:        AlbumManual,
		AlbumTitle:       "Ice Cream'",
		AlbumLocation:    "",
		AlbumCategory:    "",
		AlbumCaption:     "",
		AlbumDescription: "",
		AlbumNotes:       "",
		AlbumFilter:      "",
		AlbumOrder:       "name",
		AlbumTemplate:    "",
		AlbumCountry:     "zz",
		AlbumYear:        0,
		AlbumMonth:       0,
		AlbumDay:         0,
		AlbumFavorite:    false,
		AlbumPrivate:     false,
		CreatedAt:        time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:        time.Date(2020, 2, 1, 0, 0, 0, 0, time.UTC),
		DeletedAt:        nil,
	},
	"*forrest": {
		ID:               1000020,
		AlbumUID:         "as6sg6bipotaab28",
		AlbumSlug:        "*forrest",
		AlbumPath:        "",
		AlbumType:        AlbumManual,
		AlbumTitle:       "*Forrest",
		AlbumLocation:    "",
		AlbumCategory:    "",
		AlbumCaption:     "",
		AlbumDescription: "",
		AlbumNotes:       "",
		AlbumFilter:      "",
		AlbumOrder:       "name",
		AlbumTemplate:    "",
		AlbumCountry:     "zz",
		AlbumYear:        0,
		AlbumMonth:       0,
		AlbumDay:         0,
		AlbumFavorite:    false,
		AlbumPrivate:     false,
		CreatedAt:        time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:        time.Date(2020, 2, 1, 0, 0, 0, 0, time.UTC),
		DeletedAt:        nil,
	},
	"my*kids": {
		ID:               1000021,
		AlbumUID:         "as6sg6bipotaab29",
		AlbumSlug:        "my*kids",
		AlbumPath:        "",
		AlbumType:        AlbumManual,
		AlbumTitle:       "My*Kids",
		AlbumLocation:    "",
		AlbumCategory:    "",
		AlbumCaption:     "",
		AlbumDescription: "",
		AlbumNotes:       "",
		AlbumFilter:      "",
		AlbumOrder:       "name",
		AlbumTemplate:    "",
		AlbumCountry:     "zz",
		AlbumYear:        0,
		AlbumMonth:       0,
		AlbumDay:         0,
		AlbumFavorite:    false,
		AlbumPrivate:     false,
		CreatedAt:        time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:        time.Date(2020, 2, 1, 0, 0, 0, 0, time.UTC),
		DeletedAt:        nil,
	},
	"yoga***": {
		ID:               1000022,
		AlbumUID:         "as6sg6bipotaab30",
		AlbumSlug:        "yoga***",
		AlbumPath:        "",
		AlbumType:        AlbumManual,
		AlbumTitle:       "Yoga***",
		AlbumLocation:    "",
		AlbumCategory:    "",
		AlbumCaption:     "",
		AlbumDescription: "",
		AlbumNotes:       "",
		AlbumFilter:      "",
		AlbumOrder:       "name",
		AlbumTemplate:    "",
		AlbumCountry:     "zz",
		AlbumYear:        0,
		AlbumMonth:       0,
		AlbumDay:         0,
		AlbumFavorite:    false,
		AlbumPrivate:     false,
		CreatedAt:        time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:        time.Date(2020, 2, 1, 0, 0, 0, 0, time.UTC),
		DeletedAt:        nil,
	},
	"|banana": {
		ID:               1000023,
		AlbumUID:         "as6sg6bipotaab31",
		AlbumSlug:        "|banana",
		AlbumPath:        "",
		AlbumType:        AlbumManual,
		AlbumTitle:       "|Banana",
		AlbumLocation:    "",
		AlbumCategory:    "",
		AlbumCaption:     "",
		AlbumDescription: "",
		AlbumNotes:       "",
		AlbumFilter:      "",
		AlbumOrder:       "name",
		AlbumTemplate:    "",
		AlbumCountry:     "zz",
		AlbumYear:        0,
		AlbumMonth:       0,
		AlbumDay:         0,
		AlbumFavorite:    false,
		AlbumPrivate:     false,
		CreatedAt:        time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:        time.Date(2020, 2, 1, 0, 0, 0, 0, time.UTC),
		DeletedAt:        nil,
	},
	"blue|": {
		ID:               1000024,
		AlbumUID:         "as6sg6bipotaab33",
		AlbumSlug:        "blue|",
		AlbumPath:        "",
		AlbumType:        AlbumManual,
		AlbumTitle:       "Blue|",
		AlbumLocation:    "",
		AlbumCategory:    "",
		AlbumCaption:     "",
		AlbumDescription: "",
		AlbumNotes:       "",
		AlbumFilter:      "",
		AlbumOrder:       "name",
		AlbumTemplate:    "",
		AlbumCountry:     "zz",
		AlbumYear:        0,
		AlbumMonth:       0,
		AlbumDay:         0,
		AlbumFavorite:    false,
		AlbumPrivate:     false,
		CreatedAt:        time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:        time.Date(2020, 2, 1, 0, 0, 0, 0, time.UTC),
		DeletedAt:        nil,
	},
	"345-shirt": {
		ID:               1000025,
		AlbumUID:         "as6sg6bipotaab34",
		AlbumSlug:        "345-shirt",
		AlbumPath:        "",
		AlbumType:        AlbumManual,
		AlbumTitle:       "345 Shirt",
		AlbumLocation:    "",
		AlbumCategory:    "",
		AlbumCaption:     "",
		AlbumDescription: "",
		AlbumNotes:       "",
		AlbumFilter:      "",
		AlbumOrder:       "name",
		AlbumTemplate:    "",
		AlbumCountry:     "zz",
		AlbumYear:        0,
		AlbumMonth:       0,
		AlbumDay:         0,
		AlbumFavorite:    false,
		AlbumPrivate:     false,
		CreatedAt:        time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:        time.Date(2020, 2, 1, 0, 0, 0, 0, time.UTC),
		DeletedAt:        nil,
	},
	"color-555-blue": {
		ID:               1000026,
		AlbumUID:         "as6sg6bipotaab35",
		AlbumSlug:        "color-555-blue",
		AlbumPath:        "",
		AlbumType:        AlbumManual,
		AlbumTitle:       "Color555 Blue",
		AlbumLocation:    "",
		AlbumCategory:    "",
		AlbumCaption:     "",
		AlbumDescription: "",
		AlbumNotes:       "",
		AlbumFilter:      "",
		AlbumOrder:       "name",
		AlbumTemplate:    "",
		AlbumCountry:     "zz",
		AlbumYear:        0,
		AlbumMonth:       0,
		AlbumDay:         0,
		AlbumFavorite:    false,
		AlbumPrivate:     false,
		CreatedAt:        time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:        time.Date(2020, 2, 1, 0, 0, 0, 0, time.UTC),
		DeletedAt:        nil,
	},
	"route-66": {
		ID:               1000027,
		AlbumUID:         "as6sg6bipotaab36",
		AlbumSlug:        "route-66",
		AlbumPath:        "",
		AlbumType:        AlbumManual,
		AlbumTitle:       "Route 66",
		AlbumLocation:    "",
		AlbumCategory:    "",
		AlbumCaption:     "",
		AlbumDescription: "",
		AlbumNotes:       "",
		AlbumFilter:      "",
		AlbumOrder:       "name",
		AlbumTemplate:    "",
		AlbumCountry:     "zz",
		AlbumYear:        0,
		AlbumMonth:       0,
		AlbumDay:         0,
		AlbumFavorite:    false,
		AlbumPrivate:     false,
		CreatedAt:        time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:        time.Date(2020, 2, 1, 0, 0, 0, 0, time.UTC),
		DeletedAt:        nil,
	},
	"red|green": {
		ID:               1000028,
		AlbumUID:         "as6sg6bipotaab32",
		AlbumSlug:        "red|green",
		AlbumPath:        "",
		AlbumType:        AlbumManual,
		AlbumTitle:       "Red|Green",
		AlbumLocation:    "",
		AlbumCategory:    "",
		AlbumCaption:     "",
		AlbumDescription: "",
		AlbumNotes:       "",
		AlbumFilter:      "",
		AlbumOrder:       "name",
		AlbumTemplate:    "",
		AlbumCountry:     "zz",
		AlbumYear:        0,
		AlbumMonth:       0,
		AlbumDay:         0,
		AlbumFavorite:    false,
		AlbumPrivate:     false,
		CreatedAt:        time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:        time.Date(2020, 2, 1, 0, 0, 0, 0, time.UTC),
		DeletedAt:        nil,
	},
}
View Source
var Auth = func(f form.Login, s *Session, c *gin.Context) (user *User, provider authn.ProviderType, method authn.MethodType, err error) {

	nameName := f.CleanUsername()

	user = FindUserByName(nameName)

	provider, method, err = AuthLocal(user, f, s, c)

	if err != nil {
		return user, provider, method, err
	}

	user.UpdateLoginTime()

	return user, provider, method, err
}

Auth checks if the credentials are valid and returns the user and authentication provider.

View Source
var CameraFixtures = CameraMap{
	"apple-iphone-se": {
		ID:                1000000,
		CameraSlug:        "apple-iphone-se",
		CameraName:        "Apple iPhone SE",
		CameraMake:        "Apple",
		CameraModel:       "iPhone SE",
		CameraType:        "",
		CameraDescription: "",
		CameraNotes:       "",
		CreatedAt:         time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:         time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		DeletedAt:         nil,
	},
	"canon-eos-5d": {
		ID:                1000001,
		CameraSlug:        "canon-eos-5d",
		CameraName:        "Canon EOS 5D",
		CameraMake:        "Canon",
		CameraModel:       "EOS 5D",
		CameraType:        "",
		CameraDescription: "",
		CameraNotes:       "",
		CreatedAt:         time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:         time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		DeletedAt:         nil,
	},
	"canon-eos-7d": {
		ID:                1000002,
		CameraSlug:        "canon-eos-7d",
		CameraName:        "Canon EOS 7D",
		CameraMake:        "Canon",
		CameraModel:       "EOS 7D",
		CameraType:        "",
		CameraDescription: "",
		CameraNotes:       "",
		CreatedAt:         time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:         time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		DeletedAt:         nil,
	},
	"canon-eos-6d": {
		ID:                1000003,
		CameraSlug:        "canon-eos-6d",
		CameraName:        "Canon EOS 6D",
		CameraModel:       "EOS 6D",
		CameraMake:        "Canon",
		CameraType:        "",
		CameraDescription: "",
		CameraNotes:       "",
		CreatedAt:         time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:         time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		DeletedAt:         nil,
	},
	"apple-iphone-6": {
		ID:                1000004,
		CameraSlug:        "apple-iphone-6",
		CameraName:        "Apple iPhone 6",
		CameraMake:        "Apple",
		CameraModel:       "iPhone 6",
		CameraType:        "",
		CameraDescription: "",
		CameraNotes:       "",
		CreatedAt:         time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:         time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		DeletedAt:         nil,
	},
	"apple-iphone-7": {
		ID:                1000005,
		CameraSlug:        "apple-iphone-7",
		CameraName:        "Apple iPhone 7",
		CameraMake:        "Apple",
		CameraModel:       "iPhone 7",
		CameraType:        "",
		CameraDescription: "",
		CameraNotes:       "",
		CreatedAt:         TimeStamp(),
		UpdatedAt:         TimeStamp(),
		DeletedAt:         nil,
	},
}
View Source
var CameraMakes = map[string]string{
	"acer":                        "Acer",
	"ACER":                        "Acer",
	"asus":                        "ASUS",
	"Asus":                        "ASUS",
	"ASUS_AI2302":                 "ASUS",
	"apple":                       "Apple",
	"Casio":                       "CASIO",
	"CASIO COMPUTER":              "CASIO",
	"CASIO COMPUTER CO":           "CASIO",
	"CASIO COMPUTER CO.":          "CASIO",
	"CASIO COMPUTER CO.,LTD":      "CASIO",
	"CASIO COMPUTER CO.,LTD.":     "CASIO",
	"CASIO CORPORATION":           "CASIO",
	"Fujifilm":                    "FUJIFILM",
	"FUJIFILM CORPORATION":        "FUJIFILM",
	"Garmin-Asus":                 "Garmin",
	"google":                      "Google",
	"GOOGLE":                      "Google",
	"U63667E4U111368":             "Google",
	"Hewlett-Packard":             "HP",
	"htc":                         "HTC",
	"Kodak":                       "KODAK",
	"EASTMAN KODAK":               "KODAK",
	"EASTMAN KODAK COMPANY":       "KODAK",
	"Leica Camera AG":             "Leica",
	"LEICA":                       "Leica",
	"LG Electronics":              "LG",
	"LGE":                         "LG",
	"lge":                         "LG",
	"Minolta Co., Ltd.":           "Minolta",
	"MINOLTA CO.,LTD":             "Minolta",
	"KONICA MINOLTA":              "Konica Minolta",
	"Motorol":                     "Motorola",
	"Motorola Mobility":           "Motorola",
	"motorola":                    "Motorola",
	"samsung":                     "Samsung",
	"SAMSUNG":                     "Samsung",
	"Samsung Electronics":         "Samsung",
	"SAMSUNG TECHWIN Co.":         "Samsung",
	"SAMSUNG TECHWIN":             "Samsung",
	"Samsung Techwin":             "Samsung",
	"sharp":                       "SHARP",
	"Sharp":                       "SHARP",
	"sigma":                       "SIGMA",
	"Sigma":                       "SIGMA",
	"OLYMPUS":                     "Olympus",
	"OLYMPUS CORPORATION":         "Olympus",
	"OLYMPUS DIGITAL CAMERA":      "Olympus",
	"OLYMPUS IMAGING CORP.":       "Olympus",
	"OLYMPUS OPTICAL CO.,LTD":     "Olympus",
	"ONEPLUS":                     "OnePlus",
	"Nikon":                       "NIKON",
	"NIKON CORPORATION":           "NIKON",
	"Huawei":                      "HUAWEI",
	"RaspberryPi":                 "Raspberry Pi",
	"RICOH IMAGING COMPANY, LTD.": "RICOH",
	"Ricoh":                       "RICOH",
	"Pentax":                      "PENTAX",
	"PENTAX Corporation":          "PENTAX",
	"PENTAX CORPORATION":          "PENTAX",
	"Blackberry":                  "BlackBerry",
	"Research In Motion":          "BlackBerry",
	"Sony":                        "SONY",
	"VenTrade GmbH, Germany":      "VenTrade",
}

CameraMakes maps internal make identifiers to normalized names.

View Source
var CameraModels = map[string]string{}/* 206 elements not displayed */

CameraModels maps internal model identifiers to normalized names.

View Source
var CategoryFixtures = map[string]Category{
	"flower_landscape": {
		LabelID:    1000001,
		Label:      LabelFixtures.Pointer("flower"),
		CategoryID: 1000000,
		Category:   LabelFixtures.Pointer("landscape"),
	},
}
View Source
var CellFixtures = CellMap{
	"mexico": {
		ID:           s2.TokenPrefix + "85d1ea7d382c",
		PlaceID:      PlaceFixtures.Get("mexico").ID,
		CellName:     "Adosada Platform",
		CellCategory: "botanical garden",
		Place:        PlaceFixtures.Pointer("mexico"),
		CreatedAt:    TimeStamp(),
		UpdatedAt:    TimeStamp(),
	},
	"caravan park": {
		ID:      s2.TokenPrefix + "1ef75a71a36c",
		PlaceID: s2.TokenPrefix + "1ef75a71a36c",
		Place: &Place{
			ID:           s2.TokenPrefix + "1ef75a71a36",
			PlaceLabel:   "Mandeni, KwaZulu-Natal, South Africa",
			PlaceCity:    "Mandeni",
			PlaceState:   "KwaZulu-Natal",
			PlaceCountry: "za",
			CreatedAt:    TimeStamp(),
			UpdatedAt:    TimeStamp(),
		},
		CellName:     "Lobotes Caravan Park",
		CellCategory: "camping",
		CreatedAt:    TimeStamp(),
		UpdatedAt:    TimeStamp(),
	},
	"zinkwazi": {
		ID:           s2.TokenPrefix + "1ef744d1e28c",
		PlaceID:      PlaceFixtures.Get("zinkwazi").ID,
		Place:        PlaceFixtures.Pointer("zinkwazi"),
		CellName:     "Zinkwazi Beach",
		CellCategory: "beach",
		CreatedAt:    TimeStamp(),
		UpdatedAt:    TimeStamp(),
	},
	"hassloch": {
		ID:           s2.TokenPrefix + "1ef744d1e280",
		PlaceID:      PlaceFixtures.Get("holidaypark").ID,
		Place:        PlaceFixtures.Pointer("holidaypark"),
		CellName:     "Holiday Park",
		CellCategory: "park",
		CreatedAt:    TimeStamp(),
		UpdatedAt:    TimeStamp(),
	},
	"emptyNameLongCity": {
		ID:           s2.TokenPrefix + "1ef744d1e281",
		PlaceID:      PlaceFixtures.Get("emptyNameLongCity").ID,
		Place:        PlaceFixtures.Pointer("emptyNameLongCity"),
		CellName:     "",
		CellCategory: "botanical garden",
		CreatedAt:    TimeStamp(),
		UpdatedAt:    TimeStamp(),
	},
	"emptyNameShortCity": {
		ID:           s2.TokenPrefix + "1ef744d1e282",
		PlaceID:      PlaceFixtures.Get("emptyNameShortCity").ID,
		Place:        PlaceFixtures.Pointer("emptyNameShortCity"),
		CellName:     "",
		CellCategory: "botanical garden",
		CreatedAt:    TimeStamp(),
		UpdatedAt:    TimeStamp(),
	},
	"veryLongLocName": {
		ID:           s2.TokenPrefix + "1ef744d1e283",
		PlaceID:      PlaceFixtures.Get("veryLongLocName").ID,
		Place:        PlaceFixtures.Pointer("veryLongLocName"),
		CellName:     "longlonglonglonglonglonglonglonglonglonglonglonglongName",
		CellCategory: "cape",
		CreatedAt:    TimeStamp(),
		UpdatedAt:    TimeStamp(),
	},
	"mediumLongLocName": {
		ID:           s2.TokenPrefix + "1ef744d1e283",
		PlaceID:      PlaceFixtures.Get("mediumLongLocName").ID,
		Place:        PlaceFixtures.Pointer("mediumLongLocName"),
		CellName:     "longlonglonglonglonglongName",
		CellCategory: "botanical garden",
		CreatedAt:    TimeStamp(),
		UpdatedAt:    TimeStamp(),
	},
	"Neckarbrücke": {
		ID:           s2.TokenPrefix + "1ef744d1e284",
		PlaceID:      PlaceFixtures.Get("Germany").ID,
		Place:        PlaceFixtures.Pointer("Germany"),
		CellName:     "Neckarbrücke",
		CellCategory: "",
		CreatedAt:    TimeStamp(),
		UpdatedAt:    TimeStamp(),
	},
}
View Source
var ClientFixtures = ClientMap{
	"alice": {
		ClientUID: "cs5gfen1bgxz7s9i",
		UserUID:   UserFixtures.Pointer("alice").UserUID,
		UserName:  UserFixtures.Pointer("alice").UserName,

		ClientName:   "Alice",
		ClientRole:   acl.RoleClient.String(),
		ClientType:   authn.ClientConfidential,
		ClientURL:    "",
		CallbackURL:  "",
		AuthProvider: authn.ProviderClient.String(),
		AuthMethod:   authn.MethodOAuth2.String(),
		AuthScope:    "*",
		AuthExpires:  unix.Day,
		AuthTokens:   -1,
		AuthEnabled:  true,
		LastActive:   0,
		// contains filtered or unexported fields
	},
	"bob": {
		ClientUID: "cs5gfsvbd7ejzn8m",
		UserUID:   UserFixtures.Pointer("bob").UserUID,
		UserName:  UserFixtures.Pointer("bob").UserName,

		ClientName:   "Bob",
		ClientRole:   acl.RoleClient.String(),
		ClientType:   authn.ClientPublic,
		ClientURL:    "",
		CallbackURL:  "",
		AuthProvider: authn.ProviderClient.String(),
		AuthMethod:   authn.MethodOAuth2.String(),
		AuthScope:    "*",
		AuthExpires:  0,
		AuthTokens:   -1,
		AuthEnabled:  false,
		LastActive:   0,
		// contains filtered or unexported fields
	},
	"metrics": {
		ClientUID: "cs5cpu17n6gj2qo5",
		UserUID:   "",
		UserName:  "",

		ClientName:   "Monitoring",
		ClientRole:   acl.RoleClient.String(),
		ClientType:   authn.ClientConfidential,
		ClientURL:    "",
		CallbackURL:  "",
		AuthProvider: authn.ProviderClient.String(),
		AuthMethod:   authn.MethodOAuth2.String(),
		AuthScope:    "metrics",
		AuthExpires:  unix.Hour,
		AuthTokens:   2,
		AuthEnabled:  true,
		LastActive:   0,
		// contains filtered or unexported fields
	},
	"Unknown": {
		ClientUID: "cs5cpu17n6gj2jh6",
		UserUID:   "",
		UserName:  "",

		ClientName:   "Unknown",
		ClientRole:   acl.RoleNone.String(),
		ClientType:   authn.ClientUnknown,
		ClientURL:    "",
		CallbackURL:  "",
		AuthProvider: authn.ProviderClient.String(),
		AuthMethod:   authn.MethodUndefined.String(),
		AuthScope:    "*",
		AuthExpires:  unix.Hour,
		AuthTokens:   2,
		AuthEnabled:  true,
		LastActive:   0,
		// contains filtered or unexported fields
	},
	"disabled": {
		ClientUID: "cs5cpu17n6gj2gf7",
		UserUID:   "",
		UserName:  "",

		ClientName:   "Deleted Monitoring",
		ClientRole:   acl.RoleClient.String(),
		ClientType:   authn.ClientConfidential,
		ClientURL:    "",
		CallbackURL:  "",
		AuthProvider: authn.ProviderClient.String(),
		AuthMethod:   authn.MethodOAuth2.String(),
		AuthScope:    "metrics",
		AuthExpires:  unix.Hour,
		AuthTokens:   2,
		AuthEnabled:  false,
		LastActive:   0,
		// contains filtered or unexported fields
	},
	"analytics": {
		ClientUID: "cs7pvt5h8rw9aaqj",
		UserUID:   "",
		UserName:  "",

		ClientName:   "Analytics",
		ClientRole:   acl.RoleClient.String(),
		ClientType:   authn.ClientConfidential,
		ClientURL:    "",
		CallbackURL:  "",
		AuthProvider: authn.ProviderClient.String(),
		AuthMethod:   authn.MethodOAuth2.String(),
		AuthScope:    "statistics",
		AuthExpires:  unix.Hour,
		AuthTokens:   2,
		AuthEnabled:  true,
		LastActive:   0,
		// contains filtered or unexported fields
	},
}
View Source
var CountryFixtures = CountryMap{
	"germany": {
		ID:                 "de",
		CountrySlug:        "germany",
		CountryName:        "Germany",
		CountryDescription: "Country description",
		CountryNotes:       "Country Notes",
		CountryPhoto:       nil,
		CountryPhotoID:     0,
		New:                false,
	},
}
View Source
var DefaultPasswordCost = 12

DefaultPasswordCost specifies the cost of the BCrypt Password Hash, see https://github.com/photoprism/photoprism/issues/3718.

View Source
var DeprecatedTables = Deprecated{
	"subjects_dev1",
	"subjects_dev2",
	"subjects_dev3",
	"subjects_dev4",
	"subjects_dev5",
	"subjects_dev6",
	"subjects_dev7",
	"subjects_dev8",
	"subjects_dev9",
	"subjects_dev10",
	"markers_dev1",
	"markers_dev2",
	"markers_dev3",
	"markers_dev4",
	"markers_dev5",
	"markers_dev6",
	"markers_dev7",
	"markers_dev8",
	"markers_dev9",
	"markers_dev10",
	"faces_dev1",
	"faces_dev2",
	"faces_dev3",
	"faces_dev4",
	"faces_dev5",
	"faces_dev6",
	"faces_dev7",
	"faces_dev8",
	"faces_dev9",
	"faces_dev10",
	"reactions_dev",
	"albums_users_dev",
	"photos_users_dev",
	"auth_sessions_dev",
	"auth_shares_dev",
	"auth_users_details_dev",
	"auth_users_dev",
	"auth_users_logins_dev",
	"auth_users_settings_dev",
	"auth_tokens_dev",
	"addresses",
}

DeprecatedTables lists deprecated development database tables, so that they can be removed.

View Source
var DetailsFixtures = DetailsMap{
	"lake": {
		PhotoID:      1000000,
		Keywords:     "nature, frog",
		Notes:        "notes",
		Subject:      "Lake",
		Artist:       "Hans",
		Copyright:    "copy",
		License:      "MIT",
		CreatedAt:    TimeStamp(),
		UpdatedAt:    TimeStamp(),
		KeywordsSrc:  "meta",
		NotesSrc:     "manual",
		SubjectSrc:   "meta",
		ArtistSrc:    "meta",
		CopyrightSrc: "manual",
		LicenseSrc:   "manual",
	},
	"blacklist": {
		PhotoID:      1000001,
		Keywords:     "screenshot, info",
		Notes:        "notes",
		Subject:      "Blacklist",
		Artist:       "Hans",
		Copyright:    "copy",
		License:      "MIT",
		CreatedAt:    TimeStamp(),
		UpdatedAt:    TimeStamp(),
		KeywordsSrc:  "",
		NotesSrc:     "",
		SubjectSrc:   "meta",
		ArtistSrc:    "meta",
		CopyrightSrc: "manual",
		LicenseSrc:   "manual",
	},
	"bridge": {
		PhotoID:      1000003,
		Keywords:     "bridge, nature",
		Notes:        "Some Notes!@#$",
		Subject:      "Bridge",
		Artist:       "Jens Mander",
		Copyright:    "Copyright 2020",
		License:      report.NotAssigned,
		CreatedAt:    TimeStamp(),
		UpdatedAt:    TimeStamp(),
		KeywordsSrc:  "meta",
		NotesSrc:     "manual",
		SubjectSrc:   "meta",
		ArtistSrc:    "meta",
		CopyrightSrc: "manual",
		LicenseSrc:   "manual",
	},
}
View Source
var DownloadToken = NewStringMap(Strings{})
View Source
var Entities = Tables{
	migrate.Migration{}.TableName(): &migrate.Migration{},
	migrate.Version{}.TableName():   &migrate.Version{},
	Error{}.TableName():             &Error{},
	Password{}.TableName():          &Password{},
	Passcode{}.TableName():          &Passcode{},
	User{}.TableName():              &User{},
	UserDetails{}.TableName():       &UserDetails{},
	UserSettings{}.TableName():      &UserSettings{},
	Session{}.TableName():           &Session{},
	Client{}.TableName():            &Client{},
	Service{}.TableName():           &Service{},
	Folder{}.TableName():            &Folder{},
	Duplicate{}.TableName():         &Duplicate{},
	File{}.TableName():              &File{},
	FileShare{}.TableName():         &FileShare{},
	FileSync{}.TableName():          &FileSync{},
	Photo{}.TableName():             &Photo{},
	PhotoUser{}.TableName():         &PhotoUser{},
	Details{}.TableName():           &Details{},
	Place{}.TableName():             &Place{},
	Cell{}.TableName():              &Cell{},
	Camera{}.TableName():            &Camera{},
	Lens{}.TableName():              &Lens{},
	Country{}.TableName():           &Country{},
	Album{}.TableName():             &Album{},
	AlbumUser{}.TableName():         &AlbumUser{},
	PhotoAlbum{}.TableName():        &PhotoAlbum{},
	Label{}.TableName():             &Label{},
	Category{}.TableName():          &Category{},
	PhotoLabel{}.TableName():        &PhotoLabel{},
	Keyword{}.TableName():           &Keyword{},
	PhotoKeyword{}.TableName():      &PhotoKeyword{},
	Link{}.TableName():              &Link{},
	Subject{}.TableName():           &Subject{},
	Face{}.TableName():              &Face{},
	Marker{}.TableName():            &Marker{},
	Reaction{}.TableName():          &Reaction{},
	UserShare{}.TableName():         &UserShare{},
}

Entities contains database entities and their table names.

View Source
var FaceFixtures = FaceMap{
	"john-doe": Face{
		ID:            "PN6QO5INYTUSAATOFL43LL2ABAV5ACZK",
		EmbeddingJSON: []byte("[-0.015105677000169373,-0.0005582744874266051,0.0480268501406662,-0.03601115760977173,0.0005837739331054689,0.014168089953522492,-0.03945336629091645,-0.02582770810183487,0.020898761370506287,0.049166841007919314,0.021960500727076723,-0.019064476425213243,0.02198730232398834,0.0006670523258575441,0.03028046368291855,0.00649638007861023,-0.01584042613295212,0.00530397326763153,-0.06404373233350608,0.03889477750802231,-0.0365899261901268,0.0360787547656456,0.07579429823342132,0.039115246617597965,-0.0777424514863777,0.035950400633987425,-0.01904672616637268,0.031240118709612276,-0.01142303718094612,0.021169409966093445,-0.04066713893357315,0.048964979162612915,-0.016256413336937715,-0.02378354035888214,-0.020449917192553707,-0.02040227800516968,0.06541690078029251,0.016761249534914705,0.03380005035063598,-0.10038679582336427,0.043679719882033535,0.03128701222455444,0.012390233834701538,0.05524386205410767,0.021537026348385238,-0.016655772903281404,0.007295974349593354,-0.000005785312992858532,-0.047790829845092773,0.017440576051146697,-0.06534523391118621,0.06609203363401413,0.03238222320728302,0.006614993631034087,-0.054927458582173155,0.030833110256991578,-0.0056855157837505345,-0.007370784518985901,0.0013351148462055202,0.047366844577483365,0.04135019693103943,-0.02510304556774292,-0.05305447016115189,-0.03180977055114746,0.012452435193779296,-0.031038226814250947,-0.06159064720963287,0.057565623878417974,0.006987256155133055,0.10980759767712402,0.0014624758511650082,0.04941792959784012,0.02249399537556839,-0.007318808567618561,0.011643714617645264,-0.033996864613095854,-0.10756568994960479,-0.008790611639031982,-0.06265860528228379,-0.03834362793397904,-0.007061803256170654,-0.02360514984864273,-0.030340688408576965,-0.006711280069554138,-0.026063804222563172,-0.06257436487065124,-0.03489222804085922,0.023775160926244356,-0.05953325934691238,-0.0015599671627334586,0.04257923482005539,-0.02072714042014847,0.042186514202873227,0.03334131403590164,-0.04231802868860626,-0.03938228046069336,0.04991599600813751,0.005012853217630309,0.02852926982268677,-0.04592934168044281,-0.0446876756071167,0.05780069138760376,-0.06523845092017364,0.03691154157677917,0.0048527119732078555,-0.008498008999919891,-0.06625776342607116,0.013960302090915604,-0.029253019821994783,0.02477269871644745,0.010155390116101837,0.03100301871340158,-0.07413353268207168,0.01750142506529999,0.03461705135130691,0.04982243958808899,0.00851692480498886,-0.002991416728403473,0.01759018484255066,-0.07281463888115311,0.07669263036101531,0.0287119138326683,-0.0011225693401481635,-0.022214332482351686,0.08318748801869094,0.06656315672954559,0.0034995880579914086,0.04958693578422928,-0.027691547638692474,-0.03405751975708465,-0.062014044191894525,-0.0004367024225837711,0.007944679561768342,0.03339219333856888,-0.04039564807562256,-0.06730881179145813,-0.07099339792601776,-0.033052287483390806,-0.050682249608245855,0.011561693050074387,-0.09867453691846315,-0.02774825273226944,0.010811723733195496,0.02427582366474533,-0.02078586645137596,0.01433492286357048,0.026900254564299775,-0.05306856266233825,-0.007102414552368164,-0.02275204349867813,-0.03211197205357055,-0.014967170406674196,0.022953155306690905,-0.03644228327174301,0.012341418549354555,0.020687427985451052,-0.09076456366364288,0.031082595049208066,0.04102866745965958,-0.02306090883122635,0.027812227150472258,-0.013119295590370941,-0.004158771480469893,-0.007025444076653517,0.009275999232177735,-0.039368103392872236,0.01910143328294525,-0.05630273885418091,0.055353015055413055,-0.0014070097039474495,0.042947509516956334,0.0024906970417621615,-0.03561797166536834,0.006505803784743882,0.006665486497595978,-0.006378142944042969,0.05448368035679932,0.07332471840206146,-0.0014946864171386718,-0.008414893981474686,-0.00006825545633163364,0.02668107540572357,-0.024539537215417483,-0.07293688736830901,0.06344162595002364,-0.033607367797969814,-0.01986442914540863,0.026089177944317626,-0.022147074482840423,-0.08048881567908478,0.050637503425783534,-0.06346700348937226,-0.015700777833213043,-0.04264569287159348,-0.002655311902906036,-0.03654008229608307,-0.007810925734401397,-0.0435794361814415,-0.011699671276438905,0.057055175916534424,0.04544679800120926,0.037604382557088464,-0.02941164037058258,-0.05797836845658112,-0.06812897444572831,0.08032934278161621,-0.01328043643980198,-0.08971531949739076,0.0065821178142807,0.008762343139662933,0.020370728524544524,0.03974483299145508,-0.0051898651247510525,-0.0031604766306224056,0.07640609197084428,0.038082580676622776,0.05806105880397415,-0.014124205852999725,0.007738546446239335,-0.04230980231715012,-0.01059650656994934,0.010447661136037827,-0.04688999712561989,-0.06730292583744431,0.016754640387374113,-0.011607031355502319,0.023310211609113313,0.08731236136631013,0.05903231309516144,0.04731763803346557,-0.02573253768891525,-0.06296218933005523,0.04012439522837066,0.025853857002137298,0.007843758596900636,0.046765933136711124,-0.0018710897452026364,-0.005570995783544921,0.0005954957864215851,0.029306860778232576,0.03074633266388397,0.02318916068950821,-0.011157762649505614,-0.013694216304312515,0.015094815793841173,-0.008802384161989595,0.032486344160458376,0.05804673958212662,-0.006112833595197296,0.006215988022933197,0.04096582699106979,-0.03384389014125061,-0.01596561475662651,-0.010684742677253074,0.07758476984541932,-0.005856569876429291,0.024524756417617796,-0.007312638971189117,-0.017082938609609223,0.0011795664558563231,0.0134139216274601,-0.09028529851032258,-0.039419858379217534,0.022968888672964094,0.004521465961741944,-0.06451345260910797,-0.04178954661956787,-0.024166587057536396,0.012531514465320588,0.02323170220531845,0.04000117979464722,0.03214717679358063,0.056948825253341676,0.05539476134574128,0.013257249967432405,-0.0001733097061775205,-0.01234630922813568,0.0645579352090454,0.029838023576596068,-0.06455350567951279,-0.013353814450276946,0.0018903859134303275,0.0483956355803524,-0.004311148732519531,-0.014597871326852417,-0.006853384533165969,0.04057120248826332,0.007104495398272705,-0.027431613068233492,-0.09228961372112274,-0.06612821609320907,0.0607875549739154,-0.026342729023012542,0.06454961398086471,0.004993419094538574,-0.031680751000938416,0.007030828889411162,-0.010022039687029268,-0.05428986021428299,0.017565788880432403,0.04025441392524147,0.009023673541622163,0.009042981797892759,0.019972970522025298,0.058956133531005865,-0.008320068883990478,0.02986469039841843,-0.053139615835475926,-0.024647880182499998,0.007398424838289642,0.09050773480216218,-0.015264475845877838,-0.06385353173209762,0.016500261584825135,0.02948610469222336,-0.02504260549529915,-0.018835162326039122,0.050848700451684575,-0.03199441179409637,-0.019780421813622284,-0.027626615849293518,-0.03419102001171112,-0.014344497819357758,0.07330804638220215,-0.02937739203966522,-0.00813064343063736,-0.01626787766690979,-0.011862281442715148,0.01708495452203865,-0.07908452169694902,0.023940025203119657,-0.13222904368403626,0.048117978374713134,-0.017696039928765107,0.004759198936071777,0.01974903359319687,0.010760925580199815,-0.005599215416766357,0.0457550643199234,-0.01929695170711136,-0.007629453917987061,-0.010118543879554747,0.015504727550686645,0.03245994598398285,0.05049195915774918,-0.06673184178328552,-0.01761782965561676,0.008011984665633392,0.023189021348875426,0.06720727829968262,0.010742643820915984,-0.03080342023261017,-0.050128828091691585,0.04935064662135315,0.012293871085033494,0.05639020959568253,-0.02957390940026932,-0.03676535286145477,-0.004796114565882111,0.05806600428461456,0.018004375270679475,-0.020827009949742126,-0.0336628292589238,-0.0018759192028083797,-0.06518067211773682,-0.02731396445179306,-0.03430377823384857,0.016512887052202073,0.061277289867412564,-0.019134398406000827,0.05822277240970993,0.044241398569797516,-0.005043084829421997,-0.04018607674626312,0.06927013858769607,-0.004344519528141023,0.012868128092136383,-0.08525498011501847,0.03454513801989975,-0.024010073233037568,0.02195751011467056,-0.006334513400955963,0.06579357440817261,-0.009711559918811036,-0.013345796425511931,0.014702989589321902,0.025344240384365696,0.021528159041582107,0.062108358473124695,-0.05624000855096435,0.05573243638398361,0.006079895555899353,-0.002001432319259644,-0.002443507762801743,-0.010721616536909867,-0.04295436979775849,0.08180931740979766,-0.014715828856610106,-0.03683209432014542,-0.012104101579055901,0.013437134275827486,0.06964065576705855,0.06482510509484864,-0.03570993432865906,-0.05314338450149346,-0.11395284172808075,0.01426200422902832,0.012089334595506287,-0.058501489031186675,0.060430661880981444,0.0500264671381279,0.056157483018959044,-0.05001220665976715,0.07527209592948914,0.031277665487422945,-0.02043782967053299,-0.08342602471109009,-0.0008383195362091063,0.045666852330976865,-0.05341016683117676,-0.0003998352299102786,-0.03577085955021919,-0.038460902215493774,-0.01896648460201416,0.012595410857717131,-0.0060184891112971504,0.019921306564183502,-0.060824947492757256,-0.08852370824755859,0.003392263133862915,0.0036400299628715506,0.03255903972799225,-0.008351102953604507,0.01567778415994263,-0.00023129789984893678,-0.023584983993255156,0.06815277690185165,0.032341226983652875,0.0026074800379161833,-0.0395687710902481,-0.003838149411266327,0.04100280903240967,-0.019130064566046143,-0.07410366493117905,-0.07626375565908813,-0.014898051247527312,-0.02028174410337219,-0.0413983021689148,0.05420100971967316,0.02752598950049637,-0.024227222049773407,0.01466367372080475,0.013159825923877717,0.03946128732824249,0.02427177671503067,0.03591388100347939,-0.003222521540391235,0.0183274046263958,-0.03000545738402557,-0.04066711644104462,0.017155749921449585,-0.06134375247813416,-0.036362408407546995,-0.019471377535612868,0.034648935124684144,0.01776573165824356,-0.005382945029614257,-0.034531315796222685,-0.004955845186902466,-0.023998231859699858,0.03130629873801392,-0.012495260702575683,-0.031263154234012984,-0.063910194205719,0.01745994660978073,0.038960702542871095,0.04021203330704117,0.023016385340854643,-0.0403753269719162,-0.018214478771432493,0.009230925650691108,0.031802766191501616,-0.0060094809595568855,-0.05665428473038101,-0.0026934481642271802,-0.01278887994417572,0.013757778161637,-0.06991252187433472,0.025432326767399597,-0.05928275511783676,-0.0071204498857164004,0.009102611771803285,-0.048021745720825196,-0.04234071017774048,0.0378105065918541,-0.0030949641070522308,-0.0802945368397522,-0.029345935146197513,-0.055173430818717964,0.035613126717409516,-0.07929294203311157,0.011167600883222962,-0.010140670248493196,0.018876611506684494,0.038331590555036925,-0.021097202962330627,-0.02206313974373703,-0.0409461827742096,0.07130217153391571,0.06408282878469848,0.005774317041436768,-0.07263691064697265]"),
		SubjUID:       SubjectFixtures.Get("john-doe").SubjUID,
		FaceSrc:       SrcAuto,
		SampleRadius:  0.8,
		Samples:       5,
		Collisions:    1,
		CreatedAt:     TimeStamp(),
		UpdatedAt:     TimeStamp(),
	},
	"unknown": Face{
		ID:            "IW2P73ISBCUFPIAWSIOZKRDCHHFHC35S",
		EmbeddingJSON: []byte("[-0.01391313475,-0.031814132,0.017377053075,-0.01851261325,0.021255451499999998,-0.051055306,0.0366150855,0.007998470175,0.0695672645,-0.1067636275,0.0307072165,0.02941578425,0.054768010500000006,0.041151049,-0.06493903375,0.0015896528499999996,-0.05437162425,0.011924136,-0.025054364,0.0009921848250000003,0.012807875,-0.01319641825,-0.00488935855,-0.07366566999999999,-0.0611034065,-0.06666547924999999,-0.04888238425,-0.035091203,-0.01854779615,-0.024557007999999998,0.0030882324,-0.055875238499999993,-0.0246700375,-0.02172630285,-0.025565405,0.058197003,0.0547107775,0.047857131,-0.04580487,-0.00021249714999999926,0.009770386499999999,0.044646309999999995,0.0018705221250000003,0.0371642205,0.018666550325,-0.0032051121500000002,0.0057689690000000005,0.06864431525,-0.04906746575,-0.07431345875,-0.0647896445,0.0120775261,-0.02890944,0.01879340475,0.024201165499999996,0.04355076025,-0.014099167999999999,0.026033113750000003,0.025052837749999998,-0.068487575,0.022659832499999998,-0.0027816580000000002,0.03500908899999999,0.012073708,0.006179701499999999,0.034802054,-0.01799351825,0.0457090165,0.0036213202500000002,-0.008580024424999999,-0.072938294,-0.016224131250000003,0.06459961750000001,-0.04963675325,0.08387918625,-0.13179572750000002,-0.011209804,0.011490459325,-0.04273579375,-0.0603162555,-0.03941750125,0.061718414,0.029566903,0.011713920749999999,-0.07820421,0.042141458,0.04053815075,-0.0431640475,-0.009912542250000001,0.0083520422,0.04968228825,0.061740414,-0.003251780325,-0.0009849047250000001,-0.07888640699999999,0.00013775579999999977,0.0545293975,0.0314430285,-0.025010752249999997,-0.0754261725,0.00026732155,-0.04167998875,-0.038423044,-0.012128476325,-0.042172063999999995,-0.03992470075,0.055492729500000004,0.005174035799999999,-0.0491557875,0.047224008,0.027870127375,0.11123915125,-0.0017566490000000008,0.06637293625,0.08444959,-0.038633152000000004,0.040549324,0.0181765085,-0.0103707255,-0.052444608749999996,-0.0721162075,0.0017395296250000006,0.03576854825,-0.0010544938500000002,-0.03536455575,0.026296009000000002,-0.011038092,0.009561795625000001,0.0061376165,0.016413343999999996,-0.0007041408250000004,0.008430746000000001,0.007772767000000001,0.035255850500000005,0.03609753,-0.004700959499999999,-0.0244996355,0.029143511,0.0019076424499999993,-0.02425797625,-0.02824462725,0.03748850525,0.004536174249999999,0.094921252,0.0402888305,-0.035919796500000004,0.0325914395,0.028936399249999998,0.0100435923175,0.051378176750000004,0.0466342265,-0.104555035,-0.058734387250000006,-0.053190730000000006,-0.004201957500000001,-0.0030598753299999996,-0.009583216875000002,-0.05078611825,-0.037133980925000004,0.0406709395,0.01118452775,-0.028617762,-0.006732865225,-0.03122189575,-0.054440001749999994,0.055957135,-0.054629830500000004,0.00548484575,0.0018623927500000005,-0.0054835023,0.04359883825,-0.04169836625,0.025491153,0.035283773500000004,0.020951236874999998,0.017083047,0.011288541499999999,0.029325848999999998,0.031001949125000004,0.04632318125,0.058114136999999996,-0.018353527600000002,0.0010329377499999999,-0.05167622725,0.0015087445249999999,0.0665028595,-0.017552406,0.0030785925075000006,0.067237884,-0.045436311,0.022067097,-0.068492519,-0.09581154575,0.02946200275,0.019267693750000002,-0.013623341,-0.0023418241499999996,0.057798097500000006,-0.02830513875,0.00967313775,-0.0156008155,-0.038696254,-0.046455728749999994,-0.020938623415,0.00489014375,0.0191956194,0.01110382618,0.020775547499999998,0.116135215,-0.040037983750000006,0.039333228250000005,0.011678268775,0.0650113585,0.0023590035,-0.05381264350000001,-0.008376887255000002,-0.05688126,0.01151456675,0.00003846570000000035,-0.01287236325,-0.06661450099999999,-0.03827642075,-0.045446761,-0.03154112575,0.028140978,0.070225409,-0.020004859,0.0193362475,-0.0034820117499999997,-0.074293175,-0.04876132,0.0074359382499999994,0.0066796961250000005,-0.011634815875,0.009048144557499999,0.0344562235,-0.01762691475,0.019571052749999998,0.026697968750000002,0.015484052000000002,0.03876590725,0.0037216567,0.04729691375,0.008930467375,-0.07800198875,-0.043134631,0.0424968855,-0.0057933688750000005,-0.075971065,-0.005398360425,0.01736323075,-0.03068225125,-0.0700152155,0.012127145199999998,0.052686005499999994,0.00609444565,-0.05195201175,-0.01496918725,0.032330921,-0.0251999175,-0.0317094965,0.0063436068250000005,-0.046775514000000004,0.024125194250000002,-0.025942028000000002,0.0683850275,0.048410787250000004,-0.020441745875,0.0014374775000000001,-0.007761475925,-0.003657494249999999,-0.01002698675,-0.0033783719824999996,-0.01613361275,0.054106417000000004,-0.0499455445,0.07898722825,-0.014621054499999998,0.08328554125,-0.02660218675,0.0029891759249999995,-0.010516797999999999,0.03557642825,-0.060217531,0.0171425431,0.03266155825,-0.0598199765,0.021716342,0.0851276085,0.06803951925,0.02062912125,-0.008283969975,-0.032307963655,0.0506742335,0.020532822,0.0360789155,-0.0006283978250000003,-0.02785933975,-0.0030728417500000002,-0.034540906499999996,-0.0300205485,0.1115321695,0.053453546000000005,0.0703359815,0.010377180074999999,0.036756731075,-0.00297751195,-0.077184735,0.0264304635,0.0481822745,0.073460445,0.06669125100000001,0.09291405250000001,0.05010346175,0.029880568250000003,-0.034649416,0.029474834999999998,0.031317542500000004,-0.02699742575,0.0557845065,-0.05035647375,-0.0022147215,0.0213037777,0.07004532675,0.0264894885,-0.04297427725,0.07081584375,-0.00481877925,0.0048342215,-0.02130823725,-0.025961382749999998,-0.06262777725,0.034384046749999994,-0.0190645906,-0.031134641674999998,-0.068910896,0.06261982975,-0.0260708335,0.09122910349999999,-0.03100116965,0.049027657,-0.01474484825,-0.03469707425,-0.006989758326499999,-0.056124094,0.009483469874999999,-0.04452728725,-0.011856436750000001,-0.02315196925,-0.0312197325,0.04668023435,-0.013576097,0.12342725624999999,0.009619299000000001,-0.03253524225,0.00691780145,-0.007575374,0.017970803,0.039913282575,0.01719394935,-0.034085923000000004,0.0160938888,0.047048848750000004,0.05772991225,0.03188324875,0.005430960675,-0.015838408499999998,-0.020243144275,0.017690586,-0.038486903249999996,-0.0037113453749999994,-0.05992632025,-0.0066788766,-0.009260173449999999,-0.043526957500000005,0.035566587250000004,0.0520154155,-0.03742566475,-0.012924420124999999,0.05485878925,0.017260086875,-0.00945986855,0.06038467375,0.028211044,0.01180591125,0.076735146,0.010415625750000001,-0.026288575499999998,0.03359009575,-0.029869059499999996,0.018123453499999997,-0.039763396500000006,0.013718122,0.015185622250000001,-0.021508391,0.0933689765,0.0861815165,0.01772232125,-0.03339793175,-0.018280382249999998,0.024922235325,-0.00670621405,-0.004941027,-0.0030330302750000006,0.049037655,0.0407625665,-0.098270484,-0.010615769,0.014149342125,0.0732888865,0.01031384975,0.0708132685,-0.0248589595,0.01914073765,0.023424223175,0.0017784540000000003,-0.0016458964999999989,0.034801676250000003,0.0007287893750000003,-0.00010908749999999942,-0.10601041950000001,0.035614491750000005,0.0023196674499999996,-0.07413317850000001,-0.03187354875,0.0022230885000000004,-0.022146297500000002,-0.0020944157250000002,-0.053558506000000006,0.005407627825000001,-0.00868874405,0.049080156750000006,-0.015095300350000002,0.050741894499999995,-0.0644765125,0.049679071875,0.011181570100000001,0.08374534125,0.047086234500000004,0.04629623975,0.07211018675,0.01747124065,0.03838733075,-0.02483115725,0.059315212,-0.007435562849999999,-0.033800771,-0.062262683750000006,0.018508591749999997,0.05456382,-0.032214809750000004,-0.0060910296,-0.0688426575,0.028439918925000002,-0.050798488,-0.032318176500000004,0.0070076956499999996,-0.0850821425,0.0116441195,-0.06209254825,0.0392326955,-0.038714852,0.042342809,-0.07345825249999999,-0.0783221335,-0.00245315065,0.0052674726500000005,0.06709293425,-0.033900455,0.059125045,-0.0089869296,0.03726652275,0.036819674749999996,-0.066015052,0.0090962235,-0.0532330595,-0.0423983279,0.054948274,-0.0021313933875,-0.036738087749999995,-0.061552870499999995,0.01083386435,-0.000004987750000000173,0.03250943875,-0.00265433175,0.023262875250000002,0.04094322,-0.0458693885,0.004981979125000001,-0.01146187345,-0.017557853249999998,-0.02698673775,-0.02743749775,0.015717598925,0.00637069715,0.0225431645,-0.024064882425,0.07339412125,0.031813663,0.04107066175,-0.0605346105,0.005952673775,-0.06258660275,-0.0320774,-0.049892332,0.024880522500000002,0.0639617125,-0.0702298615,0.017941317249999998,-0.005220711350000001,0.014933126924999998,0.0115449712]"),
		SubjUID:       "",
		FaceSrc:       SrcAuto,
		SampleRadius:  0,
		Samples:       1,
		Collisions:    0,
		MatchedAt:     &editTime,
		CreatedAt:     TimeStamp(),
		UpdatedAt:     TimeStamp(),
	},
	"joe-biden": Face{
		ID:              "VF7ANLDET2BKZNT4VQWJMMC6HBEFDOG6",
		EmbeddingJSON:   []byte("[0.10730543085474682,-0.007740289179353713,0.04013410115400314,0.01458170011165962,-0.033333988977870946,0.06636234022813034,-0.00010941258007316575,0.0266348918046072,-0.05017391628723953,0.026034562221256254,-0.03388911566430759,-0.03461048494812202,0.040559725024994844,0.02683793627304573,-0.00972269717541027,-0.07836494561032105,-0.022470260049817198,0.011276674801708603,-0.05526434009558201,0.014401617237932205,-0.031258523568474236,-0.05416104192368187,-0.05567222379755878,0.017950877029356768,-0.016397424193561935,0.062346790423413276,-0.019043469394284057,0.04085343435437774,-0.05627231374819698,0.002355368169155769,0.07268979656775187,-0.0015096598716884627,-0.030188596848975374,-0.030941932784964564,-0.02826790015985233,-0.05420075791573048,-0.015742074680253033,0.019360258910790157,-0.008227027287290193,-0.08797317745792674,-0.07358703463505077,0.09688007249803735,0.015168583267354964,-0.034569315837825396,0.054231690688333986,0.018033145214487362,0.01579093209709463,-0.09204238994311237,0.08645247031890774,-0.10499936100221444,0.022421303168151857,0.005288450124515152,-0.017391072021601867,0.011218363053184624,-0.08478270589438915,0.0038618527485391615,-0.023381522484070015,-0.05428399272960853,-0.049397680150033,0.04006855272634697,-0.056704127236808774,-0.00958812557516262,-0.024006645464504622,-0.0073450501057456975,-0.03138197361666756,-0.013765138786817361,0.01162637563227787,0.0023935177775817563,0.08953138773108768,0.05337418268588829,-0.012870218945196915,0.03652425150877475,-0.027783526080406188,-0.019489638927241745,-0.01591402705199299,-0.005031992847164803,-0.014592982936285286,-0.03540697236418762,0.015595597412254449,0.004689344744109726,-0.009276015175478172,0.0058068592886232374,0.10480716412028504,0.0169216338187767,-0.0159497901004467,0.04574707649004688,-0.012214007484710122,-0.04849749380776977,0.054958586523843764,0.055898306713647844,-0.05052226642217827,0.008803732924324036,0.02326267119630642,0.047305830959801676,0.04497242295638694,0.020850376996620942,0.01314765746152954,-0.06768179592533874,0.05844347174572754,-0.03379152370001783,0.009412363744416903,0.04876727547273407,0.03299943491180715,0.01981742466488743,0.0547951049219265,0.020208802772381018,-0.08163521584288311,-0.038910958658009524,-0.004049565234655952,-0.02227413252290535,-0.0176418922441086,0.0568860088455925,-0.03240221023084612,0.0018760896289435579,-0.03234445138420723,0.007601825631139565,0.004916589611196899,-0.07292478312312889,0.021712048014592936,0.008807552270011749,0.0045489283733609,0.018861112444398878,-0.0341377092368577,-0.06305481604926585,0.039113288345403674,-0.01390809621003151,-0.04930861238819008,0.02377057523982868,0.019087416355893325,-0.013899296822125817,0.02251690464443226,0.08074113913260841,-0.018922226267959787,0.07189693789385795,0.060660045672045707,-0.023638294307546808,-0.006141792394255906,-0.06662582397409247,-0.013895529799502565,0.016608829923953898,-0.00390724028582611,0.05038048671591301,-0.015355035841564064,-0.0008532485082750321,-0.004694504582768126,-0.016610601585741958,0.008180847821889228,-0.04035771976174698,0.01847608156922703,0.08409907464663602,-0.029978496458568385,-0.06499117178372192,0.07448235046571827,0.10142187900247382,-0.023405319141915855,0.05237413796294822,0.04315940939233541,-0.02349721355909328,0.012594679585403442,-0.10457832859776592,0.001468614040066719,0.0165479676672657,-0.07708675453700256,-0.05102918249748802,0.045642631412478735,-0.004785828004440499,0.0203317336356945,-0.02006395174473057,0.04201285855375195,0.032883700123707296,0.0477916040669878,0.08070634492548084,-0.09245629058029556,0.05112703265588493,-0.006224603994954872,-0.0005257819460310555,0.005513055457300567,0.02521921247766018,0.012207323409280013,-0.009936333046208725,-0.007426916158089448,0.027260071572856714,0.006004036209329835,-0.039462719505699156,0.04428369084658737,0.005021041270120048,0.00955255667591259,-0.024385389176467896,0.06930311634011002,-0.0389855151682066,0.009325780048200605,0.0067487294106089776,-0.0538568250434906,-0.04132319716445885,0.005287871307727813,0.02836177144018917,0.016369665767238237,-0.02612976718916588,0.0781344821977253,0.0124423230052565,0.007052016124275589,0.07093038059380721,-0.040975969278632354,0.05987170546998787,0.0429845054696949,0.06377765311330413,-0.054260408781722336,0.017124075467253648,0.011034745989844896,-0.01129856537228031,-0.03058279355517101,-0.052326615682374664,0.06340472755555274,-0.007235566082305412,0.08209440086026383,-0.0037407900405261995,-0.02100836190159107,0.051361881913555715,0.035520336595121764,0.019260735587613487,0.04814414379586697,-0.010566343916274241,-0.03353529212573547,0.05283452853813282,-0.027749841873006824,-0.03820509264906912,-0.0015166780129867554,0.02487160170807457,0.03048850776525669,-0.030538799520168875,0.0921192664219265,0.03269134465648327,-0.031787506815418434,-0.01908650508301182,0.05982613160244779,-0.053232109332236294,-0.03650761934345913,0.0026813365359365463,0.032588356136758805,-0.032364926929593085,0.07780626359498405,0.044541174425177764,0.011626562325897788,0.03554684517681643,-0.030510870967539787,-0.04088990689640999,0.07105028789278889,0.03138784011465073,-0.06342823476303319,0.09164142434876824,-0.0112280279000453,-0.04595559070266152,0.08798781996626949,0.026803936697537615,-0.0014241986940294257,-0.020834715982498548,0.023556784775891685,0.008996215819517326,-0.0012677171940084454,-0.07692881668502807,0.024615258007191814,0.02948731386628723,0.06911119150276565,-0.041541930091072085,0.07317672894504547,-0.012252912262506771,-0.03429316172188286,0.03286905748134327,0.025736928383919527,0.003926683415351601,0.006255630871762562,-0.020806247741813468,0.0675457214042778,0.007579460672946357,0.012004441173839569,-0.028187582314963343,-0.0018772867526912688,-0.01844064376148571,-0.05389302147970715,-0.04154738243111,-0.05912346626385308,-0.003186127453911171,-0.015869915592464562,0.036601020266580665,-0.08332522355102062,-0.015594113206121387,0.010554298175920372,0.009863903175943527,-0.04408378851017952,-0.01321298950931368,-0.026788807387387467,-0.00905998101737915,-0.07901183432849217,0.022626760559060342,0.05966787504726859,-0.0373913765745697,-0.00620443077226124,-0.005321248754354935,-0.05629461318153381,-0.04339327553344822,0.03066110013017902,-0.0560899433873785,0.029585001932263853,-0.06142458606396866,0.018855098215825178,0.03336997769082436,-0.07772387048591708,0.02869667860757885,0.04751144987925148,0.07131169258731747,0.01554444873138424,-0.019102520424152183,-0.06713599618322277,0.021553602847260475,0.022784952935549926,-0.07224605423420524,-0.03428428022313595,0.025510370273970604,-0.042455744666400605,0.024999596293880464,0.0007267671517935561,-0.007103063657435513,0.051193967364198685,-0.03918299151588478,-0.05340270113635778,-0.0005553757678619388,-0.04361415384515381,-0.05659870360464592,-0.003001301568729019,-0.10493783691904449,0.007865782491956196,-0.010459198798326888,0.03839990013440418,-0.029396389004837837,0.04123072916591454,-0.003870788638888664,0.011576299454542732,0.021793958225202522,0.0013144587776207917,-0.024084851461598205,-0.007895128372669067,0.02794634672595444,0.013256276108802492,-0.06581846043538475,-0.03512838380870453,0.010219935781849479,0.041956290830379675,-0.02193645334812136,0.036522118692461206,-0.04014683200312634,-0.007509486720670319,0.025035869046040268,0.03341998480559387,-0.03562761249035026,0.04892323307058029,-0.030771232001644132,-0.016917612628533363,0.002604945885121918,-0.044643074882380486,0.01154372547133419,-0.021955625942386627,0.018907365975515553,0.03550167291446045,0.01069377167082758,0.00010183658435096768,-0.04899959038740444,0.04724968668608978,-0.01864932432341235,0.0591259089168789,0.07907125494612216,0.028897156624642945,0.01633692932619137,0.06420496597867965,0.018129071607111358,-0.06522170992608013,-0.03939954941189146,0.04130569647272587,0.04419998725251961,0.04542913027885341,0.018470383181769943,0.008568164058957863,-0.06659949697784996,-0.053012251715078354,-0.020253768667636778,-0.0428765378002491,0.07184141544699574,0.02058260375849676,-0.03779574153167915,0.0021254573788347247,0.00922705617390442,-0.06903300705643031,0.048223514541707424,-0.008124176700399017,0.06623217639861775,0.011399885879904556,0.13320644195552445,-0.015707634324862062,0.004298537653726769,0.007440328888434029,-0.03552852988830433,0.006549433453245544,-0.019685784628289793,0.001693401851796341,0.050209905835451124,0.023254144681681632,-0.04905436637160683,-0.01058279299507389,0.06261640349854469,-0.07554102380998802,-0.010803172210683784,0.04001997347501145,-0.013296409033855438,0.056829244201244355,0.029110596151947783,0.006392164909307861,-0.0035876165295053485,-0.019022594469099045,-0.06487911801050472,0.02178870949222603,0.05293369045270252,0.0014374271403566358,0.02058438161717472,-0.05258523574003887,-0.03312468141761551,0.051533518133239746,0.03929023312081566,-0.07294044148252202,0.01607557897360134,-0.0007034383966050719,0.014925192443655966,0.051449392859268764,-0.06079890988933106,-0.04363216685223599,0.028568039422766974,0.045766175851156804,0.07275596444172669,-0.02276483221781349,0.09294405910429002,0.06625853254336929,-0.04167032707059745,-0.04751508792911625,-0.014774199240300752,0.023224616626467326,-0.01281115503053608,0.03472993899021339,0.008343472536062031,-0.011408440443860645,0.004419146704378701,0.05045044130775452,-0.03518939370823498,-0.04170123182437134,0.022208642446600917,0.07141607704347333,-0.04112406919064011,0.03227901691925602,0.03527487398910847,-0.029543274091153718,0.005872693907862854,-0.008123872357421475,-0.058780187362098696,-0.00027467445847377796,0.024044984289353373,0.057634827237228584,-0.04450547877367153,-0.03946884506688686,-0.02006971111822632,0.006139106799438476,0.014848452844277668,-0.040448605585189826,-0.047422823475079534,0.00047739853115692137,-0.03920787799786568,-0.05102518756346798,0.029106281725284004,0.023013759328845976,-0.0181101632871727,0.003943383191735267,-0.11744085779379082,0.00652325401639185,-0.0016088291387550352,0.004582751362570763,0.06564233218507957,0.014525142593546867,-0.05397913284980278,-0.005146496768864823,0.008265835225847246,-0.09204165418391608,-0.023673615795413973,0.016221329961976054,0.0560354235721693,-0.03387280199538708,0.011243025140723228,0.02789629877560217,0.07942785398379296,0.019745293456116107,-0.03951280953572121,-0.0325216371505229,-0.04877831216997623,0.008021598871560669,0.06607214515587043,0.08340918698473548,-0.06638043362871171,0.0003533690162649157,-0.05787711264029312,0.017585791805968413,-0.004768172475530777,-0.031721018591366806,0.059853391075907716,0.08903246940908241,0.00910143805785122,-0.02198764055408287,0.023417301139897727]"),
		SubjUID:         SubjectFixtures.Get("joe-biden").SubjUID,
		FaceSrc:         SrcManual,
		SampleRadius:    2,
		Samples:         33,
		Collisions:      0,
		CollisionRadius: 0,
		CreatedAt:       TimeStamp(),
		UpdatedAt:       TimeStamp(),
	},
	"jane-doe": Face{
		ID:              "VF7ANLDET2BKZNT4VQWJMMC6HBEFDOG7",
		EmbeddingJSON:   []byte("[0.0007977288249999999,0.00627412635,0.010081367249999999,0.060607290999999994,0.0198231296325,0.00677942925,0.0127981935,0.0173897118,-0.0031311625250000003,-0.01667410885,-0.063420228,0.018361592,-0.08858173750000001,0.03073611525,-0.031917364749999996,-0.038458696,-0.0547301015,-0.008465875175,0.01761571915,-0.004627128875,-0.014689141,0.0638510155,-0.06016673375,0.0427068645,-0.0018743572750000003,-0.01726785,0.01797843425,0.013435698749999999,-0.02318214925,0.022266988,0.010709568150000001,-0.006173700925,0.05487494425,-0.00735372625,-0.00730452625,-0.009618603875,0.02644855175,0.03581387875,0.0603323515,0.0274974055,-0.011483472,0.018239579750000002,0.0330916205,0.02055146915,0.0242073965,-0.0006206512774999994,-0.01502779865,-0.00663770983,0.020805977000000003,0.025900334499999997,0.03035390375,0.0032148387500000003,-0.00391496355,0.054927406750000005,0.038901408,0.045302014249999994,0.003995124,0.03543321425,0.06059028175,-0.1112412095,-0.0058859643825,0.006096619500000001,0.034855345,-0.0979946125,-0.01321143025,0.11343869000000001,0.006484222825,0.025919567249999997,0.06456440150000001,-0.004858886425,-0.006586231,-0.012453104075,-0.0045703442499999995,0.06079882,-0.0248508515,0.0585631235,0.0204748375,-0.050474988250000005,-0.0601280055,0.0206371795,0.05054124575,0.07786492925,0.06104633175,0.0122962905,-0.020578794,0.04871231525,-0.0046306429,-0.11645592,-0.0016124173750000003,-0.0174920002425,0.0055334826,0.04527567075,0.07851289325,-0.0053165103000000005,-0.02369275525,0.017747101675,-0.0519253465,-0.00209848275,-0.012302984500000001,-0.013717400199999999,0.01359236975,0.02108301525,0.041778528499999995,-0.10003224,0.005552072275,0.024320880750000003,0.011672114249999999,-0.056534426750000005,-0.06916763575,-0.06349918,-0.0056744145,0.0346825085,-0.05831162125,-0.001728813,0.026253652175,-0.00694282505,0.07631711775,0.0162711135,-0.025647805849999997,-0.05708761650000001,-0.1363480425,0.0731495385,0.074582931,0.01708094025,-0.0401903185,-0.014694330250000002,-0.0015122242499999994,-0.0527830695,0.03213205125,0.01814980125,-0.0022534211875,0.006620919325,0.0096743934,-0.00950359475,-0.03451209525,-0.077583193,-0.0327730455,-0.00922135715,0.047522121,0.010230271575,0.0098390256,0.05241573875,-0.0001339010500000001,0.0493660095,0.04127633175,0.0588596835,-0.008334644124999999,-0.013199373475000001,0.00565431415,0.02194862975,0.053116437,-0.06246536,-0.06762575875,0.0083671415,-0.062960726,0.028651681,-0.0047957945,0.02279490325,-0.01949435125,-0.0145249815,0.0179922025,-0.0050103798,-0.02183141475,0.014762827225,-0.0098820205,0.050833761500000005,-0.06879305050000001,-0.019839172457500002,0.03499764575,0.0508008915,-0.0215009885,0.006626853750000001,-0.038975954,0.029960057999999998,0.0196604121,0.010876822750000001,0.02900263525,-0.00548767725,0.013630449250000001,0.0005998975,0.019220962075,-0.0465303345,0.019054888,-0.02356633375,-0.038011357999999995,-0.025119104500000003,0.03871977525,0.024482080750000003,0.08431583125,0.02732495225,0.0949345775,0.0306948015,-0.01885955675,0.0670141655,-0.0106550329825,0.0004984321480000002,0.03305477934,0.03265502,-0.03410266475,0.06414483,-0.042341717,0.0491270175,0.03191559375,0.02826792625,0.1142247775,0.03742189875,0.03385123675,0.043446917,0.0065846527,0.019319251675,0.050761064999999994,-0.03899118075,0.02432739675,0.056898795,-0.07070233249999999,-0.0063754505,-0.0538108965,-0.0519101365,-0.08475072950000001,0.0080495835,-0.08008777975,-0.0499128635,0.0237340165,0.0359055565,-0.043358586500000004,0.031290711,0.0449176795,-0.003326489350000001,0.0373564235,0.017098932,0.058522701499999996,-0.013411767875000001,-0.03544247725,-0.00710222475,-0.026729970750000002,-0.0142197245,-0.002157010249999999,0.05803525749999999,-0.051960914,0.02590911975,0.0300332645,0.0244066115,0.026088825249999996,0.07373419,-0.060161999499999994,-0.0263518045,0.0149505905,0.005806035210000001,-0.07896729899999999,0.006424700950000001,-0.0104141191,0.01328528435,-0.05459953475,0.04573714225,0.047946037999999996,-0.030557348499999998,-0.033911058,0.028284643249999998,0.031623838,-0.017917532,0.038332007,0.04307251675,0.062034384750000005,-0.013643519,-0.06629597425,0.0846901,0.032617285999999995,0.016660794,-0.0103782503,-0.0035999764999999997,-0.04074201625,-0.045392795,-0.0567024655,0.0534449995,0.032140247999999996,-0.002615942875,0.003970428749999999,0.0006793384999999996,0.0479470605,-0.016679134425,0.002493526,-0.007884887625,-0.07609053,-0.06749486625000001,-0.015545290075,-0.02866428275,-0.04221165,0.0099219202,0.03324765825,0.06594442824999999,-0.05207292325,0.0256602945,-0.008784434175000001,-0.020650667,-0.01128855048,-0.026282654000000003,-0.06931673275,-0.03460548625,-0.0039021685000000003,-0.003175222075,-0.025202154450000003,0.03085420725,0.062878601,0.036194557625,0.0315831115,-0.013516679,-0.016713230000000003,0.03202856975,-0.013251297775,0.020228611,0.0753752425,0.08055008,0.08036205,0.05738650225,-0.029444540749999998,0.0182663646,-0.04029768,0.05418008275,-0.00337875545,0.0869958875,0.04981642525,0.021226451,0.067376955,0.05702456425000001,0.0256154065,0.0165551525,0.0573363425,-0.1131940465,-0.048254465999999996,-0.006381563175,-0.02805285125,-0.0843180615,-0.02208099575,0.043981212500000005,-0.049404160749999995,-0.02832630175,-0.019787925749999997,-0.044114692,0.09415466650000001,-0.0715971185,0.053612709999999994,0.0617767915,0.011761299175,-0.0743617975,-0.07687093,-0.04184027125,-0.03814104625,0.0190135215,-0.02036469565,0.0043338230499999995,-0.046716389250000004,0.0342062435,0.0023538994499999995,-0.04717579125,-0.0273496055,0.04244376625,0.03831893575,0.01170549475,-0.03156427225,0.011907790275,-0.060581235,0.041743171499999995,0.099892805,0.08941036024999999,0.07931023225,-0.0045060146,-0.02298178175,0.0170326654,0.002005552125,0.03624607975,-0.00254639081,-0.021702498499999997,0.00025758344999999975,-0.05735207875,-0.058512898,0.054487390999999996,-0.069780037,-0.0482861765,0.0426412765,-0.0005190220499999999,0.026654973999999998,-0.018059142435,0.015806152,0.0052889667500000005,-0.0156201485,0.0704166475,0.060801867999999995,-0.0465132285,-0.020886614749999997,-0.011178703875000001,-0.0090127261,-0.009662520155,0.03789897025,-0.051430011,0.01944026075,0.07463842749999999,0.051795128075,0.011506837975000002,-0.008200053,0.011794975,0.03101000675,-0.049201035000000004,-0.0443442445,-0.0134417219,-0.006325725025,-0.01755221025,-0.0607596845,-0.05817676075,0.015325420199999999,0.026280469425,-0.07285754675,-0.06974749,0.01869944075,-0.023075805624999998,0.0091478072825,0.031091439499999998,-0.006865514,-0.04208474925,-0.0054626954749999995,0.0188026845,-0.049544713000000004,0.032261805,0.02338521525,-0.013330432,-0.0224570155,-0.07082244425,-0.014643495500000001,0.1226712625,0.0132564726,-0.031361429749999996,0.0379521724,-0.0066203463,-0.06123780825,-0.019100098,-0.027406878750000002,-0.0161381114,0.02359161625,0.01835811065,0.0794485855,-0.0399414135,-0.051978358749999995,-0.079630794,-0.054609961750000005,0.0144952945,-0.0032930052749999997,0.1006953125,0.0168597975,0.003768769525,-0.024148695999999997,-0.038411440875,0.0352168475,0.0783426045,-0.06891328699999999,-0.044475929750000004,-0.0476271525,-0.0257017798,0.007319193000000001,-0.045860846,0.03613755025,0.032934875749999995,-0.015392466625,-0.0171107225,-0.021246307,-0.0049659322075,-0.1082791675,-0.04918869425,-0.061089002,0.03516362325,0.033606162499999995,-0.01977699145,-0.029709126250000002,0.09406408499999999,0.023276244,-0.061732811,-0.008581465,-0.0577642725,-0.02751739825,0.0150603045,-0.013947836,0.0069377069999999996,-0.030457946,0.0455026755,0.015736250325,0.04198308775,0.050190193499999994,-0.009795321,-0.0626410775,-0.0029042444000000013,-0.010100665375,0.033087972,0.019320060942499998,-0.03953386525,0.022216985874999998,-0.013800474,-0.010697693999999999,-0.007538092125,0.07874210100000001,-0.013867060100000002,-0.015251711,0.03930575225,0.047296916,0.04652198125,-0.0124463654,0.0721478725,-0.010877033000000001,0.0175319255,0.038609693,0.0295120445,0.011322374,0.07543583300000001,0.00606530779,-0.06794421925]"),
		SubjUID:         SubjectFixtures.Get("jane-doe").SubjUID,
		FaceSrc:         SrcManual,
		SampleRadius:    0.2849559839760571,
		Samples:         3,
		Collisions:      0,
		CollisionRadius: 0,
		CreatedAt:       TimeStamp(),
		UpdatedAt:       TimeStamp(),
	},
	"fa-gr": Face{
		ID:              "TOSCDXCS4VI3PGIUTCNIQCNI6HSFXQVZ",
		EmbeddingJSON:   []byte("[-0.053561389904586795,0.02493500179508972,0.05595611112191772,0.0055583031357406614,0.06096615248301697,0.03496644994218445,-0.01198695953822937,-0.02454460388852234,0.06803707268757629,0.026374346495635984,0.0829672158716156,0.016856238718595883,0.026665416756958008,-0.0040052483594970704,0.020293359176193237,0.04141028915954589,-0.0203971049396698,-0.022560134065307616,-0.03766844269610596,0.010925087254508973,-0.05584892202276611,-0.01708412063880005,0.07078410664926148,-0.006791854692691954,-0.09048726862814331,0.06529471053547668,0.00805870625440979,0.003185225187793579,-0.018936199966329958,-0.012567245673349,-0.05535705010704651,0.03018335210581665,-0.04415012300550842,-0.05080241808776856,-0.037411959780944824,0.017662395667355345,0.09760594306341552,-0.028251039018463132,0.01704797846333618,-0.059372201955718996,0.05574424936593628,-0.010868599007102965,-0.012860168669677733,0.01699000405715027,0.06789376899803162,-0.007262103997096252,0.02162036994911194,0.029675374175361636,-0.018911653790352638,-0.040019186535003665,-0.05813169548834228,0.001130981756311036,-0.03868822248225403,-0.013124584308215332,-0.04959773636276245,0.015140624265402221,-0.02141350306637573,-0.03751785701907349,-0.006248120308032227,0.05437072424835205,0.018381264600920565,-0.06975018308328552,-0.03373974997651672,0.034049636619096685,-0.04413912348025513,-0.020500543401235964,-0.06727858024015808,0.0056846422075592035,-0.027692957355023196,0.03017583047795105,0.0379142424294281,-0.020554617585459595,0.08608181673811341,-0.00558661152100952,-0.01761539180555359,-0.030357409232269282,-0.038801233812469485,-0.002326377160518799,-0.04056732406237793,-0.03209971834346008,0.024125684115341186,0.0315708265684845,-0.05462144547168274,0.0026592329726211547,-0.0002449828401040651,-0.018294493854022216,-0.004316533692294311,0.031179499626611328,0.018720620290939332,-0.010533231864138794,-0.02601918470727783,0.03628710090163574,0.00506572206867981,0.03785012353689575,-0.02089666075800049,0.0005888406594442138,-0.02709355396816101,0.05639648983508301,0.006216579241943359,-0.05114516002183533,-0.04535121382156372,0.02563305507798462,-0.07923478377371215,0.032685130028892215,-0.001191900266772461,-0.04475778329414673,-0.023464674753723144,-0.002032372990753174,-0.01025872433950653,-0.024260434875390625,0.02864984106276855,0.007080414502122192,-0.06647833907400513,0.0783933927390442,0.08410754442626953,0.048460447177383424,-0.005683048104943848,-0.0033352546661720274,0.02472490765201111,-0.06543308330223084,0.08478776423457336,-0.025810452447610474,0.043794386990188595,-0.05349430982803345,0.06986419394355775,-0.06776561983079529,-0.027279223366226193,0.06643936192025757,-0.02699730024284821,-0.02261310328250824,-0.030541795043481444,-0.036404816941958615,0.002319148392166138,0.030034134980651855,-0.05057250613243866,0.015797195287312316,-0.05546740251412964,-0.03792064480703736,-0.046270072130859374,0.03600284879156433,-0.016286383008148195,-0.01447935282893982,-0.023145600843895997,0.05445904519541932,-0.019425428872716675,-0.027849521253845218,0.02624303381966553,0.03904380140099487,0.014552910185842895,-0.015262209582714847,-0.01546606357798767,0.06973534984918213,0.03443690571838379,-0.03316039928060913,0.025289981915246583,0.027551592510702515,-0.05067044379051208,-0.026268390881219482,0.01957086168347473,-0.018028586132089235,0.03361352139247131,0.02203808638873291,0.01012487246018982,-0.02816909800907898,-0.009651444010451508,-0.09467841339996338,0.02476457462034607,0.004779872280953979,0.0501946385553894,0.02433562254768372,0.018832664526740112,-0.012715093342271423,-0.029919957296679688,0.00032212689794006383,0.01700923572964264,0.009046746358553008,0.005211006430688477,0.0016982382203079224,0.049998209365203855,0.03436742353085327,-0.0121563069042511,0.05672995838252258,-0.04706990067637634,-0.056664633050765995,-0.012870437315783691,-0.07744849265951537,-0.046735237881042474,0.027536489646829223,-0.0063465054498382575,-0.03997399767149353,-0.005338936482995606,-0.00362328916847229,0.001921811812083435,-0.054075812154693606,0.05371017350401306,-0.06654334314242553,0.027277056678497315,-0.07361431532672119,0.029437021327194217,-0.015122589976702879,0.031627708358566285,-0.0755312407050171,0.010630397944732665,0.008918350276101683,-0.05778323354902649,0.0994148142859497,0.04068332303825378,-0.05268494103314209,0.03015451629309845,-0.018775764622164917,-0.009062567619699096,0.007059089237823487,-0.012346531363076781,-0.04320939792871094,0.07813872230740357,-0.03035949564965286,-0.01947474479802704,0.037923704186218266,0.007442268481819458,-0.03807596509654236,-0.008003724362815856,0.025805637528684693,0.03347750500194153,-0.07962477516238403,0.04868631318370056,0.02977127815507507,0.0029135298348171995,0.09915490313339234,0.019012361539624024,0.051748930902374264,-0.06191068098287964,-0.03972761279501037,0.0016844349614929203,0.0792777453282013,-0.031942168768554685,0.046137294803588864,-0.008718205879244996,-0.029874303470267486,-0.027774339395344544,0.05929509779299927,-0.01801204332841797,0.059447149948730474,0.04841970852426147,-0.0011173667728857427,0.022864025326361084,-0.026576215090582278,-0.05152430963276977,-0.022743134079202268,0.02738566810560608,0.025095160937530517,0.030021709013610842,-0.004549830057951355,-0.00030068623583221453,0.0009505420682525637,0.0293544979478833,-0.0007231390724517822,-0.044882692693908696,0.028293255085162353,-0.026880331244885255,-0.0020027976073425297,-0.0035708168297326663,-0.029375177293811037,-0.03760578239718628,0.009499767254864502,-0.006659269350109253,-0.008412711995428467,0.04506797155446625,-0.061588304754226685,-0.009378277797467041,-0.019579266450035097,-0.009406960064926148,-0.006551914738876342,0.05495061562628174,0.02347226618362427,0.01817871002554474,-0.016346725162420958,-0.0217945497718689,0.06450126613516236,0.05860402971525574,-0.0017858836164611814,-0.050239541191390985,0.10140318902853393,0.04010114428864746,0.0008114142740280172,-0.020079750827853394,0.0290547948102417,0.0523606569267334,0.0697007091730957,0.025686350122457888,-0.069663450563797,0.01652778975481415,0.04418237776111389,-0.030442624633346557,0.07070662380650329,0.00607760764486084,0.018585937644244384,0.04747481670280457,0.003442409377093506,-0.027003151967041016,-0.014442290127001954,-0.03355948236605835,0.04752330382379151,-0.06009620755910644,0.012064740791355286,-0.02728147155336609,-0.0021602167619903566,-0.019625289300570677,-0.027403285474594117,-0.03132451562153625,-0.00696172938717041,0.07344502092098999,-0.05291414485440063,-0.027143530911676025,-0.02862010956461487,0.013457262882380066,0.020273073586030577,0.0869318828140564,0.03178946219732208,0.01546345787972107,-0.025812222701647947,-0.012377268964108276,0.025233301823695375,-0.027445998504124852,0.04623188894171143,0.03194692068911133,-0.018809481018737792,0.05440299125515747,0.08841021014102173,0.024042683822097777,-0.0437970808447113,0.0622284837868042,-0.07230914156738281,0.061785600439392095,-0.005898011142715301,0.017018915580725096,-0.0074343364131958,0.0472978119741211,0.03322449719477844,0.05553645137957764,-0.045228417684552005,0.014598348405079651,-0.05135967175909424,0.02576592887980652,0.05089475070780945,0.03544028016654968,-0.03770926128921509,-0.017584528153511046,-0.0048514873775695804,-0.031726442226049804,0.03177034682945251,0.0442558303147583,-0.028826217311273192,-0.07331044327641296,0.0389429476973114,0.002298495944973755,0.05235454000157165,-0.00712197604630127,-0.023682568859283448,0.023732466243682863,0.013723664675314027,0.058904355138183595,-0.005807367322749329,0.015096379596409608,-0.006360169882392883,-0.030699472455233766,-0.0525733884350586,-0.022169618942180988,0.003913205996453857,0.03606074732737366,-0.007866270807852172,0.048841612311386104,0.0034765838286437986,0.004248465200854493,-0.03280500829776306,0.06378764452790833,0.055532332409862675,0.08680252519212342,-0.017844255846798704,0.029810377057144163,-0.02942251447070618,-0.044855546762594845,-0.005517916898706055,0.050234964126266476,0.011523523362924195,0.005936588419967651,-0.03421115212210693,-0.057217579814910886,0.031242944445419314,0.005507734122839355,-0.07523726362719727,0.07727178597763062,-0.03340703129373169,-0.0037740379818069457,-0.05799064666407776,0.002951611914428711,-0.0381551103936615,0.06767114967684937,-0.05226751990200806,-0.08678377352308655,0.018258538073345338,-0.05100995869369507,-0.014669730179177368,0.0019073754601989742,0.019928211831918334,-0.009651354162780762,0.00148156542230835,0.0300498909315033,0.013933203938430786,0.049118417478469845,0.07034309039993286,0.08631518890869141,0.045312744073425296,-0.0114556711665802,0.002262044725527954,0.03909658930291748,0.058989745317047114,-0.09017043097357177,0.029915415012585447,-0.021694081220796205,0.007112899486217041,0.034908875648205565,-0.07557318224520873,0.00747602307928894,-0.07689437854341126,-0.0816104629965149,0.06584847972103881,-0.027223482248062134,-0.0734825446631775,-0.026031234442622377,-0.021221113447901917,0.009427636536148072,0.0733798275839386,0.038499398346939086,0.07065423379763794,-0.03234823392584229,-0.03810496551548004,-0.022686502779409486,-0.0280469574908548,-0.025900615115014645,0.042155878818878174,-0.00046531529118805023,0.0967171226513672,-0.04239019891482544,-0.021407168994793703,-0.0901884771748352,-0.009318602439419555,-0.062206653710449214,-0.05432696328559875,0.07080146096733093,0.010451482704911804,-0.030338169516888426,-0.05439818012039185,-0.012598419564173888,0.04722508374314881,0.005100992507037353,0.07548265095941162,-0.02993898883608093,-0.00834879275138092,-0.04563876436360169,-0.04020596480168152,0.0288604560251709,-0.07016607971246339,-0.021332305549841307,-0.012735979240548707,-0.0325507344491864,-0.027569437057450866,-0.00618333070614624,0.014708548748822022,-0.028020249052243044,-0.0055215683416900635,-0.027922072329937132,-0.04069747037893982,-0.015941954358544924,-0.057657907068542485,0.057477929705368046,0.09361960902160645,0.023154440080284118,0.08209954707691955,-0.04653738135888672,-0.022657983432824706,0.017859119538793943,0.03184386651611328,-0.06479600977639771,-0.037647264635800176,-0.03802839938505555,0.007582054424845885,-0.000219012254373169,-0.019724465482708738,0.008770073973083495,-0.05662031348901367,-0.021091617894259642,0.024251208349423216,-0.08418829827484131,-0.058303197052200315,0.007839132345101807,-0.01063874680109253,-0.10956825240359497,-0.03290552308336639,-0.0166004150932312,-0.007761278100527954,-0.0341763706727066,0.030335803438739012,-0.04574581508354187,-0.040141617028427126,0.029325096495925906,-0.027303054453048703,-0.018120842727615355,-0.081876543736084,0.049446647137298586,-0.015033118148144533,0.0259648896006012,0.03862191597553406]"),
		SubjUID:         "",
		FaceSrc:         "",
		SampleRadius:    0.3335191224530258,
		Samples:         4,
		Collisions:      0,
		CollisionRadius: 0,
		CreatedAt:       TimeStamp(),
		UpdatedAt:       TimeStamp(),
	},
	"actress-1": Face{
		ID:              "GMH5NISEEULNJL6RATITOA3TMZXMTMCI",
		EmbeddingJSON:   []byte("[-0.042797452781249995,0.00422465874375,-0.048662441625,0.0031430446,0.06633659487500002,-0.018196528703125,0.040835139765625,0.052952038265625,0.006016549665625001,0.009785659178125,-0.029831666965625,0.054324560015624995,0.01054248685625,0.017850270410937497,0.026022013796875,0.03613610925,0.03469964425,0.07347525625,-0.026205852546875,0.0166165387265625,-0.00219102274375,-0.0521860075625,0.028795398437499998,-0.020569271453125,0.00665820161140625,-0.05419626184375,0.006151694960937499,0.0280780779140625,-0.002380057990625,-0.0047011529390625,-0.0250162446671875,-0.08458884684375001,-0.0488252095625,-0.0263757030625,-0.0141043764,-0.055177046234375,-0.024440984495312502,-0.06736828789062499,-0.011746090509375,-0.0658738613125,-0.012061459415625001,0.006663972303124998,-0.02980980240625,-0.024637781609375003,0.081152222890625,0.08694402428124999,-0.009879704509375,-0.06108930775,0.030863420734375,-0.024178249960937502,-0.09244857825,-0.033086686328125,0.039693733424999995,0.0222100371025,-0.07447425484375,-0.068857844375,-0.023395244290625,-0.004518527246875,-0.0123647139375,-0.019760296765625,-0.04322777059375,-0.0339581230625,0.00922167535,0.13172738974999998,-0.057130676015625,-0.04021859003125,-0.04409194796875,-0.06360571378125,0.0038800593812499994,0.011037305934375,-0.12183968115625,-0.07553384335937499,0.08556041196875,-0.00675970565625,-0.008239945834375,-0.0002750189718749999,-0.0123454039234375,-0.074857799546875,0.039849796187499995,0.004566287940625,0.011853646906250001,0.012255246218375,-0.01633359240890625,-0.02856772603125,-0.025007442953125,0.060898780296874996,-0.058974834484375,0.023121999062500002,-0.020350771803125,-0.030586074459375,-0.033634610171875,0.0538676319375,0.041377327125,-0.028109858159375,0.0072398953984375,0.073216935046875,-0.0314768581875,0.062401044,0.040599449268750004,-0.057796485843749995,-0.05566476365625,0.03588720815625,-0.035500273796875,0.0735189534375,-0.02440577285,-0.094595259875,-0.028696179756250002,-0.00399260396875,-0.009224862356249999,-0.005818649078125,-0.045656088593750005,-0.0070814703171875,-0.026597113656249997,-0.030390899437499997,0.039040696718750004,-0.06426890425,-0.06785859596875,0.010784127853124999,-0.054993149796875,-0.037887456421875,0.03338866509375,-0.0212479521875,0.04566912451874999,-0.043900132531250004,0.0746015890625,-0.0243242484375,0.033496269125,-0.00895349779375,-0.090135792046875,-0.060008334546875,-0.03285268494375,0.0074423431250000005,0.0056082175,0.007676819027812499,0.043098117078125,0.01961326721875,0.043081848421875,0.0017007411484375001,-0.058708293015624996,-0.011024991296875,-0.017065255225,0.0463664746875,-0.050305781265625,0.07986595525000001,0.031914426896875,-0.0451691994375,-0.014531763891874999,0.0238665033034375,0.0019062963437499999,0.037309521359375,-0.056698300125000003,0.05307699465625,0.025364797046875,0.041471147171875,0.013446926728125001,-0.032811845578125,-0.07355180671875,-0.07045656553125,-0.027063845834375003,0.02144017521875,0.03856208171875,0.054781846015625,0.065618965625,0.045270843109375,-0.07020550296875,0.0254819304059375,-0.050949131109375004,0.034050439953125,0.02819093215625,0.003919965578125,-0.022841327275312497,0.0024206921150000003,0.0412864711875,0.011987981381249999,-0.05907508284375,0.028428842559375,-0.04474331540625,0.011173079484375001,0.023104085078125003,0.02738280965625,-0.02268888928125,-0.014092400128749998,-0.005039106766562499,0.02355611371875,0.0366038645,-0.09409493103125,-0.0111312976078125,-0.055360834203125,0.0781101144375,-0.034545760890625,-0.026267615734375,0.0074333465375,-0.016226572784375,-0.0334946088328125,0.0087815724984375,-0.03358945,0.00830140880625,-0.116942932375,0.014852332671875,-0.048670014625,0.07110080234375,-0.010049274725,-0.009037579723437501,-0.026618966031796875,-0.0088876183875,0.07093048070312499,0.0003418017562499999,-0.016285292934375,0.023988535603125,0.02958441390625,0.028762250546875,0.10859091765625,-0.026533771203125,-0.08597097553125,0.0254817276328125,-0.0008839394531250004,-0.03657968334375,0.024961030874999998,-0.009623568225625,-0.018902566154374998,-0.02395361703125,0.08707610598437499,0.006472697634374999,0.012126961531250001,0.086273127234375,0.02112650480625,0.072864588171875,0.038641529375,-0.0339470703796875,-0.0070681386978125,-0.05114889515625,-0.064077736875,0.0801859346875,0.03619106715625,-0.044011980829687505,0.020673788834374998,0.05450474890625,0.0007419524218750008,0.005525969687500001,0.05928241809375,0.00873763790625,0.0075881849671875,-0.0030794112093750006,-0.000550304234375,-0.057828903015625,-0.015375027634375,-0.01341457351875,-0.047298705734375,0.0006185382125000001,0.05260293315625,-0.00247172916125,0.0024320877968749995,0.042094363078125,0.038377400699999994,0.047210891703125,0.026533354281249998,-0.0173795238765625,0.0750090398125,-0.02227682790625,-0.015970143140625004,0.0041755543746875,0.0389908288125,-0.026298664421875,-0.0033195475937500005,0.0507240515625,0.0121328996028125,-0.0159850067625,-0.009988589078124999,-0.004624901678125,-0.053816907359375,-0.027323620906250002,-0.07184708109375,0.0739319004375,-0.005675397015625,0.0574534906875,-0.0018322834937499997,0.012349312390625,0.04371528075,0.102938820046875,0.049753955453125,-0.0471465348125,0.014692125212499999,0.011317236803125,0.01167229329,-0.000906872929687501,0.043713847328125,0.050471491734375,0.09127307840625,0.0037926065499999983,0.02476943571875,0.009150867346875001,-0.00608378619375,0.030803383125,0.0250073956109375,0.0141615992625,-0.009127686290625001,0.015869761743625,-0.010958556390624999,-0.012998547918281249,-0.039504874515624996,0.0106979253125,0.01700042085,-0.002604378640625,0.02084322703125,0.030859358796875,0.07505586726562499,0.019067374809375,-0.10191251765625,-0.026006241906249998,-0.047772568234375,-0.0225939113675,0.0361513486875,-0.00958636515625,0.005696997026562499,0.0009894751187500004,0.03013342728125,-0.00880371684375,0.03674879507812499,0.024124882781250002,-0.029399576015625,-0.024997744675000003,-0.05070753615625,0.0313155348725,0.002575418878125,0.005519026109375,-0.05591307903124999,0.0281892310625,-0.03541215253125,-0.07037230915624999,-0.037092981328125,0.013661958040625,0.010150755915625,0.00464935505625,-0.04271175659375,-0.048959364375,0.034574696328125,0.07233478540624999,0.01784359430625,0.0194107177171875,-0.072066672625,0.014341187478125,-0.006838044025000002,0.02312758503109375,0.053927468859375,-0.02893340253125,0.028794135621875,0.045664569265624996,0.039563965140625004,-0.046501012734375,0.065077949234375,0.04449139196875,0.007535738353125,0.043328710500000006,-0.0111408846265625,0.0476011903125,0.060015349999999995,-0.031573955609374996,0.042777720843750006,0.039751312859375,-0.045557269625,0.015271656046875002,-0.0354880490625,0.08538222071875,0.04966688990625,0.056357682296875,-0.011723008359374999,-0.029344679578124998,-0.0026356525624999998,0.05605940871875,0.0239344324375,0.03265417645,0.0010181780718749999,0.076328233859375,-0.0031451877390625002,0.013421614153125,0.10775338210937499,0.046965805359375,0.029762421328125,-0.057406333812499995,0.05597286525,-0.0060815406249999995,0.03258119896875,0.085884606015625,0.0047218173609375,0.024015754907812503,0.0016205940656249997,0.00977695415,0.0248720199375,0.02193678424375,0.02297564028125,-0.02170162459375,-0.016097422159375,0.0036265405412500003,0.058745011828125,0.014267859934375,0.05047798946875,0.0011764822421875,-0.0066052294703125005,-0.05816269984375,-0.0021058192984375,-0.004860934460937501,-0.11327106140625,-0.0204606366775,-0.0118132771265625,0.011304225534375,0.06806309021875,-0.012411606234374999,0.042336594859375,-0.04588128365625,0.0032292451499999998,0.002116435284375,0.05678600528125,-0.019285949515624998,0.018476397046875002,0.020250683071875,0.029468594703125003,0.047492925046874995,0.025336735062499997,-0.021452310171875003,-0.0055234529,-0.010190777515625,-0.02390919653125,0.054283543546875,-0.0089797622421875,-0.0196026405725,0.0847159765,-0.008061421078125,-0.0096810058890625,0.0025359010559375,-0.070020598203125,-0.071642143765625,0.041324847953125,0.062386370046875,0.02080815875,0.03997223459375,-0.004368696557812499,-0.061350179687500006,-0.0379680811875,0.028993340656249998,-0.018274929603124997,-0.0164239366015625,0.027168593468750002,-0.016546095809062498,0.053955401365624996,-0.0365716815625,0.035633695312500005,0.02898745825,-0.0543745755625,0.02312739328125,0.029107762598437503,-0.014907261559375,-0.0393391562734375,0.0266410936875,-0.003273399434375,-0.0365162964375,0.005375640290625,0.04377122634453125,0.007220736701875,0.0027202672781249998,-0.046226400200000003,-0.019703925796875,0.0267226415203125,-0.0313677562890625,-0.018290202359375,0.0116326953546875,0.09366585175,-0.044070507687499996,-0.01559544946875,0.081022457265625,0.0634066775625,-0.048881354125,0.0031107287671875003,-0.02833384091875,-0.0053156806781249994,0.079171438671875,0.07384103956249999,-0.0623021398125,0.06140550584375,0.0487548321875,0.0005419291718749999,-0.02468360628125,-0.064845638109375,-0.038376832953125,-0.023363560046875,0.010565507843749999,-0.02082457664375,-0.010381079196875,-0.03493705171875,0.0830325743125,-0.024592210421875,-0.055243339578125,-0.039002618171875,-0.068491207046875,-0.003042380805,0.0229049883125,-0.045181625687500004,0.0007183075796874999,0.00022675300312499994,0.010043045665625002,0.06768922384375001,0.006879946099999999,-0.031594079140624995,-0.07930963040625,-0.0192133980625,-0.07839539546874999,0.0880084346875,0.022715694093750002,-0.016752869099999998,0.03304357490625,-0.08040172209374999,-0.03786231021875,-0.019575631078125003]"),
		SubjUID:         SubjectFixtures.Get("actress-1").SubjUID,
		FaceSrc:         "",
		SampleRadius:    0.27852392873736237,
		Samples:         4,
		Collisions:      0,
		CollisionRadius: 0,
		CreatedAt:       TimeStamp(),
		UpdatedAt:       TimeStamp(),
	},
	"actor-1": Face{
		ID:              "PI6A2XGOTUXEFI7CBF4KCI5I2I3JEJHS",
		EmbeddingJSON:   []byte("[0.029390826499999998,-0.0503012115,-0.0038545094999999988,0.0509694235,0.031093432499999997,0.0496081305,0.029921502000000003,-0.011004544,-0.060369486,0.017543245,0.01045707515,-0.099466162,-0.00480026345,-0.04493461,-0.0037644171749999997,-0.065234118,-0.0040764575,0.054459017,0.022406583,0.0096438375,-0.110314265,0.016590626,-0.0228292765,-0.1048702,-0.0763408,-0.006629400999999999,0.004310676500000001,-0.029119649,0.01620591965,0.015485259999999999,0.008847230999999999,0.05485049,-0.034671595,0.0115840045,-0.007419231,-0.093930635,0.0017309952,-0.0048228687,-0.05732045499999999,-0.033113999500000005,-0.0240111475,0.0323214015,0.00287205625,-0.030934734,0.00156168245,-0.048679148000000005,0.02641126,-0.0112433873,0.012481417250000001,-0.065828795,-0.03307603,-0.0117135982,0.048581928999999996,0.028982857,0.005623224499999999,-0.032749998,0.011234884625,-0.0006842143500000002,0.026518498,0.061320491,-0.0146354356,-0.079900327,0.0683921215,0.007673159000000001,-0.0036813074999999997,-0.0450446075,0.02894235215,-0.039071353,-0.045876458,-0.0352887335,-0.07320109999999999,-0.015539629999999999,0.0289246405,-0.049284593,-0.01250326,-0.0337509495,0.046399666,-0.071127149,0.08158958499999999,-0.0426160325,-0.0080168428,0.0136308075,0.02569515,0.043871697,0.0033857435,0.058685176000000006,-0.01749069625,-0.053259678,0.049114284,-0.039802356,0.0080722875,-0.0296135,-0.0043557191000000006,0.0014750100000000006,-0.009338751650000001,0.0276961965,0.00885040575,0.016889396,0.0085062253,0.0206174708,0.026253349723,-0.037348458,0.019311317,0.012004956,-0.018269215,-0.0280598629,-0.042533084000000006,-0.04640435,0.003540217,-0.032545467,-0.013042198,0.069853378,-0.0463841565,-0.027688966500000002,-0.059565311999999995,0.0955551455,-0.00281534995,-0.00056369025,0.056012735,0.064883204,-0.004080717500000001,-0.0589001255,0.0204381845,0.00573572365,0.0227016705,-0.0095095435,0.049776725499999994,-0.0318561775,0.013517221,0.05898059,0.0099591405,-0.0467890275,0.020263018,0.0853258175,0.0098792975,0.0248817635,-0.044659859999999996,-0.022181526,0.0473887315,0.022208215000000003,-0.03485217,0.068261088,-0.01371124975,0.023889135500000002,-0.004693188599999999,0.061553551,-0.000011999000000000384,-0.0158730365,-0.006931088,0.09489299500000001,0.055977795,0.06602641000000001,0.01054402925,-0.01124513895,0.002503631,0.0072078265,-0.014834385499999998,-0.046107534000000006,-0.007856566499999999,-0.0422721125,-0.0423789265,-0.0212909215,-0.00794488725,-0.0469044435,-0.071824202,0.0225725725,-0.0319154,0.026527513,-0.009888712899999999,0.02953384,0.085858678,0.013506947,0.0678732135,0.042902051499999996,-0.062338507,0.0354902925,-0.01188858515,0.0286265445,0.019621773500000002,-0.02367736825,0.031068825,0.071462768,0.0546697175,-0.028328653999999998,0.0338450425,0.0414083,0.064161343,-0.014787015499999999,0.042576257,-0.052504155999999996,-0.009431747,0.054281609999999994,-0.021365432499999996,-0.010823029500000001,0.031537834,0.027937777499999997,-0.051239634,-0.0008470490000000008,0.0361261665,-0.0580307265,-0.0315868765,-0.0055125591500000005,0.01400582125,-0.0184045163,-0.046149815,-0.005499571,0.0155790405,0.0583802535,0.039215091,0.0008411794999999998,-0.041732420000000006,-0.050039497,0.007283665000000001,0.0431485005,-0.00677296875,0.0601975825,0.046510825,0.023623201,-0.01524039935,0.07721521,0.074249245,0.0407936515,0.00849325405,0.02431605585,0.011315986,0.01000438185,0.000004355499999999894,-0.0256082855,0.027331278,0.026526522,0.045884533000000005,0.064017159,-0.035494845,0.014849005,-0.07764901299999999,-0.046943987,-0.004783612,-0.0019289365000000006,0.044880989999999996,-0.0615054725,0.008713913,-0.064159369,-0.108074245,-0.0245115032,-0.0346285845,-0.060331363,-0.0337360495,-0.0928075975,0.023803201500000003,0.0215816405,0.039825595000000005,-0.023639452000000002,0.01902793,-0.00781150095,-0.046295049,0.015229914,-0.044872945,-0.0181105295,0.018318828500000002,-0.085241333,-0.00763042895,0.045985624,0.078587918,0.0237581805,0.019066963,-0.014184376,0.0314069,-0.0208157225,0.013775869999999999,-0.092092003,0.060038437,0.0562684335,0.01282044765,-0.043142775,-0.077564127,0.0211277365,-0.013994697,0.0015711942999999998,0.0226966145,0.099338087,0.0291462905,0.093184027,-0.045245903500000004,0.0520713405,-0.069911768,0.0341777035,-0.0035331141,0.005852487999999998,0.0426323475,-0.0029093645,-0.03406806,-0.00466204385,-0.020408429999999998,0.07412659699999999,0.0555368515,0.035822505500000004,-0.019567507499999998,-0.0317213775,0.0006759230000000001,-0.0320736795,0.01196724155,0.0319717745,0.02698861,-0.0009364279,-0.0356625695,0.011958187,0.0374467985,0.0545301175,-0.09391315,0.048995292999999995,-0.04715971,-0.01018323015,-0.02479688875,-0.034046104650000006,0.0157533374,-0.0087085585,-0.00108834735,-0.0443082275,0.0403492,0.009395348,0.0366207795,0.055315856499999996,0.0932063675,-0.00557909673,0.0502743045,-0.08796758,-0.0131685065,-0.026735282,-0.0241287825,-0.0381497525,0.0056856297,0.033867326,0.05904681,-0.0679266085,-0.0335014595,0.032558654,0.041723721,0.017434435499999998,-0.045156486499999995,-0.029794047499999997,-0.0027904705000000004,0.020673108750000002,-0.0192013875,-0.0299808695,-0.03081326245,0.00125815955,-0.075886538,-0.04229379,0.039182544,-0.003952550000000001,-0.0143515505,-0.0330433685,-0.030146457499999998,-0.026057409,-0.0164466015,-0.053462672499999996,0.01185499725,0.028812123999999998,-0.0368386395,0.0232451215,-0.01108514465,-0.007439916499999999,-0.033431644499999996,0.046813843,0.01008481285,-0.0181223735,-0.0159577681,-0.0033102907500000005,-0.034488053000000005,0.06935485,0.0379800925,0.0325609615,-0.0733929885,0.024054515999999998,-0.09723248000000001,-0.0443772245,-0.021324694499999998,0.0103385705,0.055247911499999997,-0.0556644675,-0.0431905165,-0.039941268,-0.0346950015,-0.0587926,-0.0163988131,0.027000692,-0.00154901115,-0.018861745,0.016058999650000003,0.0137215953,0.033349326,0.01698440525,-0.00412060125,0.0015065590000000002,0.046087469000000006,0.054306643,-0.033629904,0.002419951,0.0393065175,-0.072762359,-0.05446597,0.008974321,-0.068849205,0.105380715,0.08792094249999999,-0.01965546775,-0.0735049575,0.011614979,-0.01172863955,0.019627030900000002,0.023582547000000002,0.029378214,-0.00484438543,-0.04092678,0.0227958605,0.00478901805,-0.0441016925,0.009984607,-0.0034369715,0.08558102000000001,-0.0366258695,-0.07055201,0.0458065275,0.029891107,0.0032485696499999998,0.0416649925,-0.006772525850000001,0.0266587225,-0.037922555499999996,0.0450138765,-0.00031528125,-0.024871631499999998,0.0259149825,0.008122148,0.0082324845,-0.01057201585,-0.02999843425,-0.068303585,-0.00490130815,0.030564248999999998,-0.053122275,-0.029750361000000003,-0.022997867999999998,-0.0175231255,0.031132409,0.0018893698000000002,-0.0022311989,0.0064160765,-0.04024497,-0.105197768,0.00480071625,0.0125502665,0.0240250565,-0.03232351,0.054054075,-0.00419136315,-0.0627546015,-0.048507734999999996,-0.0187147505,0.0251195347,0.0294110515,0.11645791,0.039039331499999996,0.0519267515,-0.0652619505,-0.0144988885,0.134864065,-0.0372120825,-0.036438243,-0.0330626875,-0.031956766,-0.094570108,-0.0443558225,0.09487513,0.0673500685,0.0307305825,0.010350817415,-0.052975773500000004,-0.021578872,0.057038174999999997,-0.0035335995999999995,0.0053534458,0.0302415495,-0.061024507000000006,0.0104371503,0.000001594999999999635,-0.089924738,-0.00963383915,-0.051207721,0.062871485,-0.0676942725,-0.01274987815,-0.033068996,-0.0032600508500000005,-0.0482352155,-0.0400539235,0.04832185,0.0171953418,0.0162546295,0.052375985,0.043627676500000004,-0.060105043999999996,0.0125964665,0.0040247465,-0.0207374005,-0.0084052233,-0.031770002,-0.02711991625,0.0463117675,-0.0348302765,-0.0784637,0.0499060845]"),
		SubjUID:         SubjectFixtures.Get("actor-1").SubjUID,
		FaceSrc:         "",
		SampleRadius:    0.3239983399779298,
		Samples:         4,
		Collisions:      0,
		CollisionRadius: 0,
		CreatedAt:       TimeStamp(),
		UpdatedAt:       TimeStamp(),
	},
}
View Source
var Faceless = []string{""}

Faceless can be used as argument to match unmatched face markers.

View Source
var FileFixtures = FileMap{
	"exampleFileName.jpg": {
		ID:              1000000,
		Photo:           PhotoFixtures.Pointer("19800101_000002_D640C559"),
		PhotoID:         PhotoFixtures.Pointer("19800101_000002_D640C559").ID,
		PhotoUID:        PhotoFixtures.Pointer("19800101_000002_D640C559").PhotoUID,
		InstanceID:      "a698ac56-6e7e-42b9-9c3e-a79ec96087uy",
		FileUID:         "fs6sg6bw45bnlqdw",
		FileName:        "2790/07/27900704_070228_D6D51B6C.jpg",
		FileRoot:        RootOriginals,
		OriginalName:    "Vacation/exampleFileNameOriginal.jpg",
		FileHash:        "2cad9168fa6acc5c5c2965ddf6ec465ca42fd818",
		FileSize:        4278906,
		FileCodec:       "jpeg",
		FileType:        "jpg",
		FileMime:        "image/jpg",
		FilePrimary:     true,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    false,
		FileDuration:    0,
		FileWidth:       3648,
		FileHeight:      2736,
		FileOrientation: 0,
		FileProjection:  "equirectangular",
		FileAspectRatio: 1.33333,
		FileMainColor:   "green",
		FileColors:      "929299991",
		FileLuminance:   "8836BD496",
		FileDiff:        968,
		FileChroma:      25,
		FileError:       "",
		ModTime:         time.Date(2020, 3, 6, 2, 6, 51, 0, time.UTC).Unix(),
		Share: []FileShare{
			FileShareFixtures.Get("FileShare1", 0, 0, ""),
			FileShareFixtures.Get("FileShare2", 0, 0, ""),
		},
		Sync:      []FileSync{},
		CreatedAt: time.Date(2009, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn: 414671279,
		UpdatedAt: time.Date(2008, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn: 847648638,
		DeletedAt: nil,
	},
	"exampleDNGFile.dng": {
		ID:              1000001,
		Photo:           PhotoFixtures.Pointer("Photo01"),
		PhotoID:         PhotoFixtures.Pointer("Photo01").ID,
		PhotoUID:        PhotoFixtures.Pointer("Photo01").PhotoUID,
		InstanceID:      "a698ac56-6e7e-42b9-9c3e-a79ec96080aa",
		FileUID:         "fs6sg6bw45bn0001",
		FileName:        "2790/02/Photo01.dng",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "3cad9168fa6acc5c5c2965ddf6ec465ca42fd818",
		FileSize:        661858,
		FileCodec:       "jpeg",
		FileType:        "raw",
		MediaType:       string(media.Raw),
		FileMime:        "image/DNG",
		FilePrimary:     false,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    true,
		FileDuration:    0,
		FileWidth:       1200,
		FileHeight:      1600,
		FileOrientation: 6,
		FileProjection:  "",
		FileAspectRatio: 0.75,
		FileMainColor:   "gold",
		FileColors:      "5552E2222",
		FileLuminance:   "444428399",
		FileDiff:        747,
		FileChroma:      12,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2019, 3, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2009, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       414671279,
		UpdatedAt:       time.Date(2020, 3, 28, 14, 6, 0, 0, time.UTC),
		UpdatedIn:       847648638,
		DeletedAt:       nil,
	},
	"exampleXmpFile.xmp": {
		ID:              1000002,
		Photo:           PhotoFixtures.Pointer("Photo01"),
		PhotoID:         PhotoFixtures.Pointer("Photo01").ID,
		PhotoUID:        PhotoFixtures.Pointer("Photo01").PhotoUID,
		InstanceID:      "a698ac56-6e7e-42b9-9c3e-a79ec96080ab",
		FileUID:         "fs6sg6bw45bn0003",
		FileName:        "2790/02/Photo01.xmp",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "ocad9168fa6acc5c5c2965ddf6ec465ca42fd818",
		FileSize:        858,
		FileCodec:       "",
		FileType:        "xmp",
		MediaType:       string(media.Sidecar),
		FileMime:        "",
		FilePrimary:     false,
		FileSidecar:     true,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    false,
		FileDuration:    0,
		FileWidth:       0,
		FileHeight:      0,
		FileOrientation: 0,
		FileProjection:  "",
		FileAspectRatio: 1,
		FileMainColor:   "",
		FileColors:      "",
		FileLuminance:   "",
		FileDiff:        0,
		FileChroma:      0,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2019, 3, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2009, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       12361491,
		UpdatedAt:       time.Date(2020, 3, 28, 14, 6, 0, 0, time.UTC),
		UpdatedIn:       9537701,
		DeletedAt:       nil,
	},
	"bridge.jpg": {
		ID:              1000003,
		Photo:           PhotoFixtures.Pointer("Photo04"),
		PhotoID:         PhotoFixtures.Pointer("Photo04").ID,
		PhotoUID:        PhotoFixtures.Pointer("Photo04").PhotoUID,
		InstanceID:      "a698ac56-6e7e-42b9-9c3e-a79ec96080ac",
		FileUID:         "fs6sg6bw45bn0004",
		FileName:        "Germany/bridge.jpg",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "pcad9168fa6acc5c5c2965ddf6ec465ca42fd818",
		FileSize:        961858,
		FileCodec:       "jpeg",
		FileType:        "jpg",
		MediaType:       string(media.Image),
		FileMime:        "image/jpg",
		FilePrimary:     true,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    true,
		FileDuration:    0,
		FileWidth:       1200,
		FileHeight:      1600,
		FileOrientation: 6,
		FileProjection:  "",
		FileAspectRatio: 0.75,
		FileMainColor:   "magenta",
		FileColors:      "225221C1E",
		FileLuminance:   "DC42844C8",
		FileDiff:        986,
		FileChroma:      32,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2017, 2, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       12361491,
		UpdatedAt:       time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       12361490,
		DeletedAt:       nil,
	},
	"reunion.jpg": {
		ID:              1000004,
		Photo:           PhotoFixtures.Pointer("Photo05"),
		PhotoID:         PhotoFixtures.Pointer("Photo05").ID,
		PhotoUID:        PhotoFixtures.Pointer("Photo05").PhotoUID,
		InstanceID:      "",
		FileUID:         "fs6sg6bw45bn0005",
		FileName:        "2015/11/20151101_000000_51C501B5.jpg",
		FileRoot:        RootOriginals,
		OriginalName:    "2015/11/reunion.jpg",
		FileHash:        "acad9168fa6acc5c5c2965ddf6ec465ca42fd818",
		FileSize:        81858,
		FileCodec:       "jpeg",
		FileType:        "jpg",
		MediaType:       string(media.Image),
		FileMime:        "image/jpg",
		FilePrimary:     true,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    true,
		FileDuration:    0,
		FileWidth:       1200,
		FileHeight:      1600,
		FileOrientation: 6,
		FileProjection:  "",
		FileAspectRatio: 0.75,
		FileMainColor:   "blue",
		FileColors:      "266111000",
		FileLuminance:   "DC42844C8",
		FileDiff:        800,
		FileChroma:      4,
		FileError:       "Error",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2017, 1, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       12361491,
		UpdatedAt:       time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       2361491,
		DeletedAt:       nil,
	},
	"Quality1FavoriteTrue.jpg": {
		ID:              1000005,
		Photo:           PhotoFixtures.Pointer("Photo17"),
		PhotoID:         PhotoFixtures.Pointer("Photo17").ID,
		PhotoUID:        PhotoFixtures.Pointer("Photo17").PhotoUID,
		InstanceID:      "a698ac56-6e7e-42b9-9c3e-a79ec96080ad",
		FileUID:         "fs6sg6bw45bn0006",
		FileName:        "1990/04/Quality1FavoriteTrue.jpg",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "acad9168fa6acc5c5c2965ddf6ec465ca42fd819",
		FileSize:        500,
		FileCodec:       "jpeg",
		FileType:        "jpg",
		MediaType:       string(media.Image),
		FileMime:        "image/jpg",
		FilePrimary:     true,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    true,
		FileDuration:    0,
		FileWidth:       1200,
		FileHeight:      1600,
		FileOrientation: 6,
		FileProjection:  "",
		FileAspectRatio: 0.75,
		FileMainColor:   "blue",
		FileColors:      "266111000",
		FileLuminance:   "DC42844C8",
		FileDiff:        800,
		FileChroma:      26,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2017, 1, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       2361491,
		UpdatedAt:       time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       2361498,
		DeletedAt:       nil,
	},
	"missing.jpg": {
		ID:              1000006,
		Photo:           PhotoFixtures.Pointer("Photo15"),
		PhotoID:         PhotoFixtures.Pointer("Photo15").ID,
		PhotoUID:        PhotoFixtures.Pointer("Photo15").PhotoUID,
		InstanceID:      "a698ac56-6e7e-42b9-9c3e-a79ec96080ae",
		FileUID:         "fs6sg6bw45bn0007",
		FileName:        "1990/missing.jpg",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "acad9168fa6acc5c5c2965ddf6ec465ca42fd819",
		FileSize:        500,
		FileCodec:       "jpeg",
		FileType:        "jpg",
		MediaType:       string(media.Image),
		FileMime:        "image/jpg",
		FilePrimary:     true,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     true,
		FilePortrait:    true,
		FileDuration:    0,
		FileWidth:       1200,
		FileHeight:      1600,
		FileOrientation: 6,
		FileProjection:  "",
		FileAspectRatio: 0.75,
		FileMainColor:   "blue",
		FileColors:      "266111000",
		FileLuminance:   "DC42844C8",
		FileDiff:        800,
		FileChroma:      26,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2017, 1, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       2361491,
		UpdatedAt:       time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       2361491,
		DeletedAt:       nil,
	},
	"Photo18.jpg": {
		ID:              1000007,
		Photo:           nil,
		PhotoID:         1000018,
		PhotoUID:        "ps6sg6be2lvl0y25",
		InstanceID:      "a698ac56-6e7e-42b9-9c3e-a79ec96080af",
		FileUID:         "ft6es39w45bnlqdw",
		FileName:        "Archived/Photo18.jpg",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "acad9168fa6acc5c5c2965ddf6ec465ca42fd820",
		FileSize:        500,
		FileCodec:       "jpeg",
		FileType:        "jpg",
		MediaType:       string(media.Image),
		FileMime:        "image/jpg",
		FilePrimary:     true,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    true,
		FileDuration:    0,
		FileWidth:       1200,
		FileHeight:      1600,
		FileOrientation: 6,
		FileProjection:  "",
		FileAspectRatio: 0.75,
		FileMainColor:   "green",
		FileColors:      "266111000",
		FileLuminance:   "DC42844C8",
		FileDiff:        800,
		FileChroma:      0,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2017, 1, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       2361491,
		UpdatedAt:       time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       8361491,
		DeletedAt:       nil,
	},
	"Video.mp4": {
		ID:              1000008,
		Photo:           PhotoFixtures.Pointer("Photo10"),
		PhotoID:         PhotoFixtures.Pointer("Photo10").ID,
		PhotoUID:        PhotoFixtures.Pointer("Photo10").PhotoUID,
		InstanceID:      "a698ac56-6e7e-42b9-9c3e-a79ec96080ag",
		FileUID:         "fs6sg6bw45bn0007",
		FileName:        "Holiday/Video.mp4",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "acad9168fa6acc5c5c2965ddf6ec465ca42fd831",
		FileSize:        7799202,
		FileCodec:       "avc1",
		FileType:        "mp4",
		MediaType:       string(media.Video),
		FileMime:        "video/mp4",
		FilePrimary:     false,
		FileSidecar:     false,
		FileVideo:       true,
		FileMissing:     false,
		FilePortrait:    true,
		FileDuration:    17000000000,
		FileWidth:       1200,
		FileHeight:      1600,
		FileOrientation: 6,
		FileProjection:  "",
		FileAspectRatio: 0.75,
		FileMainColor:   "green",
		FileColors:      "266111000",
		FileLuminance:   "DC42844C8",
		FileDiff:        800,
		FileChroma:      0,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2017, 1, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       9359616,
		UpdatedAt:       time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"Video.jpg": {
		ID:              1000014,
		Photo:           PhotoFixtures.Pointer("Photo10"),
		PhotoID:         PhotoFixtures.Pointer("Photo10").ID,
		PhotoUID:        PhotoFixtures.Pointer("Photo10").PhotoUID,
		InstanceID:      "",
		FileUID:         "fs6sg6bw45bn0008",
		FileName:        "Holiday/Video.jpg",
		FileRoot:        RootSidecar,
		OriginalName:    "",
		FileHash:        "abgt9168fa6acc5c5c2965ddf6ec465ca42fd831",
		FileSize:        7799202,
		FileCodec:       "jpeg",
		FileType:        "jpg",
		MediaType:       string(media.Image),
		FileMime:        "image/jpg",
		FilePrimary:     true,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    true,
		FileDuration:    0,
		FileWidth:       1200,
		FileHeight:      1600,
		FileOrientation: 6,
		FileProjection:  "",
		FileAspectRatio: 0.75,
		FileMainColor:   "green",
		FileColors:      "266111000",
		FileLuminance:   "DC42844C8",
		FileDiff:        800,
		FileChroma:      0,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2017, 1, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       9359616,
		UpdatedAt:       time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"VideoWithError.mp4": {
		ID:              1000009,
		Photo:           PhotoFixtures.Pointer("Photo10"),
		PhotoID:         PhotoFixtures.Pointer("Photo10").ID,
		PhotoUID:        PhotoFixtures.Pointer("Photo10").PhotoUID,
		InstanceID:      "a698ac56-6e7e-42b9-9c3e-a79ec96080ah",
		FileUID:         "fs6sg6bw45bn0009",
		FileName:        "Holiday/VideoError.mp4",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "acad9168fa6acc5c5c2965ddf6ec465ca42fd832",
		FileSize:        500,
		FileCodec:       "avc1",
		FileType:        "mp4",
		MediaType:       string(media.Video),
		FileMime:        "video/mp4",
		FilePrimary:     false,
		FileSidecar:     false,
		FileVideo:       true,
		FileMissing:     false,
		FilePortrait:    true,
		FileDuration:    17000000000,
		FileWidth:       1200,
		FileHeight:      1600,
		FileOrientation: 6,
		FileProjection:  "",
		FileAspectRatio: 0.75,
		FileMainColor:   "green",
		FileColors:      "266111000",
		FileLuminance:   "DC42844C8",
		FileDiff:        800,
		FileChroma:      0,
		FileError:       "Error",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2017, 1, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       935962,
		UpdatedAt:       time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"bridge1.jpg": {
		ID:              1000010,
		Photo:           PhotoFixtures.Pointer("Photo02"),
		PhotoID:         PhotoFixtures.Pointer("Photo02").ID,
		PhotoUID:        PhotoFixtures.Pointer("Photo02").PhotoUID,
		InstanceID:      "a698ac56-6e7e-42b9-9c3e-a79ec96080ai",
		FileUID:         "fs6sg6bq45bnlqd0",
		FileName:        "London/bridge1.jpg",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "pcad9168fa6acc5c5c2965ddf6ec465ca42fd828",
		FileSize:        961851,
		FileCodec:       "jpeg",
		FileType:        "jpg",
		MediaType:       string(media.Image),
		FileMime:        "image/jpg",
		FilePrimary:     true,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    true,
		FileDuration:    0,
		FileWidth:       1200,
		FileHeight:      1600,
		FileOrientation: 6,
		FileProjection:  "",
		FileAspectRatio: 0.75,
		FileMainColor:   "magenta",
		FileColors:      "225221C1E",
		FileLuminance:   "DC42844C8",
		FileDiff:        986,
		FileChroma:      32,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2017, 2, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2009, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       935962,
		UpdatedAt:       time.Date(2010, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"bridge2.jpg": {
		ID:              1000011,
		Photo:           PhotoFixtures.Pointer("Photo03"),
		PhotoID:         PhotoFixtures.Pointer("Photo03").ID,
		PhotoUID:        PhotoFixtures.Pointer("Photo03").PhotoUID,
		InstanceID:      "a698ac56-6e7e-42b9-9c3e-a79ec96080aj",
		FileUID:         "fs6sg6bw15bnlqdw",
		FileName:        "1990/04/bridge2.jpg",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "pcad9168fa6acc5c5c2965adf6ec465ca42fd818",
		FileSize:        921858,
		FileCodec:       "jpeg",
		FileType:        "jpg",
		MediaType:       string(media.Image),
		FileMime:        "image/jpg",
		FilePrimary:     true,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    true,
		FileDuration:    0,
		FileWidth:       1200,
		FileHeight:      1600,
		FileOrientation: 6,
		FileProjection:  "",
		FileAspectRatio: 0.75,
		FileMainColor:   "magenta",
		FileColors:      "225221C1E",
		FileLuminance:   "DC42844C8",
		FileDiff:        986,
		FileChroma:      32,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2017, 2, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2009, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       935962,
		UpdatedAt:       time.Date(2008, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"bridge3.jpg": {
		ID:              1000012,
		Photo:           PhotoFixtures.Pointer("Photo03"),
		PhotoID:         PhotoFixtures.Pointer("Photo03").ID,
		PhotoUID:        PhotoFixtures.Pointer("Photo03").PhotoUID,
		InstanceID:      "a698ac56-6e7e-42b9-9c3e-a79ec96080aj",
		FileUID:         "fs6sg6bwhhbnlqdn",
		FileName:        "London/bridge3.jpg",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "pcad9168fa6acc5c5ba965adf6ec465ca42fd818",
		FileSize:        921851,
		FileCodec:       "jpeg",
		FileType:        "jpg",
		MediaType:       string(media.Image),
		FileMime:        "image/jpg",
		FilePrimary:     false,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    true,
		FileDuration:    0,
		FileWidth:       1200,
		FileHeight:      1600,
		FileOrientation: 6,
		FileProjection:  "",
		FileAspectRatio: 0.75,
		FileMainColor:   "magenta",
		FileColors:      "225221C1E",
		FileLuminance:   "DC42844C8",
		FileDiff:        986,
		FileChroma:      32,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2017, 2, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2009, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       935962,
		UpdatedAt:       time.Date(2008, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"bridge2.mp4": {
		ID:              1000013,
		Photo:           PhotoFixtures.Pointer("Photo03"),
		PhotoID:         PhotoFixtures.Pointer("Photo03").ID,
		PhotoUID:        PhotoFixtures.Pointer("Photo03").PhotoUID,
		InstanceID:      "a698ac56-6e7e-42b9-9c3e-a79ec96080al",
		FileUID:         "fs6sg6bwhhbnlqdy",
		FileName:        "1990/04/bridge2.mp4",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "pcad9168fa6acc5c5ba965adf6ec465ca42fd819",
		FileSize:        921851,
		FileCodec:       "avc1",
		FileType:        "mp4",
		MediaType:       string(media.Video),
		FileMime:        "image/mp4",
		FilePrimary:     false,
		FileSidecar:     false,
		FileVideo:       true,
		FileMissing:     false,
		FilePortrait:    true,
		FileDuration:    17000000000,
		FileWidth:       1200,
		FileHeight:      1600,
		FileOrientation: 6,
		FileProjection:  "",
		FileAspectRatio: 0.75,
		FileMainColor:   "magenta",
		FileColors:      "225221C1E",
		FileLuminance:   "DC42844C8",
		FileDiff:        986,
		FileChroma:      32,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2017, 2, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2009, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       935962,
		UpdatedAt:       time.Date(2008, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"Photo19.jpg": {
		ID:              1000019,
		Photo:           PhotoFixtures.Pointer("Photo19"),
		PhotoID:         PhotoFixtures.Pointer("Photo19").ID,
		PhotoUID:        PhotoFixtures.Pointer("Photo19").PhotoUID,
		InstanceID:      "a698ac56-6e7e-42b9-9c3e-a79ec96080am",
		FileUID:         "fs6sg6bqhhinlqdn",
		FileName:        "1990/04/Photo19.jpg",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "pcad9a68fa6acc5c5ba965adf6ec465ca42fd811",
		FileSize:        921831,
		FileCodec:       "jpeg",
		FileType:        "jpg",
		MediaType:       string(media.Image),
		FileMime:        "image/jpg",
		FilePrimary:     true,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    true,
		FileDuration:    0,
		FileWidth:       1200,
		FileHeight:      1600,
		FileOrientation: 6,
		FileProjection:  "",
		FileAspectRatio: 0.75,
		FileMainColor:   "magenta",
		FileColors:      "225221C1E",
		FileLuminance:   "DC42844C8",
		FileDiff:        986,
		FileChroma:      32,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2020, 2, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2009, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       935962,
		UpdatedAt:       time.Date(2010, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"Photo25.jpg": {
		ID:              1000020,
		Photo:           PhotoFixtures.Pointer("Photo25"),
		PhotoID:         PhotoFixtures.Pointer("Photo25").ID,
		PhotoUID:        PhotoFixtures.Pointer("Photo25").PhotoUID,
		InstanceID:      "a698ac56-6e7e-42b9-9c3e-a79ec96080an",
		FileUID:         "fs6sg6bqhhinlplk",
		FileName:        "2007/12/PhotoWithEditedAt.jpg",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "pcad9a68fa6acc5c5ba965adf6ec465ca42fd887",
		FileSize:        921831,
		FileCodec:       "jpeg",
		FileType:        "jpg",
		MediaType:       string(media.Image),
		FileMime:        "image/jpg",
		FilePrimary:     true,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    false,
		FileDuration:    0,
		FileWidth:       2200,
		FileHeight:      1100,
		FileOrientation: 6,
		FileProjection:  "",
		FileAspectRatio: 2,
		FileMainColor:   "magenta",
		FileColors:      "225221C1E",
		FileLuminance:   "DC42844C8",
		FileDiff:        986,
		FileChroma:      32,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2008, 2, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2007, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       935962,
		UpdatedAt:       time.Date(2007, 3, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"Photo25_2.jpg": {
		ID:              1000021,
		Photo:           PhotoFixtures.Pointer("Photo25"),
		PhotoID:         PhotoFixtures.Pointer("Photo25").ID,
		PhotoUID:        PhotoFixtures.Pointer("Photo25").PhotoUID,
		InstanceID:      "a698ac56-6e7e-42b9-9c3e-a79ec96080ao",
		FileUID:         "fs6sg6bqhhinlpld",
		FileName:        "2007/12/PhotoWithEditedAt_2.jpg",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "pcad9a68fa6acc5c5ba965adf6ec465ca42fd895",
		FileSize:        900,
		FileCodec:       "jpeg",
		FileType:        "jpg",
		MediaType:       string(media.Image),
		FileMime:        "image/jpg",
		FilePrimary:     true,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    false,
		FileDuration:    0,
		FileWidth:       2200,
		FileHeight:      1100,
		FileOrientation: 6,
		FileProjection:  "",
		FileAspectRatio: 2,
		FileMainColor:   "magenta",
		FileColors:      "225221C1E",
		FileLuminance:   "DC42844C8",
		FileDiff:        986,
		FileChroma:      32,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2008, 2, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       935962,
		UpdatedAt:       time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"Photo27.jpg": {
		ID:              1000022,
		Photo:           PhotoFixtures.Pointer("Photo27"),
		PhotoID:         PhotoFixtures.Pointer("Photo27").ID,
		PhotoUID:        PhotoFixtures.Pointer("Photo27").PhotoUID,
		InstanceID:      "",
		FileUID:         "fs6sg6bqhhinlple",
		FileName:        "2000/12/PhotoToBeBatchApproved2.jpg",
		FileRoot:        RootSidecar,
		OriginalName:    "",
		FileHash:        "pcad9a68fa6acc5c5ba965adf6ec465ca42fd896",
		FileSize:        900,
		FileCodec:       "",
		FileType:        "jpg",
		MediaType:       string(media.Image),
		FileMime:        "image/jpg",
		FilePrimary:     true,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    false,
		FileDuration:    0,
		FileWidth:       200,
		FileHeight:      1100,
		FileOrientation: 6,
		FileProjection:  "",
		FileAspectRatio: 2,
		FileMainColor:   "magenta",
		FileColors:      "225221C1E",
		FileLuminance:   "DC42844C8",
		FileDiff:        986,
		FileChroma:      32,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2008, 2, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2011, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       935962,
		UpdatedAt:       time.Date(2011, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"Photo27.mp4": {
		ID:              1000023,
		Photo:           PhotoFixtures.Pointer("Photo27"),
		PhotoID:         PhotoFixtures.Pointer("Photo27").ID,
		PhotoUID:        PhotoFixtures.Pointer("Photo27").PhotoUID,
		InstanceID:      "",
		FileUID:         "fs6sg6bqhhinlplf",
		FileName:        "2000/12/PhotoToBeBatchApproved2.mp4",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "pcad9a68fa6acc5c5ba965adf6ec465ca42fd897",
		FileSize:        900,
		FileCodec:       "avc1",
		FileType:        "mp4",
		MediaType:       string(media.Video),
		FileMime:        "video/mp4",
		FilePrimary:     false,
		FileSidecar:     false,
		FileVideo:       true,
		FileMissing:     false,
		FilePortrait:    false,
		FileDuration:    1000000000,
		FileWidth:       200,
		FileHeight:      1100,
		FileOrientation: 6,
		FileProjection:  "",
		FileAspectRatio: 2,
		FileMainColor:   "magenta",
		FileColors:      "225221C1E",
		FileLuminance:   "DC42844C8",
		FileDiff:        986,
		FileChroma:      32,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2008, 2, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2011, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       935962,
		UpdatedAt:       time.Date(2011, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"Photo24.jpg": {
		ID:              1000024,
		Photo:           PhotoFixtures.Pointer("Photo24"),
		PhotoID:         PhotoFixtures.Pointer("Photo24").ID,
		PhotoUID:        PhotoFixtures.Pointer("Photo24").PhotoUID,
		InstanceID:      "",
		FileUID:         "fs6sg6bqhhinlplg",
		FileName:        "2020/vacation/PhotoMerge2.JPG",
		FileRoot:        RootSidecar,
		OriginalName:    "",
		FileHash:        "pcad9a68fa6acc5c5ba965adf6ec465ca42fd898",
		FileSize:        900,
		FileCodec:       "jpeg",
		FileType:        "jpg",
		MediaType:       string(media.Image),
		FileMime:        "image/jpg",
		FilePrimary:     true,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    false,
		FileDuration:    0,
		FileWidth:       200,
		FileHeight:      1100,
		FileOrientation: 6,
		FileProjection:  "",
		FileAspectRatio: 2,
		FileMainColor:   "red",
		FileColors:      "225221C1E",
		FileLuminance:   "DC42844C8",
		FileDiff:        986,
		FileChroma:      32,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2020, 12, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       935962,
		UpdatedAt:       time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"Photo24.cr2": {
		ID:              1000025,
		Photo:           PhotoFixtures.Pointer("Photo24"),
		PhotoID:         PhotoFixtures.Pointer("Photo24").ID,
		PhotoUID:        PhotoFixtures.Pointer("Photo24").PhotoUID,
		InstanceID:      "",
		FileUID:         "fs6sg6bqhhinlplh",
		FileName:        "2020/vacation/PhotoMerge2.CR2",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "pcad9a68fa6acc5c5ba965adf6ec465ca42fd899",
		FileSize:        900,
		FileCodec:       "jpeg",
		FileType:        "raw",
		MediaType:       string(media.Raw),
		FileMime:        "image/x-canon-cr2",
		FilePrimary:     false,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    false,
		FileDuration:    0,
		FileWidth:       200,
		FileHeight:      1100,
		FileOrientation: 6,
		FileProjection:  "",
		FileAspectRatio: 2,
		FileMainColor:   "",
		FileColors:      "",
		FileLuminance:   "",
		FileDiff:        0,
		FileChroma:      0,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2020, 12, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       935962,
		UpdatedAt:       time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"Photo23.jpg": {
		ID:              1000026,
		Photo:           PhotoFixtures.Pointer("Photo23"),
		PhotoID:         PhotoFixtures.Pointer("Photo23").ID,
		PhotoUID:        PhotoFixtures.Pointer("Photo23").PhotoUID,
		InstanceID:      "",
		FileUID:         "fs6sg6bqhhinlpli",
		FileName:        "2020/vacation/PhotoMerge.jpg",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "pcad9a68fa6acc5c5ba965adf6ec465ca42fd911",
		FileSize:        900,
		FileCodec:       "jpeg",
		FileType:        "jpg",
		MediaType:       string(media.Image),
		FileMime:        "image/jpg",
		FilePrimary:     true,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    false,
		FileDuration:    0,
		FileWidth:       200,
		FileHeight:      1100,
		FileOrientation: 6,
		FileProjection:  "",
		FileAspectRatio: 2,
		FileMainColor:   "red",
		FileColors:      "225221C1E",
		FileLuminance:   "DC42844C8",
		FileDiff:        986,
		FileChroma:      32,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2020, 12, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       935962,
		UpdatedAt:       time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"Photo22.jpg": {
		ID:              1000027,
		Photo:           PhotoFixtures.Pointer("Photo22"),
		PhotoID:         PhotoFixtures.Pointer("Photo22").ID,
		PhotoUID:        PhotoFixtures.Pointer("Photo22").PhotoUID,
		InstanceID:      "",
		FileUID:         "fs6sg6bqhhinlplj",
		FileName:        "Mexico-With-Family/Photo22.jpg",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "pcad9a68fa6acc5c5ba965adf6ec465ca42fd912",
		FileSize:        900,
		FileCodec:       "jpeg",
		FileType:        "jpg",
		FileMime:        "image/jpg",
		FilePrimary:     true,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    false,
		FileDuration:    0,
		FileWidth:       200,
		FileHeight:      1100,
		FileOrientation: 6,
		FileProjection:  "",
		FileAspectRatio: 2,
		FileMainColor:   "red",
		FileColors:      "225221C1E",
		FileLuminance:   "DC42844C8",
		FileDiff:        986,
		FileChroma:      32,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2020, 12, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2010, 1, 1, 8, 0, 0, 0, time.UTC),
		CreatedIn:       935962,
		UpdatedAt:       time.Date(2010, 1, 1, 8, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"Photo22-stack.jpg": {
		ID:              1000028,
		Photo:           PhotoFixtures.Pointer("Photo22"),
		PhotoID:         PhotoFixtures.Pointer("Photo22").ID,
		PhotoUID:        PhotoFixtures.Pointer("Photo22").PhotoUID,
		InstanceID:      "",
		FileUID:         "fs6sg6bqhhinlolk",
		FileName:        "Mexico-Favorites/IMG-1234.jpg",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "pcad9a68fa6acc5c5ba965adf6ec465ca42fd913",
		FileSize:        900,
		FileCodec:       "jpeg",
		FileType:        "jpg",
		FileMime:        "image/jpg",
		FilePrimary:     false,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    false,
		FileDuration:    0,
		FileWidth:       200,
		FileHeight:      1100,
		FileOrientation: 6,
		FileProjection:  "",
		FileAspectRatio: 2,
		FileMainColor:   "red",
		FileColors:      "225221C1E",
		FileLuminance:   "DC42844C8",
		FileDiff:        986,
		FileChroma:      32,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2020, 12, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2010, 1, 1, 8, 5, 0, 0, time.UTC),
		CreatedIn:       935962,
		UpdatedAt:       time.Date(2010, 1, 1, 8, 5, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"Photo21.mp4.jpg": {
		ID:              1000029,
		Photo:           PhotoFixtures.Pointer("Photo21"),
		PhotoID:         PhotoFixtures.Pointer("Photo21").ID,
		PhotoUID:        PhotoFixtures.Pointer("Photo21").PhotoUID,
		InstanceID:      "",
		FileUID:         "fs6sg6bqhhinlpll",
		FileName:        "2018/01/20180101_130410_418COOO0.mp4.jpg",
		FileRoot:        RootSidecar,
		OriginalName:    "",
		FileHash:        "pcad9a68fa6acc5c5ba965adf6ec465ca42fd914",
		FileSize:        900,
		FileCodec:       "jpeg",
		FileType:        "jpg",
		FileMime:        "image/jpg",
		FilePrimary:     true,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    false,
		FileDuration:    0,
		FileWidth:       200,
		FileHeight:      1100,
		FileOrientation: 6,
		FileProjection:  "",
		FileAspectRatio: 2,
		FileMainColor:   "red",
		FileColors:      "225221C1E",
		FileLuminance:   "DC42844C8",
		FileDiff:        986,
		FileChroma:      32,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2020, 12, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       935962,
		UpdatedAt:       time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"Photo21.mp4": {
		ID:              1000030,
		Photo:           PhotoFixtures.Pointer("Photo21"),
		PhotoID:         PhotoFixtures.Pointer("Photo21").ID,
		PhotoUID:        PhotoFixtures.Pointer("Photo21").PhotoUID,
		InstanceID:      "",
		FileUID:         "fs6sg6bqhhinlplm",
		FileName:        "2018/01/20180101_130410_418COOO0.mp4",
		FileRoot:        RootOriginals,
		OriginalName:    "my-videos/IMG_88888.MP4",
		FileHash:        "pcad9a68fa6acc5c5ba965adf6ec465ca42fd915",
		FileSize:        900,
		FileCodec:       "avc1",
		FileType:        "mp4",
		FileMime:        "video/mp4",
		FilePrimary:     false,
		FileSidecar:     false,
		FileVideo:       true,
		FileMissing:     false,
		FilePortrait:    false,
		FileDuration:    115000000000,
		FileWidth:       200,
		FileHeight:      1100,
		FileOrientation: 6,
		FileProjection:  "",
		FileAspectRatio: 2,
		FileMainColor:   "red",
		FileColors:      "225221C1E",
		FileLuminance:   "DC42844C8",
		FileDiff:        986,
		FileChroma:      32,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2020, 12, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       935962,
		UpdatedAt:       time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"FileWithoutPhoto.mp4": {
		ID:              1000031,
		PhotoUID:        "",
		InstanceID:      "",
		FileUID:         "fs6sg6bqhhinlpln",
		FileName:        "FileWithoutPhoto.mp4",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "pcad9a68fa6acc5c5ba965adf6ec465ca42fd916",
		FileSize:        900,
		FileCodec:       "avc1",
		FileType:        "mp4",
		FileMime:        "video/mp4",
		FilePrimary:     false,
		FileSidecar:     false,
		FileVideo:       true,
		FileMissing:     false,
		FilePortrait:    false,
		FileDuration:    115000000000,
		FileWidth:       200,
		FileHeight:      1100,
		FileOrientation: 6,
		FileProjection:  "",
		FileAspectRatio: 2,
		FileMainColor:   "red",
		FileColors:      "225221C1E",
		FileLuminance:   "DC42844C8",
		FileDiff:        986,
		FileChroma:      32,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2020, 12, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       935962,
		UpdatedAt:       time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"Photo06.png": {
		ID:              1000032,
		Photo:           PhotoFixtures.Pointer("Photo06"),
		PhotoID:         PhotoFixtures.Pointer("Photo06").ID,
		PhotoUID:        PhotoFixtures.Pointer("Photo06").PhotoUID,
		InstanceID:      "",
		FileUID:         "fs6sg6bqhhinlplo",
		FileName:        "2016/11/Photo06.png",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "pcad9a68fa6acc5c5ba965adf6ec465ca42fd917",
		FileSize:        7799202,
		FileCodec:       "deflate/inflate",
		FileType:        "png",
		FileMime:        "image/png",
		FilePrimary:     false,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    true,
		FileDuration:    0,
		FileWidth:       640,
		FileHeight:      1136,
		FileOrientation: 1,
		FileProjection:  "",
		FileAspectRatio: 0.56,
		FileMainColor:   "",
		FileColors:      "",
		FileLuminance:   "",
		FileDiff:        0,
		FileChroma:      0,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2019, 1, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       9359616,
		UpdatedAt:       time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"Photo06.jpg": {
		ID:              1000033,
		Photo:           PhotoFixtures.Pointer("Photo06"),
		PhotoID:         PhotoFixtures.Pointer("Photo06").ID,
		PhotoUID:        PhotoFixtures.Pointer("Photo06").PhotoUID,
		InstanceID:      "",
		FileUID:         "fs6sg6bqhhinlplp",
		FileName:        "2016/11/Photo06.jpg",
		FileRoot:        RootSidecar,
		OriginalName:    "",
		FileHash:        "pcad9a68fa6acc5c5ba965adf6ec465ca42fd918",
		FileSize:        199202,
		FileCodec:       "",
		FileType:        "jpg",
		FileMime:        "image/jpeg",
		FilePrimary:     true,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    true,
		FileDuration:    0,
		FileWidth:       640,
		FileHeight:      1136,
		FileOrientation: 1,
		FileProjection:  "",
		FileAspectRatio: 0.56,
		FileMainColor:   "white",
		FileColors:      "44444E449",
		FileLuminance:   "FFFFF2FF9",
		FileDiff:        1022,
		FileChroma:      8,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2019, 1, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       9359616,
		UpdatedAt:       time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"Photo07.heic": {
		ID:              1000034,
		Photo:           PhotoFixtures.Pointer("Photo07"),
		PhotoID:         PhotoFixtures.Pointer("Photo07").ID,
		PhotoUID:        PhotoFixtures.Pointer("Photo07").PhotoUID,
		InstanceID:      "",
		FileUID:         "fs6sg6bqhhinlplq",
		FileName:        "2016/11/Photo07.heic",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "pcad9a68fa6acc5c5ba965adf6ec465ca42fd918",
		FileSize:        199202,
		FileCodec:       "heic",
		FileType:        "heif",
		FileMime:        "image/heif",
		FilePrimary:     false,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    true,
		FileDuration:    0,
		FileWidth:       640,
		FileHeight:      1136,
		FileOrientation: 1,
		FileProjection:  "",
		FileAspectRatio: 0.56,
		FileMainColor:   "",
		FileColors:      "",
		FileLuminance:   "",
		FileDiff:        0,
		FileChroma:      0,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2019, 1, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       9359616,
		UpdatedAt:       time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"Photo07.heic.jpg": {
		ID:              1000035,
		Photo:           PhotoFixtures.Pointer("Photo07"),
		PhotoID:         PhotoFixtures.Pointer("Photo07").ID,
		PhotoUID:        PhotoFixtures.Pointer("Photo07").PhotoUID,
		InstanceID:      "",
		FileUID:         "fs6sg6bqhhinlplr",
		FileName:        "2016/11/Photo07.heic.jpg",
		FileRoot:        RootSidecar,
		OriginalName:    "",
		FileHash:        "pcad9a68fa6acc5c5ba965adf6ec465ca42fd920",
		FileSize:        199202,
		FileCodec:       "",
		FileType:        "jpg",
		FileMime:        "image/jpeg",
		FilePrimary:     true,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    true,
		FileDuration:    0,
		FileWidth:       640,
		FileHeight:      1136,
		FileOrientation: 1,
		FileProjection:  "",
		FileAspectRatio: 0.56,
		FileMainColor:   "white",
		FileColors:      "44444E449",
		FileLuminance:   "FFFFF2FF9",
		FileDiff:        1022,
		FileChroma:      8,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2019, 1, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       9359616,
		UpdatedAt:       time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"Photo08.jpg": {
		ID:              1000036,
		Photo:           PhotoFixtures.Pointer("Photo08"),
		PhotoID:         PhotoFixtures.Pointer("Photo08").ID,
		PhotoUID:        PhotoFixtures.Pointer("Photo08").PhotoUID,
		InstanceID:      "",
		FileUID:         "fs6sg6bqhhinlpls",
		FileName:        "2016/11/Photo08.jpg",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "pcad9a68fa6acc5c5ba965adf6ec465ca42fd921",
		FileSize:        199202,
		FileCodec:       "",
		FileType:        "jpg",
		FileMime:        "image/jpeg",
		FilePrimary:     true,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    true,
		FileDuration:    0,
		FileWidth:       640,
		FileHeight:      1136,
		FileOrientation: 1,
		FileProjection:  "",
		FileAspectRatio: 0.56,
		FileMainColor:   "grey",
		FileColors:      "141101110",
		FileLuminance:   "BD9A22751",
		FileDiff:        734,
		FileChroma:      0,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2019, 1, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       9359616,
		UpdatedAt:       time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"Photo09.jpg": {
		ID:              1000036,
		Photo:           PhotoFixtures.Pointer("Photo09"),
		PhotoID:         PhotoFixtures.Pointer("Photo09").ID,
		PhotoUID:        PhotoFixtures.Pointer("Photo09").PhotoUID,
		InstanceID:      "",
		FileUID:         "fs6sg6bqhhinlplt",
		FileName:        "2016/11/Photo09.jpg",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "pcad9a68fa6acc5c5ba965adf6ec465ca42fd922",
		FileSize:        199202,
		FileCodec:       "",
		FileType:        "jpg",
		FileMime:        "image/jpeg",
		FilePrimary:     true,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    true,
		FileDuration:    0,
		FileWidth:       640,
		FileHeight:      1136,
		FileOrientation: 1,
		FileProjection:  "",
		FileAspectRatio: 0.56,
		FileMainColor:   "grey",
		FileColors:      "141101110",
		FileLuminance:   "BD9A22751",
		FileDiff:        734,
		FileChroma:      0,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2019, 1, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       9359616,
		UpdatedAt:       time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"Photo09(L).jpg": {
		ID:              1000037,
		Photo:           PhotoFixtures.Pointer("Photo09"),
		PhotoID:         PhotoFixtures.Pointer("Photo09").ID,
		PhotoUID:        PhotoFixtures.Pointer("Photo09").PhotoUID,
		InstanceID:      "",
		FileUID:         "fs6sg6bqhhinlplu",
		FileName:        "2016/11/Photo09(L).jpg",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "pcad9a68fa6acc5c5ba965adf6ec465ca42fd923",
		FileSize:        199202,
		FileCodec:       "",
		FileType:        "jpg",
		FileMime:        "image/jpeg",
		FilePrimary:     false,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    true,
		FileDuration:    0,
		FileWidth:       640,
		FileHeight:      1136,
		FileOrientation: 1,
		FileProjection:  "",
		FileAspectRatio: 0.56,
		FileMainColor:   "grey",
		FileColors:      "141101110",
		FileLuminance:   "BD9A22751",
		FileDiff:        734,
		FileChroma:      0,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2019, 1, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       9359616,
		UpdatedAt:       time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"Photo11.jpg": {
		ID:              1000038,
		Photo:           PhotoFixtures.Pointer("Photo11"),
		PhotoID:         PhotoFixtures.Pointer("Photo11").ID,
		PhotoUID:        PhotoFixtures.Pointer("Photo11").PhotoUID,
		InstanceID:      "",
		FileUID:         "fs6sg6bqhhinlplv",
		FileName:        "2016/12/Photo11.jpg",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "pcad9a68fa6acc5c5ba965adf6ec465ca42fd924",
		FileSize:        199202,
		FileCodec:       "",
		FileType:        "jpg",
		FileMime:        "image/jpeg",
		FilePrimary:     true,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    true,
		FileDuration:    0,
		FileWidth:       640,
		FileHeight:      1136,
		FileOrientation: 1,
		FileProjection:  "",
		FileAspectRatio: 0.56,
		FileMainColor:   "grey",
		FileColors:      "141101110",
		FileLuminance:   "BD9A22751",
		FileDiff:        734,
		FileChroma:      0,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2019, 1, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       9359616,
		UpdatedAt:       time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"Photo12.jpg": {
		ID:              1000039,
		Photo:           PhotoFixtures.Pointer("Photo12"),
		PhotoID:         PhotoFixtures.Pointer("Photo12").ID,
		PhotoUID:        PhotoFixtures.Pointer("Photo12").PhotoUID,
		InstanceID:      "",
		FileUID:         "fs6sg6bqhhinlplx",
		FileName:        "2016/01/Photo12.jpg",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "pcad9a68fa6acc5c5ba965adf6ec465ca42fd925",
		FileSize:        199202,
		FileCodec:       "",
		FileType:        "jpg",
		FileMime:        "image/jpeg",
		FilePrimary:     true,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    true,
		FileDuration:    0,
		FileWidth:       640,
		FileHeight:      1136,
		FileOrientation: 1,
		FileProjection:  "",
		FileAspectRatio: 0.56,
		FileMainColor:   "grey",
		FileColors:      "141101110",
		FileLuminance:   "BD9A22751",
		FileDiff:        734,
		FileChroma:      0,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2019, 1, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       9359616,
		UpdatedAt:       time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"Photo13.jpg": {
		ID:              1000040,
		Photo:           PhotoFixtures.Pointer("Photo13"),
		PhotoID:         PhotoFixtures.Pointer("Photo13").ID,
		PhotoUID:        PhotoFixtures.Pointer("Photo13").PhotoUID,
		InstanceID:      "",
		FileUID:         "fs6sg6bqhhinlply",
		FileName:        "2016/06/Photo13.jpg",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "pcad9a68fa6acc5c5ba965adf6ec465ca42fd926",
		FileSize:        199202,
		FileCodec:       "",
		FileType:        "jpg",
		FileMime:        "image/jpeg",
		FilePrimary:     true,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    false,
		FileDuration:    0,
		FileWidth:       16000,
		FileHeight:      16000,
		FileOrientation: 1,
		FileProjection:  "",
		FileAspectRatio: 1,
		FileMainColor:   "grey",
		FileColors:      "141101110",
		FileLuminance:   "BD9A22751",
		FileDiff:        734,
		FileChroma:      0,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2019, 1, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       9359616,
		UpdatedAt:       time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"Photo14.jpg": {
		ID:              1000041,
		Photo:           PhotoFixtures.Pointer("Photo14"),
		PhotoID:         PhotoFixtures.Pointer("Photo14").ID,
		PhotoUID:        PhotoFixtures.Pointer("Photo14").PhotoUID,
		InstanceID:      "",
		FileUID:         "fs6sg6bqhhinlplz",
		FileName:        "2018/11/Photo14.jpg",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "pcad9a68fa6acc5c5ba965adf6ec465ca42fd927",
		FileSize:        8202,
		FileCodec:       "",
		FileType:        "jpg",
		FileMime:        "image/jpeg",
		FilePrimary:     true,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    true,
		FileDuration:    0,
		FileWidth:       640,
		FileHeight:      1136,
		FileOrientation: 1,
		FileProjection:  "",
		FileAspectRatio: 0.56,
		FileMainColor:   "grey",
		FileColors:      "141101110",
		FileLuminance:   "BD9A22751",
		FileDiff:        534,
		FileChroma:      0,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2019, 1, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       9359616,
		UpdatedAt:       time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"Photo16.jpg": {
		ID:              1000042,
		Photo:           PhotoFixtures.Pointer("Photo16"),
		PhotoID:         PhotoFixtures.Pointer("Photo16").ID,
		PhotoUID:        PhotoFixtures.Pointer("Photo16").PhotoUID,
		InstanceID:      "",
		FileUID:         "fs6sg6bqhhinlrta",
		FileName:        "1990/Photo16.jpg",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "pcad9a68fa6acc5c5ba965adf6ec465ca42fd928",
		FileSize:        8402,
		FileCodec:       "",
		FileType:        "jpg",
		FileMime:        "image/jpeg",
		FilePrimary:     true,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    true,
		FileDuration:    0,
		FileWidth:       640,
		FileHeight:      1136,
		FileOrientation: 1,
		FileProjection:  "",
		FileAspectRatio: 0.56,
		FileMainColor:   "grey",
		FileColors:      "141101110",
		FileLuminance:   "BD9A22751",
		FileDiff:        234,
		FileChroma:      0,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2019, 1, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       9359616,
		UpdatedAt:       time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"Photo20.jpg": {
		ID:              1000043,
		Photo:           PhotoFixtures.Pointer("Photo20"),
		PhotoID:         PhotoFixtures.Pointer("Photo20").ID,
		PhotoUID:        PhotoFixtures.Pointer("Photo20").PhotoUID,
		InstanceID:      "",
		FileUID:         "fs6sg6bqhhinlrtb",
		FileName:        "1990/04/Photo20.jpg",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "pcad9a68fa6acc5c5ba965adf6ec465ca42fd929",
		FileSize:        6402,
		FileCodec:       "",
		FileType:        "jpg",
		FileMime:        "image/jpeg",
		FilePrimary:     true,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    true,
		FileDuration:    0,
		FileWidth:       640,
		FileHeight:      1136,
		FileOrientation: 1,
		FileProjection:  "",
		FileAspectRatio: 0.56,
		FileMainColor:   "grey",
		FileColors:      "141101110",
		FileLuminance:   "BD9A22751",
		FileDiff:        9934,
		FileChroma:      0,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2019, 1, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2009, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       9359616,
		UpdatedAt:       time.Date(2008, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"%photo28.jpg": {
		ID:              1000044,
		Photo:           PhotoFixtures.Pointer("%photo28"),
		PhotoID:         PhotoFixtures.Pointer("%photo28").ID,
		PhotoUID:        PhotoFixtures.Pointer("%photo28").PhotoUID,
		InstanceID:      "a698ac56-6e7e-42b9-9c3e-a79ec9608331",
		FileUID:         "fs6sg6bw15bnl331",
		FileName:        "%abc/%folderx/%photo28.jpg",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "pcad9168fa6acc5c5c2965adf6ec465ca42fd331",
		FileSize:        921858,
		FileCodec:       "jpeg",
		FileType:        "jpg",
		FileMime:        "image/jpg",
		FilePrimary:     true,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    true,
		FileDuration:    0,
		FileWidth:       1200,
		FileHeight:      1600,
		FileOrientation: 6,
		FileProjection:  "",
		FileAspectRatio: 0.75,
		FileMainColor:   "magenta",
		FileColors:      "225221C1E",
		FileLuminance:   "DC42844C8",
		FileDiff:        986,
		FileChroma:      32,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2017, 2, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2009, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       935962,
		UpdatedAt:       time.Date(2008, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"photo29%.jpg": {
		ID:              1000045,
		Photo:           PhotoFixtures.Pointer("photo29%"),
		PhotoID:         PhotoFixtures.Pointer("photo29%").ID,
		PhotoUID:        PhotoFixtures.Pointer("photo29%").PhotoUID,
		InstanceID:      "a698ac56-6e7e-42b9-9c3e-a79ec9608332",
		FileUID:         "fs6sg6bw15bnl332",
		FileName:        "abc%/folde%/photo29%.jpg",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "pcad9168fa6acc5c5c2965adf6ec465ca42fd332",
		FileSize:        921858,
		FileCodec:       "jpeg",
		FileType:        "jpg",
		FileMime:        "image/jpg",
		FilePrimary:     true,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    true,
		FileDuration:    0,
		FileWidth:       1200,
		FileHeight:      1600,
		FileOrientation: 6,
		FileProjection:  "",
		FileAspectRatio: 0.75,
		FileMainColor:   "magenta",
		FileColors:      "225221C1E",
		FileLuminance:   "DC42844C8",
		FileDiff:        986,
		FileChroma:      32,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2017, 2, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2009, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       935962,
		UpdatedAt:       time.Date(2008, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"photo%30.jpg": {
		ID:              1000046,
		Photo:           PhotoFixtures.Pointer("photo%30"),
		PhotoID:         PhotoFixtures.Pointer("photo%30").ID,
		PhotoUID:        PhotoFixtures.Pointer("photo%30").PhotoUID,
		InstanceID:      "a698ac56-6e7e-42b9-9c3e-a79ec9608333",
		FileUID:         "fs6sg6bw15bnl333",
		FileName:        "ab%c/fol%de/photo%30.jpg",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "pcad9168fa6acc5c5c2965adf6ec465ca42fd333",
		FileSize:        921858,
		FileCodec:       "jpeg",
		FileType:        "jpg",
		FileMime:        "image/jpg",
		FilePrimary:     true,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    true,
		FileDuration:    0,
		FileWidth:       1200,
		FileHeight:      1600,
		FileOrientation: 6,
		FileProjection:  "",
		FileAspectRatio: 0.75,
		FileMainColor:   "magenta",
		FileColors:      "225221C1E",
		FileLuminance:   "DC42844C8",
		FileDiff:        986,
		FileChroma:      32,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2017, 2, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2009, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       935962,
		UpdatedAt:       time.Date(2008, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"&photo31.jpg": {
		ID:              1000047,
		Photo:           PhotoFixtures.Pointer("&photo31"),
		PhotoID:         PhotoFixtures.Pointer("&photo31").ID,
		PhotoUID:        PhotoFixtures.Pointer("&photo31").PhotoUID,
		InstanceID:      "a698ac56-6e7e-42b9-9c3e-a79ec9608334",
		FileUID:         "fs6sg6bw15bnl334",
		FileName:        "&abc/&folde/&photo31.jpg",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "pcad9168fa6acc5c5c2965adf6ec465ca42fd334",
		FileSize:        921858,
		FileCodec:       "jpeg",
		FileType:        "jpg",
		FileMime:        "image/jpg",
		FilePrimary:     true,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    true,
		FileDuration:    0,
		FileWidth:       1200,
		FileHeight:      1600,
		FileOrientation: 6,
		FileProjection:  "",
		FileAspectRatio: 0.75,
		FileMainColor:   "magenta",
		FileColors:      "225221C1E",
		FileLuminance:   "DC42844C8",
		FileDiff:        986,
		FileChroma:      32,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2017, 2, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2009, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       935962,
		UpdatedAt:       time.Date(2008, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"photo&32.jpg": {
		ID:              1000048,
		Photo:           PhotoFixtures.Pointer("photo&32"),
		PhotoID:         PhotoFixtures.Pointer("photo&32").ID,
		PhotoUID:        PhotoFixtures.Pointer("photo&32").PhotoUID,
		InstanceID:      "a698ac56-6e7e-42b9-9c3e-a79ec9608335",
		FileUID:         "fs6sg6bw15bnl335",
		FileName:        "tes&r/lo&c/photo&32.jpg",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "pcad9168fa6acc5c5c2965adf6ec465ca42fd335",
		FileSize:        921858,
		FileCodec:       "jpeg",
		FileType:        "jpg",
		FileMime:        "image/jpg",
		FilePrimary:     true,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    true,
		FileDuration:    0,
		FileWidth:       1200,
		FileHeight:      1600,
		FileOrientation: 6,
		FileProjection:  "",
		FileAspectRatio: 0.75,
		FileMainColor:   "magenta",
		FileColors:      "225221C1E",
		FileLuminance:   "DC42844C8",
		FileDiff:        986,
		FileChroma:      32,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2017, 2, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2009, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       935962,
		UpdatedAt:       time.Date(2008, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"photo33&.jpg": {
		ID:              1000049,
		Photo:           PhotoFixtures.Pointer("photo33&"),
		PhotoID:         PhotoFixtures.Pointer("photo33&").ID,
		PhotoUID:        PhotoFixtures.Pointer("photo33&").PhotoUID,
		InstanceID:      "a698ac56-6e7e-42b9-9c3e-a79ec9608336",
		FileUID:         "fs6sg6bw15bnl336",
		FileName:        "tes&r/lo&c/photo33&.jpg",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "pcad9168fa6acc5c5c2965adf6ec465ca42fd336",
		FileSize:        921858,
		FileCodec:       "jpeg",
		FileType:        "jpg",
		FileMime:        "image/jpg",
		FilePrimary:     true,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    true,
		FileDuration:    0,
		FileWidth:       1200,
		FileHeight:      1600,
		FileOrientation: 6,
		FileProjection:  "",
		FileAspectRatio: 0.75,
		FileMainColor:   "magenta",
		FileColors:      "225221C1E",
		FileLuminance:   "DC42844C8",
		FileDiff:        986,
		FileChroma:      32,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2017, 2, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2009, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       935962,
		UpdatedAt:       time.Date(2008, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"'photo34.jpg": {
		ID:              1000050,
		Photo:           PhotoFixtures.Pointer("'photo34"),
		PhotoID:         PhotoFixtures.Pointer("'photo34").ID,
		PhotoUID:        PhotoFixtures.Pointer("'photo34").PhotoUID,
		InstanceID:      "a698ac56-6e7e-42b9-9c3e-a79ec9608337",
		FileUID:         "fs6sg6bw15bnl337",
		FileName:        "'2020/'vacation/'photo34.jpg",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "pcad9168fa6acc5c5c2965adf6ec465ca42fd337",
		FileSize:        921858,
		FileCodec:       "jpeg",
		FileType:        "jpg",
		FileMime:        "image/jpg",
		FilePrimary:     true,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    true,
		FileDuration:    0,
		FileWidth:       1200,
		FileHeight:      1600,
		FileOrientation: 6,
		FileProjection:  "",
		FileAspectRatio: 0.75,
		FileMainColor:   "magenta",
		FileColors:      "225221C1E",
		FileLuminance:   "DC42844C8",
		FileDiff:        986,
		FileChroma:      32,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2017, 2, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2009, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       935962,
		UpdatedAt:       time.Date(2008, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"photo'35.jpg": {
		ID:              1000051,
		Photo:           PhotoFixtures.Pointer("photo'35"),
		PhotoID:         PhotoFixtures.Pointer("photo'35").ID,
		PhotoUID:        PhotoFixtures.Pointer("photo'35").PhotoUID,
		InstanceID:      "a698ac56-6e7e-42b9-9c3e-a79ec9608338",
		FileUID:         "fs6sg6bw15bnl338",
		FileName:        "20'20/vacat'ion/photo'35.jpg",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "pcad9168fa6acc5c5c2965adf6ec465ca42fd338",
		FileSize:        921858,
		FileCodec:       "jpeg",
		FileType:        "jpg",
		FileMime:        "image/jpg",
		FilePrimary:     true,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    true,
		FileDuration:    0,
		FileWidth:       1200,
		FileHeight:      1600,
		FileOrientation: 6,
		FileProjection:  "",
		FileAspectRatio: 0.75,
		FileMainColor:   "magenta",
		FileColors:      "225221C1E",
		FileLuminance:   "DC42844C8",
		FileDiff:        986,
		FileChroma:      32,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2017, 2, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2009, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       935962,
		UpdatedAt:       time.Date(2008, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"photo36'.jpg": {
		ID:              1000052,
		Photo:           PhotoFixtures.Pointer("photo36'"),
		PhotoID:         PhotoFixtures.Pointer("photo36'").ID,
		PhotoUID:        PhotoFixtures.Pointer("photo36'").PhotoUID,
		InstanceID:      "a698ac56-6e7e-42b9-9c3e-a79ec9608339",
		FileUID:         "fs6sg6bw15bnl339",
		FileName:        "2020'/vacation'/photo36'.jpg",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "pcad9168fa6acc5c5c2965adf6ec465ca42fd339",
		FileSize:        921858,
		FileCodec:       "jpeg",
		FileType:        "jpg",
		FileMime:        "image/jpg",
		FilePrimary:     true,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    true,
		FileDuration:    0,
		FileWidth:       1200,
		FileHeight:      1600,
		FileOrientation: 6,
		FileProjection:  "",
		FileAspectRatio: 0.75,
		FileMainColor:   "magenta",
		FileColors:      "225221C1E",
		FileLuminance:   "DC42844C8",
		FileDiff:        986,
		FileChroma:      32,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2017, 2, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2009, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       935962,
		UpdatedAt:       time.Date(2008, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"*photo37.jpg": {
		ID:              1000053,
		Photo:           PhotoFixtures.Pointer("*photo37"),
		PhotoID:         PhotoFixtures.Pointer("*photo37").ID,
		PhotoUID:        PhotoFixtures.Pointer("*photo37").PhotoUID,
		InstanceID:      "a698ac56-6e7e-42b9-9c3e-a79ec9608340",
		FileUID:         "fs6sg6bw15bnl340",
		FileName:        "*2020/*vacation/*photo37.jpg",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "pcad9168fa6acc5c5c2965adf6ec465ca42fd340",
		FileSize:        921858,
		FileCodec:       "jpeg",
		FileType:        "jpg",
		FileMime:        "image/jpg",
		FilePrimary:     true,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    true,
		FileDuration:    0,
		FileWidth:       1200,
		FileHeight:      1600,
		FileOrientation: 6,
		FileProjection:  "",
		FileAspectRatio: 0.75,
		FileMainColor:   "magenta",
		FileColors:      "225221C1E",
		FileLuminance:   "DC42844C8",
		FileDiff:        986,
		FileChroma:      32,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2017, 2, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2009, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       935962,
		UpdatedAt:       time.Date(2008, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"photo*38.jpg": {
		ID:              1000054,
		Photo:           PhotoFixtures.Pointer("photo*38"),
		PhotoID:         PhotoFixtures.Pointer("photo*38").ID,
		PhotoUID:        PhotoFixtures.Pointer("photo*38").PhotoUID,
		InstanceID:      "a698ac56-6e7e-42b9-9c3e-a79ec9608341",
		FileUID:         "fs6sg6bw15bnl341",
		FileName:        "202*3/vac*ation/photo*38.jpg",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "pcad9168fa6acc5c5c2965adf6ec465ca42fd341",
		FileSize:        921858,
		FileCodec:       "jpeg",
		FileType:        "jpg",
		FileMime:        "image/jpg",
		FilePrimary:     true,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    true,
		FileDuration:    0,
		FileWidth:       1200,
		FileHeight:      1600,
		FileOrientation: 6,
		FileProjection:  "",
		FileAspectRatio: 0.75,
		FileMainColor:   "magenta",
		FileColors:      "225221C1E",
		FileLuminance:   "DC42844C8",
		FileDiff:        986,
		FileChroma:      32,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2017, 2, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2009, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       935962,
		UpdatedAt:       time.Date(2008, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"photo39*.jpg": {
		ID:              1000055,
		Photo:           PhotoFixtures.Pointer("photo39*"),
		PhotoID:         PhotoFixtures.Pointer("photo39*").ID,
		PhotoUID:        PhotoFixtures.Pointer("photo39*").PhotoUID,
		InstanceID:      "a698ac56-6e7e-42b9-9c3e-a79ec9608342",
		FileUID:         "fs6sg6bw15bnl342",
		FileName:        "2023*/vacatio*/photo39*.jpg",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "pcad9168fa6acc5c5c2965adf6ec465ca42fd342",
		FileSize:        921858,
		FileCodec:       "jpeg",
		FileType:        "jpg",
		FileMime:        "image/jpg",
		FilePrimary:     true,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    true,
		FileDuration:    0,
		FileWidth:       1200,
		FileHeight:      1600,
		FileOrientation: 6,
		FileProjection:  "",
		FileAspectRatio: 0.75,
		FileMainColor:   "magenta",
		FileColors:      "225221C1E",
		FileLuminance:   "DC42844C8",
		FileDiff:        986,
		FileChroma:      32,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2017, 2, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2009, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       935962,
		UpdatedAt:       time.Date(2008, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"|photo40.jpg": {
		ID:              1000056,
		Photo:           PhotoFixtures.Pointer("|photo40"),
		PhotoID:         PhotoFixtures.Pointer("|photo40").ID,
		PhotoUID:        PhotoFixtures.Pointer("|photo40").PhotoUID,
		InstanceID:      "a698ac56-6e7e-42b9-9c3e-a79ec9608343",
		FileUID:         "fs6sg6bw15bnl343",
		FileName:        "|202/|vacation/|photo40.jpg",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "pcad9168fa6acc5c5c2965adf6ec465ca42fd343",
		FileSize:        921858,
		FileCodec:       "jpeg",
		FileType:        "jpg",
		FileMime:        "image/jpg",
		FilePrimary:     true,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    true,
		FileDuration:    0,
		FileWidth:       1200,
		FileHeight:      1600,
		FileOrientation: 6,
		FileProjection:  "",
		FileAspectRatio: 0.75,
		FileMainColor:   "magenta",
		FileColors:      "225221C1E",
		FileLuminance:   "DC42844C8",
		FileDiff:        986,
		FileChroma:      32,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2017, 2, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2009, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       935962,
		UpdatedAt:       time.Date(2008, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"photo|41.jpg": {
		ID:              1000057,
		Photo:           PhotoFixtures.Pointer("photo|41"),
		PhotoID:         PhotoFixtures.Pointer("photo|41").ID,
		PhotoUID:        PhotoFixtures.Pointer("photo|41").PhotoUID,
		InstanceID:      "a698ac56-6e7e-42b9-9c3e-a79ec9608344",
		FileUID:         "fs6sg6bw15bnl344",
		FileName:        "20|22/vacat|ion/photo|41.jpg",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "pcad9168fa6acc5c5c2965adf6ec465ca42fd344",
		FileSize:        921858,
		FileCodec:       "jpeg",
		FileType:        "jpg",
		FileMime:        "image/jpg",
		FilePrimary:     true,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    true,
		FileDuration:    0,
		FileWidth:       1200,
		FileHeight:      1600,
		FileOrientation: 6,
		FileProjection:  "",
		FileAspectRatio: 0.75,
		FileMainColor:   "magenta",
		FileColors:      "225221C1E",
		FileLuminance:   "DC42844C8",
		FileDiff:        986,
		FileChroma:      32,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2017, 2, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2009, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       935962,
		UpdatedAt:       time.Date(2008, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"photo42|.jpg": {
		ID:              1000058,
		Photo:           PhotoFixtures.Pointer("photo42|"),
		PhotoID:         PhotoFixtures.Pointer("photo42|").ID,
		PhotoUID:        PhotoFixtures.Pointer("photo42|").PhotoUID,
		InstanceID:      "a698ac56-6e7e-42b9-9c3e-a79ec9608345",
		FileUID:         "fs6sg6bw15bnl345",
		FileName:        "2022|/vacation|/photo42|.jpg",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "pcad9168fa6acc5c5c2965adf6ec465ca42fd3445",
		FileSize:        921858,
		FileCodec:       "jpeg",
		FileType:        "jpg",
		FileMime:        "image/jpg",
		FilePrimary:     true,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    true,
		FileDuration:    0,
		FileWidth:       1200,
		FileHeight:      1600,
		FileOrientation: 6,
		FileProjection:  "",
		FileAspectRatio: 0.75,
		FileMainColor:   "magenta",
		FileColors:      "225221C1E",
		FileLuminance:   "DC42844C8",
		FileDiff:        986,
		FileChroma:      32,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2017, 2, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2009, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       935962,
		UpdatedAt:       time.Date(2008, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"43photo.jpg": {
		ID:              1000059,
		Photo:           PhotoFixtures.Pointer("43photo"),
		PhotoID:         PhotoFixtures.Pointer("43photo").ID,
		PhotoUID:        PhotoFixtures.Pointer("43photo").PhotoUID,
		InstanceID:      "a698ac56-6e7e-42b9-9c3e-a79ec9608346",
		FileUID:         "fs6sg6bw15bnl346",
		FileName:        "2000/holiday/43photo.jpg",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "pcad9168fa6acc5c5c2965adf6ec465ca42fd3446",
		FileSize:        921858,
		FileCodec:       "jpeg",
		FileType:        "jpg",
		FileMime:        "image/jpg",
		FilePrimary:     true,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    true,
		FileDuration:    0,
		FileWidth:       1200,
		FileHeight:      1600,
		FileOrientation: 6,
		FileProjection:  "",
		FileAspectRatio: 0.75,
		FileMainColor:   "magenta",
		FileColors:      "225221C1E",
		FileLuminance:   "DC42844C8",
		FileDiff:        986,
		FileChroma:      32,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2017, 2, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2009, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       935962,
		UpdatedAt:       time.Date(2008, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"pho44to.jpg": {
		ID:              1000060,
		Photo:           PhotoFixtures.Pointer("pho44to"),
		PhotoID:         PhotoFixtures.Pointer("pho44to").ID,
		PhotoUID:        PhotoFixtures.Pointer("pho44to").PhotoUID,
		InstanceID:      "a698ac56-6e7e-42b9-9c3e-a79ec9608347",
		FileUID:         "fs6sg6bw15bnl347",
		FileName:        "2000/02/pho44to.jpg",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "pcad9168fa6acc5c5c2965adf6ec465ca42fd3447",
		FileSize:        921858,
		FileCodec:       "jpeg",
		FileType:        "jpg",
		FileMime:        "image/jpg",
		FilePrimary:     true,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    true,
		FileDuration:    0,
		FileWidth:       1200,
		FileHeight:      1600,
		FileOrientation: 6,
		FileProjection:  "",
		FileAspectRatio: 0.75,
		FileMainColor:   "magenta",
		FileColors:      "225221C1E",
		FileLuminance:   "DC42844C8",
		FileDiff:        986,
		FileChroma:      32,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2017, 2, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2009, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       935962,
		UpdatedAt:       time.Date(2008, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"photo45.jpg": {
		ID:              1000061,
		Photo:           PhotoFixtures.Pointer("photo45"),
		PhotoID:         PhotoFixtures.Pointer("photo45").ID,
		PhotoUID:        PhotoFixtures.Pointer("photo45").PhotoUID,
		InstanceID:      "a698ac56-6e7e-42b9-9c3e-a79ec9608348",
		FileUID:         "fs6sg6bw15bnl348",
		FileName:        "2000/02/photo45.jpg",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "pcad9168fa6acc5c5c2965adf6ec465ca42fd3448",
		FileSize:        921858,
		FileCodec:       "jpeg",
		FileType:        "jpg",
		FileMime:        "image/jpg",
		FilePrimary:     true,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    true,
		FileDuration:    0,
		FileWidth:       1200,
		FileHeight:      1600,
		FileOrientation: 6,
		FileProjection:  "",
		FileAspectRatio: 0.75,
		FileMainColor:   "magenta",
		FileColors:      "225221C1E",
		FileLuminance:   "DC42844C8",
		FileDiff:        986,
		FileChroma:      32,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2017, 2, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2009, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       935962,
		UpdatedAt:       time.Date(2008, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"\"photo46.jpg": {
		ID:              1000062,
		Photo:           PhotoFixtures.Pointer("\"photo46"),
		PhotoID:         PhotoFixtures.Pointer("\"photo46").ID,
		PhotoUID:        PhotoFixtures.Pointer("\"photo46").PhotoUID,
		InstanceID:      "a698ac56-6e7e-42b9-9c3e-a79ec9608349",
		FileUID:         "fs6sg6bw15bnl349",
		FileName:        "\"2000/\"02/\"photo46.jpg",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "pcad9168fa6acc5c5c2965adf6ec465ca42fd3449",
		FileSize:        921858,
		FileCodec:       "jpeg",
		FileType:        "jpg",
		FileMime:        "image/jpg",
		FilePrimary:     true,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    true,
		FileDuration:    0,
		FileWidth:       1200,
		FileHeight:      1600,
		FileOrientation: 6,
		FileProjection:  "",
		FileAspectRatio: 0.75,
		FileMainColor:   "magenta",
		FileColors:      "225221C1E",
		FileLuminance:   "DC42844C8",
		FileDiff:        986,
		FileChroma:      32,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2017, 2, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2009, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       935962,
		UpdatedAt:       time.Date(2008, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"photo\"47.jpg": {
		ID:              1000063,
		Photo:           PhotoFixtures.Pointer("photo\"47"),
		PhotoID:         PhotoFixtures.Pointer("photo\"47").ID,
		PhotoUID:        PhotoFixtures.Pointer("photo\"47").PhotoUID,
		InstanceID:      "a698ac56-6e7e-42b9-9c3e-a79ec9608350",
		FileUID:         "fs6sg6bw15bnl350",
		FileName:        "20\"00/0\"2/photo\"47.jpg",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "pcad9168fa6acc5c5c2965adf6ec465ca42fd3450",
		FileSize:        921858,
		FileCodec:       "jpeg",
		FileType:        "jpg",
		FileMime:        "image/jpg",
		FilePrimary:     true,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    true,
		FileDuration:    0,
		FileWidth:       1200,
		FileHeight:      1600,
		FileOrientation: 6,
		FileProjection:  "",
		FileAspectRatio: 0.75,
		FileMainColor:   "magenta",
		FileColors:      "225221C1E",
		FileLuminance:   "DC42844C8",
		FileDiff:        986,
		FileChroma:      32,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2017, 2, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2009, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       935962,
		UpdatedAt:       time.Date(2008, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"photo48\".jpg": {
		ID:              1000064,
		Photo:           PhotoFixtures.Pointer("photo48\""),
		PhotoID:         PhotoFixtures.Pointer("photo48\"").ID,
		PhotoUID:        PhotoFixtures.Pointer("photo48\"").PhotoUID,
		InstanceID:      "a698ac56-6e7e-42b9-9c3e-a79ec9608351",
		FileUID:         "fs6sg6bw15bnl351",
		FileName:        "2000\"/02\"/photo48\".jpg",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "pcad9168fa6acc5c5c2965adf6ec465ca42fd3451",
		FileSize:        921858,
		FileCodec:       "jpeg",
		FileType:        string(fs.ImageJPEG),
		MediaType:       string(media.Image),
		FileMime:        "image/jpg",
		FilePrimary:     true,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    true,
		FileDuration:    0,
		FileWidth:       1200,
		FileHeight:      1600,
		FileOrientation: 6,
		FileProjection:  "",
		FileAspectRatio: 0.75,
		FileMainColor:   "magenta",
		FileColors:      "225221C1E",
		FileLuminance:   "DC42844C8",
		FileDiff:        986,
		FileChroma:      32,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2017, 2, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2009, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       935962,
		UpdatedAt:       time.Date(2008, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	" photo49.jpg": {
		ID:              1000065,
		Photo:           PhotoFixtures.Pointer(" photo49"),
		PhotoID:         PhotoFixtures.Pointer(" photo49").ID,
		PhotoUID:        PhotoFixtures.Pointer(" photo49").PhotoUID,
		InstanceID:      "a698ac56-6e7e-42b9-9c3e-a79ec9608352",
		FileUID:         "fs6sg6bw15bnl352",
		FileName:        " 2000/ 02/ photo49.jpg",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "pcad9168fa6acc5c5c2965adf6ec465ca42fd3452",
		FileSize:        921858,
		FileCodec:       "jpeg",
		FileType:        "jpg",
		MediaType:       string(media.Image),
		FileMime:        "image/jpg",
		FilePrimary:     true,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    true,
		FileDuration:    0,
		FileWidth:       1200,
		FileHeight:      1600,
		FileOrientation: 6,
		FileProjection:  "",
		FileAspectRatio: 0.75,
		FileMainColor:   "magenta",
		FileColors:      "225221C1E",
		FileLuminance:   "DC42844C8",
		FileDiff:        986,
		FileChroma:      32,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2017, 2, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2009, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       935962,
		UpdatedAt:       time.Date(2008, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"photo 50.jpg": {
		ID:              1000066,
		Photo:           PhotoFixtures.Pointer("photo 50"),
		PhotoID:         PhotoFixtures.Pointer("photo 50").ID,
		PhotoUID:        PhotoFixtures.Pointer("photo 50").PhotoUID,
		InstanceID:      "a698ac56-6e7e-42b9-9c3e-a79ec9608353",
		FileUID:         "fs6sg6bw15bnl353",
		FileName:        "20 00/ 0 2/photo 50.jpg",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "pcad9168fa6acc5c5c2965adf6ec465ca42fd3453",
		FileSize:        921858,
		FileCodec:       "jpeg",
		FileType:        "jpg",
		MediaType:       string(media.Image),
		FileMime:        "image/jpg",
		FilePrimary:     true,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    true,
		FileDuration:    0,
		FileWidth:       1200,
		FileHeight:      1600,
		FileOrientation: 6,
		FileProjection:  "",
		FileAspectRatio: 0.75,
		FileMainColor:   "magenta",
		FileColors:      "225221C1E",
		FileLuminance:   "DC42844C8",
		FileDiff:        986,
		FileChroma:      32,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2017, 2, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2009, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       935962,
		UpdatedAt:       time.Date(2008, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"photo51 .jpg": {
		ID:              1000067,
		Photo:           PhotoFixtures.Pointer("photo51 "),
		PhotoID:         PhotoFixtures.Pointer("photo51 ").ID,
		PhotoUID:        PhotoFixtures.Pointer("photo51 ").PhotoUID,
		InstanceID:      "a698ac56-6e7e-42b9-9c3e-a79ec9608354",
		FileUID:         "fs6sg6bw15bnl354",
		FileName:        "2000 /02 /photo51 .jpg",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "pcad9168fa6acc5c5c2965adf6ec465ca42fd3454",
		FileSize:        921858,
		FileCodec:       "jpeg",
		FileType:        "jpg",
		FileMime:        "image/jpg",
		FilePrimary:     true,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    true,
		FileDuration:    0,
		FileWidth:       1200,
		FileHeight:      1600,
		FileOrientation: 6,
		FileProjection:  "",
		FileAspectRatio: 0.75,
		FileMainColor:   "magenta",
		FileColors:      "225221C1E",
		FileLuminance:   "DC42844C8",
		FileDiff:        986,
		FileChroma:      32,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2017, 2, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2009, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       935962,
		UpdatedAt:       time.Date(2008, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"photo52.gif.jpg": {
		ID:              1000068,
		Photo:           PhotoFixtures.Pointer("photo52"),
		PhotoID:         PhotoFixtures.Pointer("photo52").ID,
		PhotoUID:        PhotoFixtures.Pointer("photo52").PhotoUID,
		InstanceID:      "a698ac56-6e7e-42b9-9c3e-a79ec9608355",
		FileUID:         "fs6sg6bw15bnl355",
		FileName:        "2020/GIF/photo52.gif.jpg",
		FileRoot:        RootSidecar,
		OriginalName:    "",
		FileHash:        "pcad9168fa6acc5c5c2965adf6ec465ca42fd3455",
		FileSize:        921858,
		FileCodec:       "jpeg",
		FileType:        "jpg",
		FileMime:        "image/jpg",
		FilePrimary:     true,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    true,
		FileDuration:    0,
		FileWidth:       1200,
		FileHeight:      1600,
		FileOrientation: 6,
		FileProjection:  "",
		FileAspectRatio: 0.75,
		FileMainColor:   "magenta",
		FileColors:      "225221C1E",
		FileLuminance:   "DC42844C8",
		FileDiff:        986,
		FileChroma:      32,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2017, 2, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2009, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       935962,
		UpdatedAt:       time.Date(2008, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
	"photo52.gif": {
		ID:              1000069,
		Photo:           PhotoFixtures.Pointer("photo52"),
		PhotoID:         PhotoFixtures.Pointer("photo52").ID,
		PhotoUID:        PhotoFixtures.Pointer("photo52").PhotoUID,
		InstanceID:      "a698ac56-6e7e-42b9-9c3e-a79ec9608356",
		FileUID:         "fs6sg6bw15bnl356",
		FileName:        "2020/GIF/photo52.gif",
		FileRoot:        RootOriginals,
		OriginalName:    "",
		FileHash:        "pcad9168fa6acc5c5c2965adf6ec465ca42fd3456",
		FileSize:        407701,
		FileCodec:       "gif",
		FileType:        "gif",
		FileMime:        "image/gif",
		FilePrimary:     false,
		FileSidecar:     false,
		FileVideo:       false,
		FileMissing:     false,
		FilePortrait:    true,
		FileDuration:    15000000000,
		FileFPS:         0.4666666666666667,
		FileFrames:      7,
		FileWidth:       1200,
		FileHeight:      1600,
		FileOrientation: 6,
		FileProjection:  "",
		FileAspectRatio: 0.75,
		FileMainColor:   "magenta",
		FileColors:      "225221C1E",
		FileLuminance:   "DC42844C8",
		FileDiff:        986,
		FileChroma:      32,
		FileError:       "",
		Share:           []FileShare{},
		Sync:            []FileSync{},
		ModTime:         time.Date(2017, 2, 6, 2, 6, 51, 0, time.UTC).Unix(),
		CreatedAt:       time.Date(2009, 1, 1, 0, 0, 0, 0, time.UTC),
		CreatedIn:       935962,
		UpdatedAt:       time.Date(2008, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedIn:       935962,
		DeletedAt:       nil,
	},
}
View Source
var FileFixturesExampleBridge = FileFixtures["bridge.jpg"]
View Source
var FileFixturesExampleBridgeVideo = FileFixtures["bridge2.mp4"]
View Source
var FileFixturesExampleJPG = FileFixtures["exampleFileName.jpg"]
View Source
var FileFixturesExampleXMP = FileFixtures["exampleXmpFile.xmp"]
View Source
var FileShareFixtures = FileShareMap{
	"FileShare1": {
		FileID:     1000000,
		ServiceID:  1000000,
		RemoteName: "/20100729-015747-Urlaub-2010.jpg",
		Status:     FileShareShared,
		Error:      "",
		Errors:     0,
		File:       nil,
		Account:    &ServiceFixtureWebdavDummy,
		CreatedAt:  time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:  time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
	},
	"FileShare2": {
		FileID:     1000000,
		ServiceID:  1000001,
		RemoteName: "/20200729-015747-Dog-2020.jpg",
		Status:     FileShareNew,
		Error:      "",
		Errors:     0,
		File:       nil,
		Account:    &ServiceFixtureWebdavDummy2,
		CreatedAt:  time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:  time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
	},
}
View Source
var FileSyncFixtures = FileSyncMap{
	"FileSync1": {
		FileID:     1000000,
		ServiceID:  1000000,
		RemoteName: "/20200706-092527-Landscape-München-2020.jpg",
		Status:     "uploaded",
		Error:      "",
		Errors:     0,
		File:       &FileFixturesExampleJPG,
		Account:    &ServiceFixtureWebdavDummy,
		RemoteDate: time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		RemoteSize: int64(888),
		CreatedAt:  time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:  time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
	},
	"FileSync2": {
		FileID:     1000000,
		ServiceID:  1000001,
		RemoteName: "/20200706-092527-Landscape-Hamburg-2020.jpg",
		Status:     "downloaded",
		Error:      "",
		Errors:     0,
		File:       &FileFixturesExampleJPG,
		Account:    &ServiceFixtureWebdavDummy2,
		RemoteDate: time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		RemoteSize: int64(160),
		CreatedAt:  time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:  time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
	},
	"FileSync3": {
		FileID:     1000000,
		ServiceID:  1000000,
		RemoteName: "/20200706-092527-People-2020.jpg",
		Status:     "new",
		Error:      "",
		Errors:     0,
		File:       &FileFixturesExampleJPG,
		Account:    &ServiceFixtureWebdavDummy,
		RemoteDate: time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		RemoteSize: int64(860),
		CreatedAt:  time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:  time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
	},
}
View Source
var FolderFixtures = map[string]Folder{
	"1990": {
		FolderUID:         "dqo63pn35k2d495z",
		Path:              "1990",
		Root:              "/",
		FolderType:        "",
		FolderTitle:       "1990",
		FolderCategory:    "",
		FolderDescription: "",
		FolderOrder:       "name",
		FolderYear:        1990,
		FolderMonth:       7,
		FolderDay:         0,
		FolderCountry:     UnknownID,
		FolderFavorite:    false,
		FolderPrivate:     false,
		FolderIgnore:      false,
		FolderWatch:       false,
		CreatedAt:         time.Date(2020, 3, 6, 2, 6, 51, 0, time.UTC),
		UpdatedAt:         time.Date(2020, 3, 28, 14, 6, 0, 0, time.UTC),
		ModifiedAt:        time.Date(2020, 3, 20, 14, 6, 0, 0, time.UTC),
		DeletedAt:         nil,
	},
	"1990/04": {
		FolderUID:         "dqo63pn2f87f02xj",
		Path:              "1990/04",
		Root:              "/",
		FolderType:        "",
		FolderTitle:       "April 1990",
		FolderCategory:    "",
		FolderDescription: "",
		FolderOrder:       "name",
		FolderYear:        1990,
		FolderMonth:       4,
		FolderDay:         0,
		FolderCountry:     UnknownID,
		FolderFavorite:    false,
		FolderPrivate:     false,
		FolderIgnore:      false,
		FolderWatch:       false,
		CreatedAt:         time.Date(2020, 3, 6, 2, 6, 51, 0, time.UTC),
		UpdatedAt:         time.Date(2020, 3, 28, 14, 6, 0, 0, time.UTC),
		ModifiedAt:        time.Date(2020, 3, 20, 14, 6, 0, 0, time.UTC),
		DeletedAt:         nil,
	},
	"2007/12": {
		FolderUID:         "dqo63pn2f87f02oi",
		Path:              "2007/12",
		Root:              "/",
		FolderType:        "",
		FolderTitle:       "December 2007",
		FolderCategory:    "",
		FolderDescription: "",
		FolderOrder:       "name",
		FolderYear:        2007,
		FolderMonth:       12,
		FolderDay:         0,
		FolderCountry:     "de",
		FolderFavorite:    false,
		FolderPrivate:     false,
		FolderIgnore:      false,
		FolderWatch:       false,
		CreatedAt:         time.Date(2007, 12, 25, 2, 6, 51, 0, time.UTC),
		UpdatedAt:         time.Date(2020, 3, 30, 14, 6, 0, 0, time.UTC),
		ModifiedAt:        time.Date(2020, 3, 20, 14, 6, 0, 0, time.UTC),
		DeletedAt:         nil,
	},
}
View Source
var GeoApi = "places"
View Source
var IndexUpdateInterval = 3 * time.Hour // 3 Hours
View Source
var KeywordFixtures = KeywordMap{
	"bridge": {
		ID:      1000000,
		Keyword: "bridge",
		Skip:    false,
	},
	"beach": {
		ID:      1000001,
		Keyword: "beach",
		Skip:    false,
	},
	"flower": {
		ID:      1000002,
		Keyword: "flower",
		Skip:    false,
	},
	"kuh": {
		ID:      1000003,
		Keyword: "kuh",
		Skip:    false,
	},
	"actress": {
		ID:      1000004,
		Keyword: "actress",
		Skip:    false,
	},
	"%toss": {
		ID:      1000005,
		Keyword: "%toss",
		Skip:    false,
	},
	"ca%t": {
		ID:      1000006,
		Keyword: "ca%t",
		Skip:    false,
	},
	"magic%": {
		ID:      1000007,
		Keyword: "magic%",
		Skip:    false,
	},
	"&hogwarts": {
		ID:      1000008,
		Keyword: "&hogwarts",
		Skip:    false,
	},
	"love&trust": {
		ID:      1000009,
		Keyword: "love&trust",
		Skip:    false,
	},
	"countryside&": {
		ID:      10000010,
		Keyword: "countryside&",
		Skip:    false,
	},
	"'grandfather": {
		ID:      10000011,
		Keyword: "'grandfather",
		Skip:    false,
	},
	"grandma's": {
		ID:      10000012,
		Keyword: "grandma's",
		Skip:    false,
	},
	"cheescake'": {
		ID:      10000013,
		Keyword: "cheescake'",
		Skip:    false,
	},
	"*rating": {
		ID:      10000014,
		Keyword: "*rating",
		Skip:    false,
	},
	"three*four": {
		ID:      10000015,
		Keyword: "three*four",
		Skip:    false,
	},
	"tree*": {
		ID:      10000016,
		Keyword: "tree*",
		Skip:    false,
	},
	"|mystery": {
		ID:      10000017,
		Keyword: "|mystery",
		Skip:    false,
	},
	"run|stay": {
		ID:      10000018,
		Keyword: "run|stay",
		Skip:    false,
	},
	"pillow|": {
		ID:      10000019,
		Keyword: "pillow|",
		Skip:    false,
	},
	"1dish": {
		ID:      10000020,
		Keyword: "1dish",
		Skip:    false,
	},
	"nothing4you": {
		ID:      10000021,
		Keyword: "nothing4you",
		Skip:    false,
	},
	"joyx2": {
		ID:      10000022,
		Keyword: "joyx2",
		Skip:    false,
	},
	"\"electronics": {
		ID:      10000023,
		Keyword: "\"electronics",
		Skip:    false,
	},
	"sal\"mon": {
		ID:      10000024,
		Keyword: "sal\"mon",
		Skip:    false,
	},
	"fish\"": {
		ID:      10000025,
		Keyword: "fish\"",
		Skip:    false,
	},
}
View Source
var LabelFixtures = LabelMap{
	"landscape": {
		ID:               1000000,
		LabelUID:         "ls6sg6b1wowuy3c2",
		LabelSlug:        "landscape",
		CustomSlug:       "landscape",
		LabelName:        "Landscape",
		LabelPriority:    0,
		LabelFavorite:    true,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       1,
		LabelCategories:  []*Label{},
		CreatedAt:        TimeStamp(),
		UpdatedAt:        TimeStamp(),
		DeletedAt:        nil,
		New:              false,
	},
	"flower": {
		ID:               1000001,
		LabelUID:         "ls6sg6b1wowuy3c3",
		LabelSlug:        "flower",
		CustomSlug:       "flower",
		LabelName:        "Flower",
		LabelPriority:    1,
		LabelFavorite:    true,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       2,
		LabelCategories:  []*Label{},
		CreatedAt:        TimeStamp(),
		UpdatedAt:        TimeStamp(),
		DeletedAt:        nil,
		New:              false,
	},
	"cake": {
		ID:               1000002,
		LabelUID:         "ls6sg6b1wowuy3c4",
		LabelSlug:        "cake",
		CustomSlug:       "kuchen",
		LabelName:        "Cake",
		LabelPriority:    5,
		LabelFavorite:    false,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       3,
		LabelCategories:  []*Label{},
		CreatedAt:        TimeStamp(),
		UpdatedAt:        TimeStamp(),
		DeletedAt:        nil,
		New:              false,
	},
	"cow": {
		ID:               1000003,
		LabelUID:         "ls6sg6b1wowuy3c5",
		LabelSlug:        "cow",
		CustomSlug:       "kuh",
		LabelName:        "COW",
		LabelPriority:    -1,
		LabelFavorite:    true,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       4,
		LabelCategories:  []*Label{},
		CreatedAt:        TimeStamp(),
		UpdatedAt:        TimeStamp(),
		DeletedAt:        nil,
		New:              false,
	},
	"batchdelete": {
		ID:               1000004,
		LabelUID:         "ls6sg6b1wowuy3c6",
		LabelSlug:        "batch-delete",
		CustomSlug:       "batch-delete",
		LabelName:        "Batch Delete",
		LabelPriority:    1,
		LabelFavorite:    true,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       5,
		LabelCategories:  []*Label{},
		CreatedAt:        TimeStamp(),
		UpdatedAt:        TimeStamp(),
		DeletedAt:        nil,
		New:              false,
	},
	"updateLabel": {
		ID:               1000005,
		LabelUID:         "ls6sg6b1wowuy3c7",
		LabelSlug:        "update-label",
		CustomSlug:       "update-label",
		LabelName:        "Update Label",
		LabelPriority:    2,
		LabelFavorite:    false,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       1,
		LabelCategories:  []*Label{},
		CreatedAt:        TimeStamp(),
		UpdatedAt:        TimeStamp(),
		DeletedAt:        nil,
		New:              false,
	},
	"updatePhotoLabel": {
		ID:               1000006,
		LabelUID:         "ls6sg6b1wowuy3c8",
		LabelSlug:        "update-photo-label",
		CustomSlug:       "update-label-photo",
		LabelName:        "Update Photo Label",
		LabelPriority:    2,
		LabelFavorite:    false,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       1,
		LabelCategories:  []*Label{},
		CreatedAt:        TimeStamp(),
		UpdatedAt:        TimeStamp(),
		DeletedAt:        nil,
		New:              false,
	},
	"likeLabel": {
		ID:               1000007,
		LabelUID:         "ls6sg6b1wowuy3c9",
		LabelSlug:        "like-label",
		CustomSlug:       "like-label",
		LabelName:        "Like Label",
		LabelPriority:    3,
		LabelFavorite:    false,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       1,
		LabelCategories:  []*Label{},
		CreatedAt:        TimeStamp(),
		UpdatedAt:        TimeStamp(),
		DeletedAt:        nil,
		New:              false,
	},
	"no-jpeg": {
		ID:               1000008,
		LabelUID:         "lt9k3aa1wowuy310",
		LabelSlug:        "no-jpeg",
		CustomSlug:       "no-jpeg",
		LabelName:        "NO JPEG",
		LabelPriority:    -1,
		LabelFavorite:    false,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       4,
		LabelCategories:  []*Label{},
		CreatedAt:        TimeStamp(),
		UpdatedAt:        TimeStamp(),
		DeletedAt:        nil,
		New:              false,
	},
	"apilikeLabel": {
		ID:               1000009,
		LabelUID:         "ls6sg6b1wowuy311",
		LabelSlug:        "api-like-label",
		CustomSlug:       "api-like-label",
		LabelName:        "Api Like Label",
		LabelPriority:    -1,
		LabelFavorite:    false,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       1,
		LabelCategories:  []*Label{},
		CreatedAt:        TimeStamp(),
		UpdatedAt:        TimeStamp(),
		DeletedAt:        nil,
		New:              false,
	},
	"apidislikeLabel": {
		ID:               1000010,
		LabelUID:         "ls6sg6b1wowuy312",
		LabelSlug:        "api-dislike-label",
		CustomSlug:       "api-dislike-label",
		LabelName:        "Api Dislike Label",
		LabelPriority:    -2,
		LabelFavorite:    true,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       1,
		LabelCategories:  []*Label{},
		CreatedAt:        TimeStamp(),
		UpdatedAt:        TimeStamp(),
		DeletedAt:        nil,
		New:              false,
	},
	"%tennis": {
		ID:               1000011,
		LabelUID:         "ls6sg6b1wowuy313",
		LabelSlug:        "%tennis",
		CustomSlug:       "%tennis",
		LabelName:        "%tennis",
		LabelPriority:    1,
		LabelFavorite:    true,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       1,
		LabelCategories:  []*Label{},
		CreatedAt:        TimeStamp(),
		UpdatedAt:        TimeStamp(),
		DeletedAt:        nil,
		New:              false,
	},
	"chem%stry": {
		ID:               1000012,
		LabelUID:         "ls6sg6b1wowuy314",
		LabelSlug:        "chem%stry",
		CustomSlug:       "chem%stry",
		LabelName:        "chem%stry",
		LabelPriority:    1,
		LabelFavorite:    true,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       1,
		LabelCategories:  []*Label{},
		CreatedAt:        TimeStamp(),
		UpdatedAt:        TimeStamp(),
		DeletedAt:        nil,
		New:              false,
	},
	"cell%": {
		ID:               1000013,
		LabelUID:         "ls6sg6b1wowuy315",
		LabelSlug:        "cell%",
		CustomSlug:       "cell%",
		LabelName:        "cell%",
		LabelPriority:    1,
		LabelFavorite:    true,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       1,
		LabelCategories:  []*Label{},
		CreatedAt:        TimeStamp(),
		UpdatedAt:        TimeStamp(),
		DeletedAt:        nil,
		New:              false,
	},
	"&friendship": {
		ID:               1000014,
		LabelUID:         "ls6sg6b1wowuy316",
		LabelSlug:        "&friendship",
		CustomSlug:       "&friendship",
		LabelName:        "&friendship",
		LabelPriority:    1,
		LabelFavorite:    true,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       1,
		LabelCategories:  []*Label{},
		CreatedAt:        TimeStamp(),
		UpdatedAt:        TimeStamp(),
		DeletedAt:        nil,
		New:              false,
	},
	"construction&failure": {
		ID:               1000015,
		LabelUID:         "ls6sg6b1wowuy317",
		LabelSlug:        "construction&failure",
		CustomSlug:       "construction&failure",
		LabelName:        "construction&failure",
		LabelPriority:    1,
		LabelFavorite:    true,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       1,
		LabelCategories:  []*Label{},
		CreatedAt:        TimeStamp(),
		UpdatedAt:        TimeStamp(),
		DeletedAt:        nil,
		New:              false,
	},
	"goal&": {
		ID:               1000016,
		LabelUID:         "ls6sg6b1wowuy318",
		LabelSlug:        "goal&",
		CustomSlug:       "goal&",
		LabelName:        "goal&",
		LabelPriority:    1,
		LabelFavorite:    true,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       1,
		LabelCategories:  []*Label{},
		CreatedAt:        TimeStamp(),
		UpdatedAt:        TimeStamp(),
		DeletedAt:        nil,
		New:              false,
	},
	"'activity": {
		ID:               1000017,
		LabelUID:         "ls6sg6b1wowuy319",
		LabelSlug:        "'activity",
		CustomSlug:       "'activity",
		LabelName:        "'activity",
		LabelPriority:    1,
		LabelFavorite:    true,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       1,
		LabelCategories:  []*Label{},
		CreatedAt:        TimeStamp(),
		UpdatedAt:        TimeStamp(),
		DeletedAt:        nil,
		New:              false,
	},
	"funera'l": {
		ID:               1000018,
		LabelUID:         "ls6sg6b1wowuy320",
		LabelSlug:        "funera'l",
		CustomSlug:       "funera'l",
		LabelName:        "funera'l",
		LabelPriority:    1,
		LabelFavorite:    true,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       1,
		LabelCategories:  []*Label{},
		CreatedAt:        TimeStamp(),
		UpdatedAt:        TimeStamp(),
		DeletedAt:        nil,
		New:              false,
	},
	"technology'": {
		ID:               1000019,
		LabelUID:         "ls6sg6b1wowuy321",
		LabelSlug:        "technology'",
		CustomSlug:       "technology'",
		LabelName:        "technology'",
		LabelPriority:    1,
		LabelFavorite:    true,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       1,
		LabelCategories:  []*Label{},
		CreatedAt:        TimeStamp(),
		UpdatedAt:        TimeStamp(),
		DeletedAt:        nil,
		New:              false,
	},
	"*tea": {
		ID:               1000020,
		LabelUID:         "ls6sg6b1wowuy322",
		LabelSlug:        "*tea",
		CustomSlug:       "*tea",
		LabelName:        "*tea",
		LabelPriority:    1,
		LabelFavorite:    true,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       1,
		LabelCategories:  []*Label{},
		CreatedAt:        TimeStamp(),
		UpdatedAt:        TimeStamp(),
		DeletedAt:        nil,
		New:              false,
	},
	"soup*menu": {
		ID:               1000021,
		LabelUID:         "ls6sg6b1wowuy323",
		LabelSlug:        "soup*menu",
		CustomSlug:       "soup*menu",
		LabelName:        "soup*menu",
		LabelPriority:    1,
		LabelFavorite:    true,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       1,
		LabelCategories:  []*Label{},
		CreatedAt:        TimeStamp(),
		UpdatedAt:        TimeStamp(),
		DeletedAt:        nil,
		New:              false,
	},
	"proposal*": {
		ID:               1000022,
		LabelUID:         "ls6sg6b1wowuy324",
		LabelSlug:        "proposal*",
		CustomSlug:       "proposal*",
		LabelName:        "proposal*",
		LabelPriority:    1,
		LabelFavorite:    true,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       1,
		LabelCategories:  []*Label{},
		CreatedAt:        TimeStamp(),
		UpdatedAt:        TimeStamp(),
		DeletedAt:        nil,
		New:              false,
	},
	"|college": {
		ID:               1000023,
		LabelUID:         "ls6sg6b1wowuy325",
		LabelSlug:        "|college",
		CustomSlug:       "|college",
		LabelName:        "|college",
		LabelPriority:    1,
		LabelFavorite:    true,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       1,
		LabelCategories:  []*Label{},
		CreatedAt:        TimeStamp(),
		UpdatedAt:        TimeStamp(),
		DeletedAt:        nil,
		New:              false,
	},
	"potato|couch": {
		ID:               1000024,
		LabelUID:         "ls6sg6b1wowuy326",
		LabelSlug:        "potato|couch",
		CustomSlug:       "potato|couch",
		LabelName:        "potato|couch",
		LabelPriority:    1,
		LabelFavorite:    true,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       1,
		LabelCategories:  []*Label{},
		CreatedAt:        TimeStamp(),
		UpdatedAt:        TimeStamp(),
		DeletedAt:        nil,
		New:              false,
	},
	"mall|": {
		ID:               1000025,
		LabelUID:         "ls6sg6b1wowuy327",
		LabelSlug:        "mall|",
		CustomSlug:       "mall|",
		LabelName:        "mall|",
		LabelPriority:    1,
		LabelFavorite:    true,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       1,
		LabelCategories:  []*Label{},
		CreatedAt:        TimeStamp(),
		UpdatedAt:        TimeStamp(),
		DeletedAt:        nil,
		New:              false,
	},
	"2020-world": {
		ID:               1000026,
		LabelUID:         "ls6sg6b1wowuy328",
		LabelSlug:        "2020-world",
		CustomSlug:       "2020-world",
		LabelName:        "2020-world",
		LabelPriority:    1,
		LabelFavorite:    true,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       1,
		LabelCategories:  []*Label{},
		CreatedAt:        TimeStamp(),
		UpdatedAt:        TimeStamp(),
		DeletedAt:        nil,
		New:              false,
	},
	"sport-2021-event": {
		ID:               1000027,
		LabelUID:         "ls6sg6b1wowuy329",
		LabelSlug:        "sport-2021-event",
		CustomSlug:       "sport-2021-event",
		LabelName:        "Sport 2021 Event",
		LabelPriority:    1,
		LabelFavorite:    true,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       1,
		LabelCategories:  []*Label{},
		CreatedAt:        TimeStamp(),
		UpdatedAt:        TimeStamp(),
		DeletedAt:        nil,
		New:              false,
	},
	"oven-3000": {
		ID:               1000028,
		LabelUID:         "ls6sg6b1wowuy330",
		LabelSlug:        "oven-3000",
		CustomSlug:       "oven-3000",
		LabelName:        "Oven3000",
		LabelPriority:    1,
		LabelFavorite:    true,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       1,
		LabelCategories:  []*Label{},
		CreatedAt:        TimeStamp(),
		UpdatedAt:        TimeStamp(),
		DeletedAt:        nil,
		New:              false,
	},
	"\"king": {
		ID:               1000029,
		LabelUID:         "ls6sg6b1wowuy331",
		LabelSlug:        "\"king",
		CustomSlug:       "\"king",
		LabelName:        "\"king",
		LabelPriority:    1,
		LabelFavorite:    true,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       1,
		LabelCategories:  []*Label{},
		CreatedAt:        TimeStamp(),
		UpdatedAt:        TimeStamp(),
		DeletedAt:        nil,
		New:              false,
	},
	"town\"ship": {
		ID:               1000030,
		LabelUID:         "ls6sg6b1wowuy332",
		LabelSlug:        "town\"ship",
		CustomSlug:       "town\"ship",
		LabelName:        "town\"ship",
		LabelPriority:    1,
		LabelFavorite:    true,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       1,
		LabelCategories:  []*Label{},
		CreatedAt:        TimeStamp(),
		UpdatedAt:        TimeStamp(),
		DeletedAt:        nil,
		New:              false,
	},
	"ladder\"": {
		ID:               1000031,
		LabelUID:         "ls6sg6b1wowuy333",
		LabelSlug:        "ladder\"",
		CustomSlug:       "ladder\"",
		LabelName:        "ladder\"",
		LabelPriority:    1,
		LabelFavorite:    true,
		LabelDescription: "",
		LabelNotes:       "",
		PhotoCount:       1,
		LabelCategories:  []*Label{},
		CreatedAt:        TimeStamp(),
		UpdatedAt:        TimeStamp(),
		DeletedAt:        nil,
		New:              false,
	},
}
View Source
var LensFixtures = LensMap{
	"lens-f-380": {
		ID:              1000000,
		LensSlug:        "lens-f-380",
		LensName:        "Apple F380",
		LensMake:        "Apple",
		LensModel:       "F380",
		LensType:        "",
		LensDescription: "",
		LensNotes:       "Notes",
		CreatedAt:       time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:       time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		DeletedAt:       nil,
	},
	"4.15mm-f/2.2": {
		ID:              1000001,
		LensSlug:        "4.15mm-f/2.2",
		LensName:        "Apple iPhone SE back camera 4.15mm f/2.2",
		LensMake:        "Apple",
		LensModel:       "iPhone SE back camera 4.15mm f/2.2",
		LensType:        "",
		LensDescription: "",
		LensNotes:       "Notes",
		CreatedAt:       time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:       time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		DeletedAt:       nil,
	},
}
View Source
var LensModelIgnore = regexp.MustCompile(`(?i)\sback.*camera\s`)

LensModelIgnore is a regular expression that matches lens model substrings to be ignored.

View Source
var LinkFixtures = LinkMap{
	"1jxf3jfn2k": {
		LinkUID:     "ss62xpryd1ob7gtf",
		ShareUID:    "as6sg6bxpogaaba8",
		ShareSlug:   "holiday-2030",
		LinkToken:   "1jxf3jfn2k",
		LinkExpires: 0,
		LinkViews:   12,
		MaxViews:    0,
		HasPassword: false,
		CreatedAt:   time.Date(2020, 3, 6, 2, 6, 51, 0, time.UTC),
		ModifiedAt:  time.Date(2020, 3, 6, 2, 6, 51, 0, time.UTC),
	},
	"4jxf3jfn2k": {
		LinkUID:     "ss62xpryd1ob8gtf",
		ShareUID:    "as6sg6bxpogaaba7",
		ShareSlug:   "christmas-2030",
		LinkToken:   "4jxf3jfn2k",
		LinkExpires: 0,
		LinkViews:   0,
		MaxViews:    0,
		HasPassword: false,
		CreatedAt:   time.Date(2020, 3, 6, 2, 6, 51, 0, time.UTC),
		ModifiedAt:  time.Date(2020, 3, 6, 2, 6, 51, 0, time.UTC),
	},
	"5jxf3jfn2k": {
		LinkUID:     "ss69xpryd1ob9gtf",
		ShareUID:    "fs6sg6bw45bn0004",
		ShareSlug:   "fs6sg6bw45bn0004",
		LinkToken:   "5jxf3jfn2k",
		LinkExpires: 0,
		LinkViews:   0,
		MaxViews:    0,
		HasPassword: false,
		CreatedAt:   time.Date(2020, 3, 6, 2, 6, 51, 0, time.UTC),
		ModifiedAt:  time.Date(2020, 3, 6, 2, 6, 51, 0, time.UTC),
	},
	"6jxf3jfn2k": {
		LinkUID:     "ss61xpryd1ob1gtf",
		ShareUID:    "ls6sg6b1wowuy3c3",
		ShareSlug:   "ls6sg6b1wowuy3c3",
		LinkToken:   "6jxf3jfn2k",
		LinkExpires: 0,
		LinkViews:   0,
		MaxViews:    0,
		HasPassword: false,
		CreatedAt:   time.Date(2020, 3, 6, 2, 6, 51, 0, time.UTC),
		ModifiedAt:  time.Date(2020, 3, 6, 2, 6, 51, 0, time.UTC),
	},
	"7jxf3jfn2k": {
		LinkUID:     "ss62xpryd1ob2gtf",
		ShareUID:    "ps6sg6b1wowuy3c3",
		ShareSlug:   "ps6sg6b1wowuy3c3",
		LinkToken:   "7jxf3jfn2k",
		LinkExpires: 0,
		LinkViews:   0,
		MaxViews:    0,
		HasPassword: false,
		CreatedAt:   time.Date(2020, 3, 6, 2, 6, 51, 0, time.UTC),
		ModifiedAt:  time.Date(2020, 3, 6, 2, 6, 51, 0, time.UTC),
	},
}
View Source
var MarkerFixtures = MarkerMap{
	"1000003-1": Marker{
		MarkerUID:  "ms6sg6b1qekk9jx8",
		FileUID:    "fs6sg6bw45bn0004",
		Thumb:      "pcad9168fa6acc5c5c2965ddf6ec465ca42fd818",
		SubjUID:    "js6sg6b1qekk9jx8",
		MarkerSrc:  SrcImage,
		MarkerType: MarkerLabel,
		X:          0.308333,
		Y:          0.206944,
		W:          0.355556,
		H:          .355556,
		Size:       200,
		Score:      100,
	},
	"1000003-2": Marker{
		MarkerUID:  "ms6sg6b1wowuy3c3",
		FileUID:    "fs6sg6bw45bn0004",
		Thumb:      "pcad9168fa6acc5c5c2965ddf6ec465ca42fd818",
		SubjUID:    "ls6sg6b1wowuy3c3",
		FaceID:     "LRG2HJBDZE66LYG7Q5SRFXO2MDTOES52",
		MarkerName: "Unknown",
		MarkerSrc:  SrcImage,
		MarkerType: MarkerLabel,
		X:          0.208333,
		Y:          0.106944,
		W:          0.05,
		H:          0.05,
		Size:       200,
		Score:      100,
	},
	"1000003-3": Marker{
		MarkerUID:  "ms6sg6b1wowuy111",
		FileUID:    "fs6sg6bw45bn0004",
		Thumb:      "pcad9168fa6acc5c5c2965ddf6ec465ca42fd818",
		SubjUID:    "",
		MarkerSrc:  SrcImage,
		MarkerType: MarkerLabel,
		MarkerName: "Center",
		X:          0.5,
		Y:          0.5,
		W:          0,
		H:          0,
		Size:       200,
		Score:      100,
	},
	"1000003-4": Marker{
		MarkerUID:      "ms6sg6b1wowuy222",
		FileUID:        "fs6sg6bw45bn0004",
		Thumb:          "pcad9168fa6acc5c5c2965ddf6ec465ca42fd818",
		SubjUID:        "",
		MarkerSrc:      SrcImage,
		MarkerType:     MarkerFace,
		MarkerName:     "Jens Mander",
		LandmarksJSON:  []byte("[{\"name\":\"lp46\",\"x\":-0.08359375,\"y\":-0.027083334,\"h\":0.044791665,\"w\":0.03359375},{\"name\":\"lp46_v\",\"x\":0.08671875,\"y\":-0.009375,\"h\":0.045833334,\"w\":0.034375},{\"name\":\"lp44\",\"x\":-0.0546875,\"y\":-0.048958335,\"h\":0.044791665,\"w\":0.03359375},{\"name\":\"lp44_v\",\"x\":0.06328125,\"y\":-0.033333335,\"h\":0.045833334,\"w\":0.034375},{\"name\":\"lp42\",\"x\":-0.021875,\"y\":-0.03125,\"h\":0.044791665,\"w\":0.03359375},{\"name\":\"lp42_v\",\"x\":0.03203125,\"y\":-0.025,\"h\":0.045833334,\"w\":0.034375},{\"name\":\"lp38\",\"x\":-0.0265625,\"h\":0.044791665,\"w\":0.03359375},{\"name\":\"lp38_v\",\"x\":0.03125,\"y\":0.0052083335,\"h\":0.044791665,\"w\":0.03359375},{\"name\":\"lp312\",\"x\":-0.06796875,\"y\":-0.008333334,\"h\":0.045833334,\"w\":0.034375},{\"name\":\"lp312_v\",\"x\":0.06953125,\"y\":0.008333334,\"h\":0.044791665,\"w\":0.03359375},{\"name\":\"mouth_lp93\",\"x\":-0.00703125,\"y\":0.09375,\"h\":0.044791665,\"w\":0.03359375},{\"name\":\"mouth_lp84\",\"x\":-0.04921875,\"y\":0.128125,\"h\":0.045833334,\"w\":0.034375},{\"name\":\"mouth_lp82\",\"x\":-0.01328125,\"y\":0.16145833,\"h\":0.045833334,\"w\":0.034375},{\"name\":\"mouth_lp81\",\"x\":-0.0078125,\"y\":0.13333334,\"h\":0.044791665,\"w\":0.03359375},{\"name\":\"lp84\",\"x\":0.034375,\"y\":0.14479166,\"h\":0.044791665,\"w\":0.03359375},{\"name\":\"eye_l\",\"x\":-0.0484375,\"y\":-0.004166667,\"h\":0.030208332,\"w\":0.02265625},{\"name\":\"eye_r\",\"x\":0.0484375,\"y\":0.0052083335,\"h\":0.030208332,\"w\":0.02265625}]"),
		EmbeddingsJSON: []byte("[[0.013083286379677253,-0.0008417412393203858,-0.08209611917089321,-0.019111885734551474,0.021923530432215503,0.018732009048816976,0.035886940137015974,0.1130656608853727,-0.013879639663148906,-0.00007318769249725892,-0.10930376566056604,0.013017650306083043,0.03493398843961118,0.030367043595619828,-0.02661832006282799,0.02317542733842455,0.030808785430323865,-0.0110955273903513,-0.004947671380390304,-0.06481432146179103,-0.03562657031511941,0.01917426998954447,-0.03997564976901405,-0.043818762666068364,0.05985756953306272,-0.05656645149655018,0.006831462179655297,0.004125197643702118,0.08632503986770987,-0.04539499688491293,-0.007410491757254501,-0.02791636441556727,0.008375881368984935,-0.03352591464527212,-0.01024936807666946,-0.013452909148946745,-0.0455983581185236,0.005133020258791293,-0.05195581933944145,-0.07427988463687213,0.00630390028198304,-0.018452912748167127,-0.014417383661195559,-0.018022492860528778,0.05058799136684855,0.007851475361629147,-0.0033008657326001646,-0.037933898483223455,-0.03585054885081868,-0.01316437888895517,0.02913029629687692,-0.06876965414506842,0.027597906058259312,-0.08860803950803726,-0.1005048527606724,0.04859707253378557,-0.0691461480095216,-0.004108821124824582,0.024191758670076023,-0.004501372695590575,-0.003853594934054346,-0.017837990602979782,0.015521848826722015,0.0712632629325235,-0.1510830115846754,-0.00992026634344995,0.03799075369172833,0.09032564313020613,0.010611904884914678,-0.030697168365608873,-0.05355072821183228,-0.08723970013994914,0.03118943933108993,0.031918868148328394,0.0276473572229953,-0.028556344657796252,0.015007092266541835,0.027729347507862684,0.04544274754781616,-0.04999806778117011,0.0570203740294674,0.03835048879960994,-0.0027708371095958684,-0.002584607244562065,-0.058584824699194085,-0.00862370178357778,0.015049961132987713,-0.030933803486454046,0.012191597958574715,-0.0008941357107067466,-0.0348049752091627,0.027176252010889523,0.0461005164432102,-0.000611616832778758,0.009690149103200534,0.016906353393915857,-0.0540479915345624,-0.06223405395795713,-0.09107930214159932,-0.04772242706886826,0.06630155338614292,0.0371553603934971,0.061534576620184384,-0.008096183628180858,-0.03912759815393272,-0.0010451483965827953,-0.01986466956410297,-0.06292796414605956,-0.009854497586070874,-0.033622932201102754,-0.03317653787458191,0.009841683031503618,0.022866690743999052,0.010883092398172488,0.07389167704108482,-0.026557030305857217,0.018303901798465284,0.039156475488107266,0.027918357207828405,-0.0001480534094231541,0.0418863059041099,0.009360184503406473,0.0066549371575869865,-0.09114787981314919,-0.05277049334079438,-0.006547348450791211,0.05643273232859514,0.020804854646027934,0.020563210185937368,0.03710431957835912,0.007350085493263752,0.022986338887986204,-0.05778787991847159,-0.05102941878429307,0.025830275678329274,-0.03450106360057107,0.05655901476028061,-0.009602358944452714,0.04392567950170963,0.03000342953184249,-0.027931746077442407,0.017470708798638532,-0.0020853675052261425,-0.052778450846998406,0.03815768240914008,-0.015791185907723073,0.013690107091628736,-0.030241923396212355,0.02386683317712862,-0.040054973733698596,-0.0005362860328776602,-0.045667531139463646,0.004809388239980688,-0.04368660146511412,0.06624780772342401,-0.03508437913888463,-0.02735953041867514,-0.049531415215267154,0.015232385479245996,0.029788676575147145,-0.007270420735911989,-0.00483835298157672,0.06045303867951421,-0.07321751431425214,0.027037499621521587,-0.02314658845560742,0.012977987011931001,0.0338920730888843,-0.02934176132446363,0.04786481321065313,-0.0099853434624993,0.04710036333722752,0.03620079313865186,0.03142659728114243,0.020671303209698184,0.021940072146660362,0.023176980343224757,0.0273335047667591,0.017490618402760325,0.005401539498251791,0.013324607193214467,0.02206191691620473,-0.05340798466182817,-0.02666354815776871,0.035789468902129674,0.006111693256493996,-0.014217273598336879,-0.06654642278714365,0.03125937059989004,0.009036998859443555,0.030831652781777616,-0.006743640019971343,0.025713677112075055,0.002737925829243218,0.11532702220167632,0.010193843230803735,-0.018608880712900067,0.0182661368411751,-0.010354059696226397,-0.05291579143915337,-0.008871445966897071,-0.03826379089057209,0.06503218323689773,-0.019151803603041757,-0.04401624025926855,-0.020598038608839617,0.0549719546147651,0.04804662532504996,0.06719720238174062,-0.009550789503624911,0.002032473955608653,0.033492208233039285,-0.0628695417182017,0.05324569912564251,0.06466158110317086,0.020970189930197815,-0.09666726337043248,0.008490195641341479,-0.0516978704754736,-0.006569947474299431,0.024991948948137128,0.10914641421456302,-0.06355363498539167,0.05882485652977741,-0.005568942785629271,-0.008071758716211817,-0.009417844753144253,-0.026433215159494088,-0.014227678644777388,0.018017590289304795,-0.07129450514512375,-0.0708594229123611,0.03558326518524753,-0.060551328028659285,-0.08971297342586781,0.048606276640859605,0.013698177071856367,-0.10632782829628176,0.035194156617197464,-0.001514524333586599,-0.003284936024666071,-0.010610022841610223,-0.026353644208784097,-0.0756555182447809,0.006917807405184778,-0.008448940804665697,0.012945650233465797,-0.06885090703880026,-0.01282493638582312,0.03620416582690009,-0.04714547933787471,0.04165291274994665,-0.05630506546420454,0.006535473747742799,-0.05616517690430344,-0.0424117201954821,0.04934250937231119,0.0002782908897474485,-0.06576264617783395,0.0007804542877428323,-0.017453343600832304,0.05303934358091256,-0.04258394001519607,-0.03761616460226988,0.040558008488680415,-0.015852873973244943,0.04338369049682073,-0.038307809372870774,0.03195641782757293,-0.00019853418620736224,-0.04181547994384756,-0.027570351051252263,0.047757896025647256,-0.030180422673836575,-0.019098716778121888,-0.033220129850543,0.033745386845985235,-0.02914234790381103,0.021620469317530307,-0.002993040475354859,-0.004306910603886914,0.05252393178344085,0.018238923290511508,-0.0505983228913245,0.023705198793838048,0.07577292350424274,0.0014736021541189217,0.03111441553456347,-0.012417652509290868,-0.05776897103883481,-0.023670317123087183,0.0004221553678146815,-0.02416520591767781,-0.029677172684166905,-0.009372403123451053,0.01654082334451182,0.060842899450099366,0.03948324200214154,0.038052927911825477,0.014108309859468487,0.04813818069335009,-0.02441899069401087,0.020808310411613996,-0.037474272736876896,-0.06004071322609525,0.032662071026840024,-0.008540109905698163,-0.12289480293569909,0.003627159525091088,0.03431694435142312,-0.04679603276998805,0.012600288742191802,-0.03407080776795511,0.012607637601113338,-0.00274275178984415,-0.10109467088687876,-0.00479177571567921,0.02555864238974216,0.03155090680285233,-0.039512967276967036,0.03892612199885759,-0.04773379112888146,-0.03777726056631625,-0.07283576105900756,0.04208798547499858,-0.026195316784423644,-0.003131513332842386,-0.02120362215380533,-0.02147289297128728,-0.06498069916066307,-0.010129669220282668,0.038033452783854504,-0.005085518261350343,-0.020403551664959857,-0.05177625357356287,-0.0291603351576675,0.035294007514233935,-0.054377693053421355,0.011043501763162851,0.013304223698515132,0.011834432199962955,0.02468077462042661,0.06144857444676882,-0.0069509478840081036,-0.014208774295169773,-0.005519393089432412,-0.018743923608559275,0.0035282198330921213,-0.03417057605121021,0.028826778469174617,0.054483401958304235,-0.013987177966055604,-0.023332861050734788,-0.014384739638733353,-0.05148028038713433,-0.04441060647409025,0.04024766099598391,0.020434658589868544,-0.03212184470666024,-0.07758028871063832,0.024630638023590817,-0.048726046105757745,0.006032505758370981,0.07985060653076315,0.0020415866602216193,0.016866603296872947,0.07147056943475565,0.01182418661535112,0.018729739573343347,-0.03622004529237187,-0.008059876189195648,-0.00014636026636699606,0.028454044031684722,0.013684267399755617,-0.012746680717399417,0.0018882857708049112,-0.05493729370408263,0.020009022705029966,-0.050213347633426234,-0.020157150030705038,-0.055311095074545985,0.027012058064298357,0.013411562931035188,0.016160956066286085,-0.005456387724283943,-0.02270143088776757,-0.03594066677474095,0.02833773728847372,-0.04600819354680914,-0.11331143629439558,0.029632066033192135,-0.01269836530772469,-0.046539446669959295,-0.039600703127405074,-0.02231484971130182,0.03993500698064517,0.04060571387440634,0.023710993913428118,0.05994155566703202,0.05409081460922181,-0.08355746279384375,0.026962505697472064,-0.041500160948598826,0.05526550865362406,0.0006430966353780671,0.021306736511105456,0.01008664695702226,0.027661954151728785,0.08311226783885473,-0.019474197643928454,0.01845719356300516,0.054391452689897965,-0.006115817264380924,-0.02012449042630069,0.006798234676506495,0.014243834945741392,0.013357109546783085,0.027838602195878727,0.018680474301986386,-0.038735844415354846,-0.046708348432525824,0.028407716679578754,0.04328540743726782,-0.022115873850309144,-0.03604906356520794,-0.025413516329231417,-0.02239256662799831,-0.01677705278881294,-0.04813641776722311,-0.02808171168011942,-0.0443166915179659,-0.05970362736522693,-0.03638514735850824,-0.012625067535442827,0.02394570507826864,0.002181791920050441,0.017601017716527563,0.0032437402837267003,0.08425851686888738,-0.00603766293552204,-0.01691088659088983,-0.05346186556742909,0.019029366189163472,-0.0403277179130176,-0.02849027109106599,0.039392669458533605,-0.024188651309162333,0.029427812064949856,0.05460656107101938,-0.04224216304237367,-0.001151987515719353,-0.02992073491541959,-0.018980641354980943,-0.023360852867482285,-0.03506254709717968,-0.005359797012511573,0.0007030638974681383,-0.006093460236658965,-0.05158155952470586,0.03167184276205448,0.007239262146689015,-0.003995825997744788,0.04558433020675273,0.012692398973392381,0.04127113999962988,0.028034226588366434,-0.00888464239045704,-0.04218542664832515,-0.035293951425799136,-0.009173719667769722,-0.013814508776230949,-0.0438299186964249,0.012964734389111002,0.061972571292086796,-0.019226950824753272,0.03785439390418035,0.05836532638520117,0.0228791390103789,0.04639874746261275,-0.002812894467373599,0.0313486937657627,-0.04867871016344801,-0.07671660406441266,-0.028148255985457477,0.004871424517440527,-0.023003205638472232,-0.08879834736668175,-0.07027316315816913,0.0277985042963572,0.06478227354913275,-0.04479913918985788,-0.062344644579290356,0.026625909861371734,-0.09537302949130397,-0.007135585992017663,-0.07217362291089954,0.0309010502021888,-0.04440357441971946,-0.014851124981416029,-0.00045293809211537604,0.02799076885176355,-0.04389762462891212,0.014608463214438512,-0.0653041045652005,0.009671125838998623,0.05527584321815711,0.02699751891222959,0.00445187797640552,-0.00559217003875512,-0.05425868137108917,-0.04070049482661186,0.003998944935553823]]"),
		X:              0.6,
		Y:              0.7,
		W:              0.2,
		H:              0.05,
		Size:           160,
		Score:          50,
	},
	"1000003-5": Marker{
		MarkerUID:      "ms6sg6b1wowuy333",
		FileUID:        "fs6sg6bw45bn0004",
		Thumb:          "pcad9168fa6acc5c5c2965ddf6ec465ca42fd818",
		FaceID:         FaceFixtures.Get("unknown").ID,
		SubjUID:        "",
		SubjSrc:        SrcAuto,
		MarkerSrc:      SrcImage,
		MarkerType:     MarkerFace,
		MarkerName:     "Corn McCornface",
		LandmarksJSON:  []byte("[{\"name\":\"lp46\",\"x\":-0.10546875,\"y\":-0.045898438,\"h\":0.033203125,\"w\":0.044270832},{\"name\":\"lp46_v\",\"x\":0.11328125,\"y\":0.0126953125,\"h\":0.034179688,\"w\":0.045572918},{\"name\":\"lp44\",\"x\":-0.053385418,\"y\":-0.0546875,\"h\":0.033203125,\"w\":0.044270832},{\"name\":\"lp44_v\",\"x\":0.09375,\"y\":-0.0078125,\"h\":0.033203125,\"w\":0.044270832},{\"name\":\"lp42\",\"x\":-0.015625,\"y\":-0.030273438,\"h\":0.033203125,\"w\":0.044270832},{\"name\":\"lp42_v\",\"x\":0.0546875,\"y\":-0.0087890625,\"h\":0.033203125,\"w\":0.044270832},{\"name\":\"lp38\",\"x\":-0.033854168,\"y\":-0.0087890625,\"h\":0.033203125,\"w\":0.044270832},{\"name\":\"lp38_v\",\"x\":0.037760418,\"y\":0.01171875,\"h\":0.032226562,\"w\":0.04296875},{\"name\":\"lp312\",\"x\":-0.091145836,\"y\":-0.02734375,\"h\":0.033203125,\"w\":0.044270832},{\"name\":\"lp312_v\",\"x\":0.08984375,\"y\":0.021484375,\"h\":0.033203125,\"w\":0.044270832},{\"name\":\"mouth_lp93\",\"x\":-0.026041666,\"y\":0.07714844,\"h\":0.033203125,\"w\":0.044270832},{\"name\":\"mouth_lp84\",\"x\":-0.102864586,\"y\":0.08496094,\"h\":0.033203125,\"w\":0.044270832},{\"name\":\"mouth_lp82\",\"x\":-0.05859375,\"y\":0.12109375,\"h\":0.033203125,\"w\":0.044270832},{\"name\":\"mouth_lp81\",\"x\":-0.045572918,\"y\":0.10058594,\"h\":0.033203125,\"w\":0.044270832},{\"name\":\"lp84\",\"x\":-0.0065104165,\"y\":0.1171875,\"h\":0.033203125,\"w\":0.044270832},{\"name\":\"eye_l\",\"x\":-0.059895832,\"y\":-0.015625,\"h\":0.022460938,\"w\":0.029947916},{\"name\":\"eye_r\",\"x\":0.059895832,\"y\":0.015625,\"h\":0.022460938,\"w\":0.029947916}]"),
		EmbeddingsJSON: []byte("[[-0.01391313475,-0.031814132,0.017377053075,-0.01851261325,0.021255451499999998,-0.051055306,0.0366150855,0.007998470175,0.0695672645,-0.1067636275,0.0307072165,0.02941578425,0.054768010500000006,0.041151049,-0.06493903375,0.0015896528499999996,-0.05437162425,0.011924136,-0.025054364,0.0009921848250000003,0.012807875,-0.01319641825,-0.00488935855,-0.07366566999999999,-0.0611034065,-0.06666547924999999,-0.04888238425,-0.035091203,-0.01854779615,-0.024557007999999998,0.0030882324,-0.055875238499999993,-0.0246700375,-0.02172630285,-0.025565405,0.058197003,0.0547107775,0.047857131,-0.04580487,-0.00021249714999999926,0.009770386499999999,0.044646309999999995,0.0018705221250000003,0.0371642205,0.018666550325,-0.0032051121500000002,0.0057689690000000005,0.06864431525,-0.04906746575,-0.07431345875,-0.0647896445,0.0120775261,-0.02890944,0.01879340475,0.024201165499999996,0.04355076025,-0.014099167999999999,0.026033113750000003,0.025052837749999998,-0.068487575,0.022659832499999998,-0.0027816580000000002,0.03500908899999999,0.012073708,0.006179701499999999,0.034802054,-0.01799351825,0.0457090165,0.0036213202500000002,-0.008580024424999999,-0.072938294,-0.016224131250000003,0.06459961750000001,-0.04963675325,0.08387918625,-0.13179572750000002,-0.011209804,0.011490459325,-0.04273579375,-0.0603162555,-0.03941750125,0.061718414,0.029566903,0.011713920749999999,-0.07820421,0.042141458,0.04053815075,-0.0431640475,-0.009912542250000001,0.0083520422,0.04968228825,0.061740414,-0.003251780325,-0.0009849047250000001,-0.07888640699999999,0.00013775579999999977,0.0545293975,0.0314430285,-0.025010752249999997,-0.0754261725,0.00026732155,-0.04167998875,-0.038423044,-0.012128476325,-0.042172063999999995,-0.03992470075,0.055492729500000004,0.005174035799999999,-0.0491557875,0.047224008,0.027870127375,0.11123915125,-0.0017566490000000008,0.06637293625,0.08444959,-0.038633152000000004,0.040549324,0.0181765085,-0.0103707255,-0.052444608749999996,-0.0721162075,0.0017395296250000006,0.03576854825,-0.0010544938500000002,-0.03536455575,0.026296009000000002,-0.011038092,0.009561795625000001,0.0061376165,0.016413343999999996,-0.0007041408250000004,0.008430746000000001,0.007772767000000001,0.035255850500000005,0.03609753,-0.004700959499999999,-0.0244996355,0.029143511,0.0019076424499999993,-0.02425797625,-0.02824462725,0.03748850525,0.004536174249999999,0.094921252,0.0402888305,-0.035919796500000004,0.0325914395,0.028936399249999998,0.0100435923175,0.051378176750000004,0.0466342265,-0.104555035,-0.058734387250000006,-0.053190730000000006,-0.004201957500000001,-0.0030598753299999996,-0.009583216875000002,-0.05078611825,-0.037133980925000004,0.0406709395,0.01118452775,-0.028617762,-0.006732865225,-0.03122189575,-0.054440001749999994,0.055957135,-0.054629830500000004,0.00548484575,0.0018623927500000005,-0.0054835023,0.04359883825,-0.04169836625,0.025491153,0.035283773500000004,0.020951236874999998,0.017083047,0.011288541499999999,0.029325848999999998,0.031001949125000004,0.04632318125,0.058114136999999996,-0.018353527600000002,0.0010329377499999999,-0.05167622725,0.0015087445249999999,0.0665028595,-0.017552406,0.0030785925075000006,0.067237884,-0.045436311,0.022067097,-0.068492519,-0.09581154575,0.02946200275,0.019267693750000002,-0.013623341,-0.0023418241499999996,0.057798097500000006,-0.02830513875,0.00967313775,-0.0156008155,-0.038696254,-0.046455728749999994,-0.020938623415,0.00489014375,0.0191956194,0.01110382618,0.020775547499999998,0.116135215,-0.040037983750000006,0.039333228250000005,0.011678268775,0.0650113585,0.0023590035,-0.05381264350000001,-0.008376887255000002,-0.05688126,0.01151456675,0.00003846570000000035,-0.01287236325,-0.06661450099999999,-0.03827642075,-0.045446761,-0.03154112575,0.028140978,0.070225409,-0.020004859,0.0193362475,-0.0034820117499999997,-0.074293175,-0.04876132,0.0074359382499999994,0.0066796961250000005,-0.011634815875,0.009048144557499999,0.0344562235,-0.01762691475,0.019571052749999998,0.026697968750000002,0.015484052000000002,0.03876590725,0.0037216567,0.04729691375,0.008930467375,-0.07800198875,-0.043134631,0.0424968855,-0.0057933688750000005,-0.075971065,-0.005398360425,0.01736323075,-0.03068225125,-0.0700152155,0.012127145199999998,0.052686005499999994,0.00609444565,-0.05195201175,-0.01496918725,0.032330921,-0.0251999175,-0.0317094965,0.0063436068250000005,-0.046775514000000004,0.024125194250000002,-0.025942028000000002,0.0683850275,0.048410787250000004,-0.020441745875,0.0014374775000000001,-0.007761475925,-0.003657494249999999,-0.01002698675,-0.0033783719824999996,-0.01613361275,0.054106417000000004,-0.0499455445,0.07898722825,-0.014621054499999998,0.08328554125,-0.02660218675,0.0029891759249999995,-0.010516797999999999,0.03557642825,-0.060217531,0.0171425431,0.03266155825,-0.0598199765,0.021716342,0.0851276085,0.06803951925,0.02062912125,-0.008283969975,-0.032307963655,0.0506742335,0.020532822,0.0360789155,-0.0006283978250000003,-0.02785933975,-0.0030728417500000002,-0.034540906499999996,-0.0300205485,0.1115321695,0.053453546000000005,0.0703359815,0.010377180074999999,0.036756731075,-0.00297751195,-0.077184735,0.0264304635,0.0481822745,0.073460445,0.06669125100000001,0.09291405250000001,0.05010346175,0.029880568250000003,-0.034649416,0.029474834999999998,0.031317542500000004,-0.02699742575,0.0557845065,-0.05035647375,-0.0022147215,0.0213037777,0.07004532675,0.0264894885,-0.04297427725,0.07081584375,-0.00481877925,0.0048342215,-0.02130823725,-0.025961382749999998,-0.06262777725,0.034384046749999994,-0.0190645906,-0.031134641674999998,-0.068910896,0.06261982975,-0.0260708335,0.09122910349999999,-0.03100116965,0.049027657,-0.01474484825,-0.03469707425,-0.006989758326499999,-0.056124094,0.009483469874999999,-0.04452728725,-0.011856436750000001,-0.02315196925,-0.0312197325,0.04668023435,-0.013576097,0.12342725624999999,0.009619299000000001,-0.03253524225,0.00691780145,-0.007575374,0.017970803,0.039913282575,0.01719394935,-0.034085923000000004,0.0160938888,0.047048848750000004,0.05772991225,0.03188324875,0.005430960675,-0.015838408499999998,-0.020243144275,0.017690586,-0.038486903249999996,-0.0037113453749999994,-0.05992632025,-0.0066788766,-0.009260173449999999,-0.043526957500000005,0.035566587250000004,0.0520154155,-0.03742566475,-0.012924420124999999,0.05485878925,0.017260086875,-0.00945986855,0.06038467375,0.028211044,0.01180591125,0.076735146,0.010415625750000001,-0.026288575499999998,0.03359009575,-0.029869059499999996,0.018123453499999997,-0.039763396500000006,0.013718122,0.015185622250000001,-0.021508391,0.0933689765,0.0861815165,0.01772232125,-0.03339793175,-0.018280382249999998,0.024922235325,-0.00670621405,-0.004941027,-0.0030330302750000006,0.049037655,0.0407625665,-0.098270484,-0.010615769,0.014149342125,0.0732888865,0.01031384975,0.0708132685,-0.0248589595,0.01914073765,0.023424223175,0.0017784540000000003,-0.0016458964999999989,0.034801676250000003,0.0007287893750000003,-0.00010908749999999942,-0.10601041950000001,0.035614491750000005,0.0023196674499999996,-0.07413317850000001,-0.03187354875,0.0022230885000000004,-0.022146297500000002,-0.0020944157250000002,-0.053558506000000006,0.005407627825000001,-0.00868874405,0.049080156750000006,-0.015095300350000002,0.050741894499999995,-0.0644765125,0.049679071875,0.011181570100000001,0.08374534125,0.047086234500000004,0.04629623975,0.07211018675,0.01747124065,0.03838733075,-0.02483115725,0.059315212,-0.007435562849999999,-0.033800771,-0.062262683750000006,0.018508591749999997,0.05456382,-0.032214809750000004,-0.0060910296,-0.0688426575,0.028439918925000002,-0.050798488,-0.032318176500000004,0.0070076956499999996,-0.0850821425,0.0116441195,-0.06209254825,0.0392326955,-0.038714852,0.042342809,-0.07345825249999999,-0.0783221335,-0.00245315065,0.0052674726500000005,0.06709293425,-0.033900455,0.059125045,-0.0089869296,0.03726652275,0.036819674749999996,-0.066015052,0.0090962235,-0.0532330595,-0.0423983279,0.054948274,-0.0021313933875,-0.036738087749999995,-0.061552870499999995,0.01083386435,-0.000004987750000000173,0.03250943875,-0.00265433175,0.023262875250000002,0.04094322,-0.0458693885,0.004981979125000001,-0.01146187345,-0.017557853249999998,-0.02698673775,-0.02743749775,0.015717598925,0.00637069715,0.0225431645,-0.024064882425,0.07339412125,0.031813663,0.04107066175,-0.0605346105,0.005952673775,-0.06258660275,-0.0320774,-0.049892332,0.024880522500000002,0.0639617125,-0.0702298615,0.017941317249999998,-0.005220711350000001,0.014933126924999998,0.0115449712]]"),
		X:              0.2,
		Y:              0.3,
		W:              0.1,
		H:              0.1,
		Size:           200,
		Score:          50,
	},
	"1000003-6": Marker{
		MarkerUID:      "ms6sg6b1wowuy444",
		FileUID:        "fs6sg6bw45bn0004",
		Thumb:          "pcad9168fa6acc5c5c2965ddf6ec465ca42fd818",
		FaceID:         FaceFixtures.Get("john-doe").ID,
		FaceDist:       0.2,
		SubjSrc:        SrcAuto,
		SubjUID:        "",
		MarkerSrc:      SrcImage,
		MarkerType:     MarkerFace,
		MarkerName:     "",
		LandmarksJSON:  []byte("[{\"name\":\"lp46\",\"x\":-0.08359375,\"y\":-0.027083334,\"h\":0.044791665,\"w\":0.03359375},{\"name\":\"lp46_v\",\"x\":0.08671875,\"y\":-0.009375,\"h\":0.045833334,\"w\":0.034375},{\"name\":\"lp44\",\"x\":-0.0546875,\"y\":-0.048958335,\"h\":0.044791665,\"w\":0.03359375},{\"name\":\"lp44_v\",\"x\":0.06328125,\"y\":-0.033333335,\"h\":0.045833334,\"w\":0.034375},{\"name\":\"lp42\",\"x\":-0.021875,\"y\":-0.03125,\"h\":0.044791665,\"w\":0.03359375},{\"name\":\"lp42_v\",\"x\":0.03203125,\"y\":-0.025,\"h\":0.045833334,\"w\":0.034375},{\"name\":\"lp38\",\"x\":-0.0265625,\"h\":0.044791665,\"w\":0.03359375},{\"name\":\"lp38_v\",\"x\":0.03125,\"y\":0.0052083335,\"h\":0.044791665,\"w\":0.03359375},{\"name\":\"lp312\",\"x\":-0.06796875,\"y\":-0.008333334,\"h\":0.045833334,\"w\":0.034375},{\"name\":\"lp312_v\",\"x\":0.06953125,\"y\":0.008333334,\"h\":0.044791665,\"w\":0.03359375},{\"name\":\"mouth_lp93\",\"x\":-0.00703125,\"y\":0.09375,\"h\":0.044791665,\"w\":0.03359375},{\"name\":\"mouth_lp84\",\"x\":-0.04921875,\"y\":0.128125,\"h\":0.045833334,\"w\":0.034375},{\"name\":\"mouth_lp82\",\"x\":-0.01328125,\"y\":0.16145833,\"h\":0.045833334,\"w\":0.034375},{\"name\":\"mouth_lp81\",\"x\":-0.0078125,\"y\":0.13333334,\"h\":0.044791665,\"w\":0.03359375},{\"name\":\"lp84\",\"x\":0.034375,\"y\":0.14479166,\"h\":0.044791665,\"w\":0.03359375},{\"name\":\"eye_l\",\"x\":-0.0484375,\"y\":-0.004166667,\"h\":0.030208332,\"w\":0.02265625},{\"name\":\"eye_r\",\"x\":0.0484375,\"y\":0.0052083335,\"h\":0.030208332,\"w\":0.02265625}]"),
		EmbeddingsJSON: []byte("[[-0.015105677000169373,-0.0005582744874266051,0.0480268501406662,-0.03601115760977173,0.0005837739331054689,0.014168089953522492,-0.03945336629091645,-0.02582770810183487,0.020898761370506287,0.049166841007919314,0.021960500727076723,-0.019064476425213243,0.02198730232398834,0.0006670523258575441,0.03028046368291855,0.00649638007861023,-0.01584042613295212,0.00530397326763153,-0.06404373233350608,0.03889477750802231,-0.0365899261901268,0.0360787547656456,0.07579429823342132,0.039115246617597965,-0.0777424514863777,0.035950400633987425,-0.01904672616637268,0.031240118709612276,-0.01142303718094612,0.021169409966093445,-0.04066713893357315,0.048964979162612915,-0.016256413336937715,-0.02378354035888214,-0.020449917192553707,-0.02040227800516968,0.06541690078029251,0.016761249534914705,0.03380005035063598,-0.10038679582336427,0.043679719882033535,0.03128701222455444,0.012390233834701538,0.05524386205410767,0.021537026348385238,-0.016655772903281404,0.007295974349593354,-0.000005785312992858532,-0.047790829845092773,0.017440576051146697,-0.06534523391118621,0.06609203363401413,0.03238222320728302,0.006614993631034087,-0.054927458582173155,0.030833110256991578,-0.0056855157837505345,-0.007370784518985901,0.0013351148462055202,0.047366844577483365,0.04135019693103943,-0.02510304556774292,-0.05305447016115189,-0.03180977055114746,0.012452435193779296,-0.031038226814250947,-0.06159064720963287,0.057565623878417974,0.006987256155133055,0.10980759767712402,0.0014624758511650082,0.04941792959784012,0.02249399537556839,-0.007318808567618561,0.011643714617645264,-0.033996864613095854,-0.10756568994960479,-0.008790611639031982,-0.06265860528228379,-0.03834362793397904,-0.007061803256170654,-0.02360514984864273,-0.030340688408576965,-0.006711280069554138,-0.026063804222563172,-0.06257436487065124,-0.03489222804085922,0.023775160926244356,-0.05953325934691238,-0.0015599671627334586,0.04257923482005539,-0.02072714042014847,0.042186514202873227,0.03334131403590164,-0.04231802868860626,-0.03938228046069336,0.04991599600813751,0.005012853217630309,0.02852926982268677,-0.04592934168044281,-0.0446876756071167,0.05780069138760376,-0.06523845092017364,0.03691154157677917,0.0048527119732078555,-0.008498008999919891,-0.06625776342607116,0.013960302090915604,-0.029253019821994783,0.02477269871644745,0.010155390116101837,0.03100301871340158,-0.07413353268207168,0.01750142506529999,0.03461705135130691,0.04982243958808899,0.00851692480498886,-0.002991416728403473,0.01759018484255066,-0.07281463888115311,0.07669263036101531,0.0287119138326683,-0.0011225693401481635,-0.022214332482351686,0.08318748801869094,0.06656315672954559,0.0034995880579914086,0.04958693578422928,-0.027691547638692474,-0.03405751975708465,-0.062014044191894525,-0.0004367024225837711,0.007944679561768342,0.03339219333856888,-0.04039564807562256,-0.06730881179145813,-0.07099339792601776,-0.033052287483390806,-0.050682249608245855,0.011561693050074387,-0.09867453691846315,-0.02774825273226944,0.010811723733195496,0.02427582366474533,-0.02078586645137596,0.01433492286357048,0.026900254564299775,-0.05306856266233825,-0.007102414552368164,-0.02275204349867813,-0.03211197205357055,-0.014967170406674196,0.022953155306690905,-0.03644228327174301,0.012341418549354555,0.020687427985451052,-0.09076456366364288,0.031082595049208066,0.04102866745965958,-0.02306090883122635,0.027812227150472258,-0.013119295590370941,-0.004158771480469893,-0.007025444076653517,0.009275999232177735,-0.039368103392872236,0.01910143328294525,-0.05630273885418091,0.055353015055413055,-0.0014070097039474495,0.042947509516956334,0.0024906970417621615,-0.03561797166536834,0.006505803784743882,0.006665486497595978,-0.006378142944042969,0.05448368035679932,0.07332471840206146,-0.0014946864171386718,-0.008414893981474686,-0.00006825545633163364,0.02668107540572357,-0.024539537215417483,-0.07293688736830901,0.06344162595002364,-0.033607367797969814,-0.01986442914540863,0.026089177944317626,-0.022147074482840423,-0.08048881567908478,0.050637503425783534,-0.06346700348937226,-0.015700777833213043,-0.04264569287159348,-0.002655311902906036,-0.03654008229608307,-0.007810925734401397,-0.0435794361814415,-0.011699671276438905,0.057055175916534424,0.04544679800120926,0.037604382557088464,-0.02941164037058258,-0.05797836845658112,-0.06812897444572831,0.08032934278161621,-0.01328043643980198,-0.08971531949739076,0.0065821178142807,0.008762343139662933,0.020370728524544524,0.03974483299145508,-0.0051898651247510525,-0.0031604766306224056,0.07640609197084428,0.038082580676622776,0.05806105880397415,-0.014124205852999725,0.007738546446239335,-0.04230980231715012,-0.01059650656994934,0.010447661136037827,-0.04688999712561989,-0.06730292583744431,0.016754640387374113,-0.011607031355502319,0.023310211609113313,0.08731236136631013,0.05903231309516144,0.04731763803346557,-0.02573253768891525,-0.06296218933005523,0.04012439522837066,0.025853857002137298,0.007843758596900636,0.046765933136711124,-0.0018710897452026364,-0.005570995783544921,0.0005954957864215851,0.029306860778232576,0.03074633266388397,0.02318916068950821,-0.011157762649505614,-0.013694216304312515,0.015094815793841173,-0.008802384161989595,0.032486344160458376,0.05804673958212662,-0.006112833595197296,0.006215988022933197,0.04096582699106979,-0.03384389014125061,-0.01596561475662651,-0.010684742677253074,0.07758476984541932,-0.005856569876429291,0.024524756417617796,-0.007312638971189117,-0.017082938609609223,0.0011795664558563231,0.0134139216274601,-0.09028529851032258,-0.039419858379217534,0.022968888672964094,0.004521465961741944,-0.06451345260910797,-0.04178954661956787,-0.024166587057536396,0.012531514465320588,0.02323170220531845,0.04000117979464722,0.03214717679358063,0.056948825253341676,0.05539476134574128,0.013257249967432405,-0.0001733097061775205,-0.01234630922813568,0.0645579352090454,0.029838023576596068,-0.06455350567951279,-0.013353814450276946,0.0018903859134303275,0.0483956355803524,-0.004311148732519531,-0.014597871326852417,-0.006853384533165969,0.04057120248826332,0.007104495398272705,-0.027431613068233492,-0.09228961372112274,-0.06612821609320907,0.0607875549739154,-0.026342729023012542,0.06454961398086471,0.004993419094538574,-0.031680751000938416,0.007030828889411162,-0.010022039687029268,-0.05428986021428299,0.017565788880432403,0.04025441392524147,0.009023673541622163,0.009042981797892759,0.019972970522025298,0.058956133531005865,-0.008320068883990478,0.02986469039841843,-0.053139615835475926,-0.024647880182499998,0.007398424838289642,0.09050773480216218,-0.015264475845877838,-0.06385353173209762,0.016500261584825135,0.02948610469222336,-0.02504260549529915,-0.018835162326039122,0.050848700451684575,-0.03199441179409637,-0.019780421813622284,-0.027626615849293518,-0.03419102001171112,-0.014344497819357758,0.07330804638220215,-0.02937739203966522,-0.00813064343063736,-0.01626787766690979,-0.011862281442715148,0.01708495452203865,-0.07908452169694902,0.023940025203119657,-0.13222904368403626,0.048117978374713134,-0.017696039928765107,0.004759198936071777,0.01974903359319687,0.010760925580199815,-0.005599215416766357,0.0457550643199234,-0.01929695170711136,-0.007629453917987061,-0.010118543879554747,0.015504727550686645,0.03245994598398285,0.05049195915774918,-0.06673184178328552,-0.01761782965561676,0.008011984665633392,0.023189021348875426,0.06720727829968262,0.010742643820915984,-0.03080342023261017,-0.050128828091691585,0.04935064662135315,0.012293871085033494,0.05639020959568253,-0.02957390940026932,-0.03676535286145477,-0.004796114565882111,0.05806600428461456,0.018004375270679475,-0.020827009949742126,-0.0336628292589238,-0.0018759192028083797,-0.06518067211773682,-0.02731396445179306,-0.03430377823384857,0.016512887052202073,0.061277289867412564,-0.019134398406000827,0.05822277240970993,0.044241398569797516,-0.005043084829421997,-0.04018607674626312,0.06927013858769607,-0.004344519528141023,0.012868128092136383,-0.08525498011501847,0.03454513801989975,-0.024010073233037568,0.02195751011467056,-0.006334513400955963,0.06579357440817261,-0.009711559918811036,-0.013345796425511931,0.014702989589321902,0.025344240384365696,0.021528159041582107,0.062108358473124695,-0.05624000855096435,0.05573243638398361,0.006079895555899353,-0.002001432319259644,-0.002443507762801743,-0.010721616536909867,-0.04295436979775849,0.08180931740979766,-0.014715828856610106,-0.03683209432014542,-0.012104101579055901,0.013437134275827486,0.06964065576705855,0.06482510509484864,-0.03570993432865906,-0.05314338450149346,-0.11395284172808075,0.01426200422902832,0.012089334595506287,-0.058501489031186675,0.060430661880981444,0.0500264671381279,0.056157483018959044,-0.05001220665976715,0.07527209592948914,0.031277665487422945,-0.02043782967053299,-0.08342602471109009,-0.0008383195362091063,0.045666852330976865,-0.05341016683117676,-0.0003998352299102786,-0.03577085955021919,-0.038460902215493774,-0.01896648460201416,0.012595410857717131,-0.0060184891112971504,0.019921306564183502,-0.060824947492757256,-0.08852370824755859,0.003392263133862915,0.0036400299628715506,0.03255903972799225,-0.008351102953604507,0.01567778415994263,-0.00023129789984893678,-0.023584983993255156,0.06815277690185165,0.032341226983652875,0.0026074800379161833,-0.0395687710902481,-0.003838149411266327,0.04100280903240967,-0.019130064566046143,-0.07410366493117905,-0.07626375565908813,-0.014898051247527312,-0.02028174410337219,-0.0413983021689148,0.05420100971967316,0.02752598950049637,-0.024227222049773407,0.01466367372080475,0.013159825923877717,0.03946128732824249,0.02427177671503067,0.03591388100347939,-0.003222521540391235,0.0183274046263958,-0.03000545738402557,-0.04066711644104462,0.017155749921449585,-0.06134375247813416,-0.036362408407546995,-0.019471377535612868,0.034648935124684144,0.01776573165824356,-0.005382945029614257,-0.034531315796222685,-0.004955845186902466,-0.023998231859699858,0.03130629873801392,-0.012495260702575683,-0.031263154234012984,-0.063910194205719,0.01745994660978073,0.038960702542871095,0.04021203330704117,0.023016385340854643,-0.0403753269719162,-0.018214478771432493,0.009230925650691108,0.031802766191501616,-0.0060094809595568855,-0.05665428473038101,-0.0026934481642271802,-0.01278887994417572,0.013757778161637,-0.06991252187433472,0.025432326767399597,-0.05928275511783676,-0.0071204498857164004,0.009102611771803285,-0.048021745720825196,-0.04234071017774048,0.0378105065918541,-0.0030949641070522308,-0.0802945368397522,-0.029345935146197513,-0.055173430818717964,0.035613126717409516,-0.07929294203311157,0.011167600883222962,-0.010140670248493196,0.018876611506684494,0.038331590555036925,-0.021097202962330627,-0.02206313974373703,-0.0409461827742096,0.07130217153391571,0.06408282878469848,0.005774317041436768,-0.07263691064697265]]"),
		X:              0.494531,
		Y:              0.282292,
		W:              0.285937,
		H:              0.38125,
		Size:           200,
		Score:          100,
	},
	"ma-ba-1": Marker{
		MarkerUID:      "ms6sg6b1wowuy555",
		FileUID:        "fs6sg6bqhhinlple",
		Thumb:          "pcad9168fa6acc5c5c2965ddf6ec465ca42fd818",
		FaceID:         FaceFixtures.Get("fa-gr").ID,
		FaceDist:       0.5,
		SubjSrc:        "",
		SubjUID:        "",
		MarkerSrc:      SrcImage,
		MarkerType:     MarkerFace,
		MarkerName:     "",
		EmbeddingsJSON: []byte("[[-0.072142504,0.042257983,0.052759748,0.0013519295,0.047474314,0.013890485,-0.0101158675,-0.04595832,0.09635148,0.048310738,0.06103825,0.040138435,0.049146496,-0.007248736,0.004368155,0.008675123,-0.042142674,-0.04474999,-0.02047639,0.022352137,-0.067407444,-0.03157175,0.048805416,0.021838054,-0.044695962,0.0685471,-0.008910802,-0.01793957,0.0033625022,0.0019502316,-0.036237836,0.015395115,-0.049661785,-0.058531173,-0.02776332,-0.0032393914,0.0986681,-0.054832466,0.018980134,-0.03851389,0.053241864,-0.015806986,-0.04193845,0.031221129,0.019176105,0.011330498,0.017154546,0.02969384,0.014814939,-0.05246724,-0.03785157,-0.028708491,-0.09044295,-0.009864502,-0.02901912,0.016612405,-0.036076095,-0.0539092,-0.04383653,0.044117514,0.007808266,-0.004581591,-0.0514201,0.035549052,-0.027806975,-0.020888407,-0.06917216,0.007323796,-0.020771176,0.027214328,0.07905205,0.030122623,0.045344252,0.027033372,-0.02054183,-0.01684333,-0.047652125,0.0005995308,-0.029103162,-0.009733045,0.062223505,-0.0015163408,-0.024336698,0.01978162,0.012692482,-0.018910756,-0.012763021,0.024916025,0.056155477,0.01871617,0.026163457,0.051118918,0.01801808,0.074066944,-0.008888246,0.006928741,-0.02687047,0.05188839,-0.0033747158,-0.02929846,-0.028971521,0.0049656206,-0.045891214,0.026578758,-0.020418812,-0.018325623,-0.0434573,0.0032855717,-0.0028597312,0.004814863,0.05696523,0.012545018,-0.065763384,0.11980642,0.049446754,0.05029431,-0.0042775245,0.008624839,0.025512578,-0.01719362,0.10957161,-0.026287358,0.054676928,-0.07486487,0.06810067,-0.054471407,-0.032047126,0.045834243,-0.05465876,-0.018601527,-0.0036667932,-0.017722705,-0.010312282,0.03885071,-0.059362315,-0.00063267065,-0.06682454,-0.052967217,-0.05929715,0.04824387,-0.07536426,0.006604882,-0.0050493744,0.05820217,0.009919643,-0.03342405,0.024723982,0.06475988,0.019987889,-0.08175332,-0.013165036,0.061590355,0.076896004,0.01620906,0.0077700764,0.022119034,-0.023565786,-0.010973665,-0.0015099146,-0.020700675,0.06757858,0.02940673,-0.03010736,-0.051828504,0.023004565,-0.0764375,0.045848884,-0.008168051,0.03720667,0.03742765,-0.012184919,-0.014343166,-0.033353887,0.012456909,0.0041439063,-0.017652376,0.039964538,-0.001829935,0.039240062,0.00786061,0.015750261,0.028798966,-0.043741293,-0.017780207,-0.02142656,-0.051598515,-0.014717175,0.006735082,-0.03259476,-0.043476783,-0.027040798,-0.000691029,0.010500889,-0.06707513,0.03523055,-0.089982666,0.05226954,-0.06786617,0.08040933,0.025014801,0.0073502637,-0.08731204,-0.008699364,0.019148637,-0.03936927,0.08518026,0.05358711,-0.03518155,0.07247729,-0.008949057,-0.048042793,-0.002956328,-0.03300062,-0.046939105,0.0915438,-0.05464515,-0.04610935,0.07127091,0.007621828,-0.031085983,-0.025606984,0.01039779,0.03398814,-0.09856501,0.013363713,0.028234292,-0.011486632,0.079888135,0.029839091,0.029553404,-0.050492574,-0.04817146,-0.006858615,0.07498894,-0.032609336,0.06756467,-0.032564655,0.002785598,-0.07588032,0.08438152,-0.0037011756,0.08572283,0.026608022,0.045887344,0.00543944,-0.01571601,-0.03444191,0.017759465,0.0076248716,0.019511135,0.054000214,-0.015688794,0.03491226,0.03905039,0.00024197447,0.012036192,-0.030561563,0.031869154,0.010466791,0.010722873,-0.013295381,-0.019655699,-0.04215597,-0.021002663,0.02318168,0.025815804,0.043421254,-0.010191429,-0.017436516,-0.0046900203,0.005002936,-0.060441058,0.04797864,0.04550805,0.030396245,0.0052805073,-0.008270568,0.069369145,0.04742276,-0.018503346,-0.051401395,0.08547959,0.009523754,0.031529754,-0.02760639,-0.009993019,0.003623189,0.06276683,0.03847906,-0.062453788,0.007334646,0.0040390785,-0.07179362,0.061636757,-0.027028032,0.01247216,0.055676848,-0.015349415,-0.059516247,0.025994545,-0.041879427,0.03558314,-0.0241659,0.022267837,-0.009047332,-0.041234937,-0.02513069,-0.010995759,-0.04037109,-0.04466701,0.08812898,-0.036827512,0.003799781,0.0028043406,0.023853403,-0.028637394,0.056346137,0.026028965,-0.022524662,0.0065875337,-0.017639149,0.029036753,-0.0063203447,0.08527095,0.0015235926,-0.02498966,0.10012716,0.06935013,0.026015304,-0.043830205,0.06557063,-0.10377028,0.046071567,0.01003569,0.019008288,-0.043041904,0.03718328,0.036918674,0.07994266,0.010322254,0.047674898,-0.050617076,0.007636946,0.004962731,0.06260609,-0.06551635,-0.030735409,-0.006536016,-0.018503005,0.053473014,0.067416765,-0.014920551,-0.0795489,0.050882783,-0.023549065,0.061480075,0.005564089,-0.024420023,0.053142656,-0.0014567364,0.041943617,-0.014825347,0.013772298,0.008825656,0.0032292008,-0.0513367,-0.0000073542933,-0.006272137,0.0020179776,0.04550081,0.048047163,-0.048785023,0.027769877,-0.026604231,0.09655442,0.020041144,0.093483314,-0.038392454,0.037734374,0.010461282,0.005320446,-0.009273237,0.04774857,0.037994493,-0.02951807,-0.023445696,-0.094865836,0.052474927,0.016890824,-0.04860911,0.04710994,-0.053250875,-0.029450882,-0.06780781,0.034927316,-0.0362428,0.07793684,-0.068913765,-0.09204061,0.0030703396,-0.06272431,0.0030928643,0.027104517,0.038663708,-0.03412214,-0.023408087,0.06214825,0.0549512,0.044333354,0.048367012,0.059929077,0.017031213,0.016220586,0.007840412,0.031772316,0.046120483,-0.06944252,0.056481063,-0.036635406,0.0043835356,-0.0070592896,-0.022794766,-0.021008922,-0.04326046,-0.04566396,0.08033236,-0.064153984,-0.07217075,-0.02853428,-0.025879152,0.07259135,0.08062619,0.044983383,0.13481961,-0.072409675,-0.015797945,-0.017076237,-0.0041956115,-0.051841028,0.04799229,-0.0049867216,0.06601267,-0.05019356,-0.034404904,-0.08368694,0.022506097,-0.05850538,-0.075852625,0.061109148,0.02263125,-0.030542765,-0.04556355,0.020782068,0.032853283,0.0030401854,0.078425385,-0.01896143,-0.0023838342,-0.042703945,-0.058023743,0.04179414,-0.09767693,-0.033666488,-0.04263288,-0.020931192,-0.034820415,-0.03931357,-0.0034258547,-0.024843648,-0.04067552,-0.007151303,-0.022570277,-0.0072967215,-0.06908364,0.06672831,0.07256033,0.030993296,0.04368551,-0.035560947,0.027666396,0.061756603,0.062125534,-0.06878583,0.017702859,-0.021018988,0.0059774504,-0.02926182,-0.029620321,0.019162185,-0.03426479,-0.040945068,0.009822987,-0.074607246,-0.039720256,0.037226316,-0.033395942,-0.14967993,-0.039942257,-0.05353808,-0.026832417,-0.025908556,-0.0077865333,-0.021976901,-0.044485416,0.028727682,-0.02618011,-0.06279341,-0.03068858,0.09271847,-0.042424254,0.072334215,0.029337408]]"),
		LandmarksJSON:  []byte("[{\"name\":\"lp46\",\"x\":-0.0375,\"y\":-0.0011723329,\"h\":0.023446659,\"w\":0.015625},{\"name\":\"lp46_v\",\"x\":0.034375,\"y\":-0.017584994,\"h\":0.022274327,\"w\":0.01484375},{\"name\":\"lp44\",\"x\":-0.02421875,\"y\":-0.009378663,\"h\":0.023446659,\"w\":0.015625},{\"name\":\"lp44_v\",\"x\":0.02421875,\"y\":-0.021101993,\"h\":0.022274327,\"w\":0.01484375},{\"name\":\"lp42\",\"x\":-0.01015625,\"y\":-0.010550996,\"h\":0.023446659,\"w\":0.015625},{\"name\":\"lp42_v\",\"x\":0.01328125,\"y\":-0.015240328,\"h\":0.023446659,\"w\":0.015625},{\"name\":\"lp38\",\"x\":-0.0109375,\"y\":0.0035169988,\"h\":0.023446659,\"w\":0.015625},{\"name\":\"lp38_v\",\"x\":0.01484375,\"y\":-0.0023446658,\"h\":0.022274327,\"w\":0.01484375},{\"name\":\"lp312\",\"x\":-0.0296875,\"y\":0.00820633,\"h\":0.023446659,\"w\":0.015625},{\"name\":\"lp312_v\",\"x\":0.03203125,\"y\":-0.0070339977,\"h\":0.023446659,\"w\":0.015625},{\"name\":\"mouth_lp93\",\"x\":0.009375,\"y\":0.030480657,\"h\":0.023446659,\"w\":0.015625},{\"name\":\"mouth_lp84\",\"x\":-0.0140625,\"y\":0.05627198,\"h\":0.022274327,\"w\":0.01484375},{\"name\":\"mouth_lp82\",\"x\":0.00859375,\"y\":0.06799531,\"h\":0.022274327,\"w\":0.01484375},{\"name\":\"mouth_lp81\",\"x\":0.00703125,\"y\":0.049237985,\"h\":0.023446659,\"w\":0.015625},{\"name\":\"lp84\",\"x\":0.025,\"y\":0.046893317,\"h\":0.023446659,\"w\":0.015625},{\"name\":\"eye_l\",\"x\":-0.021875,\"y\":0.0058616647,\"h\":0.012895662,\"w\":0.00859375},{\"name\":\"eye_r\",\"x\":0.021875,\"y\":-0.0058616647,\"h\":0.012895662,\"w\":0.00859375}]"),
		X:              0.321875,
		Y:              0.681125,
		W:              0.113281,
		H:              0.169988,
		Size:           240,
		Score:          243,
	},
	"fa-gr-1": Marker{
		MarkerUID:      "ms6sg6b1wowuy666",
		FileUID:        "fs6sg6bqhhinlple",
		Thumb:          "pcad9168fa6acc5c5c2965ddf6ec465ca42fd818",
		FaceID:         FaceFixtures.Get("fa-gr").ID,
		FaceDist:       0.6,
		SubjSrc:        SrcAuto,
		SubjUID:        "",
		MarkerSrc:      SrcImage,
		MarkerType:     MarkerFace,
		MarkerName:     "",
		LandmarksJSON:  []byte("[{\"name\":\"lp46\",\"x\":-0.06875,\"y\":-0.03165299,\"h\":0.042203985,\"w\":0.028125},{\"name\":\"lp46_v\",\"x\":0.07421875,\"y\":-0.0070339977,\"h\":0.04337632,\"w\":0.02890625},{\"name\":\"lp44\",\"x\":-0.05,\"y\":-0.042203985,\"h\":0.042203985,\"w\":0.028125},{\"name\":\"lp44_v\",\"x\":0.0484375,\"y\":-0.025791325,\"h\":0.042203985,\"w\":0.028125},{\"name\":\"lp42\",\"x\":-0.02421875,\"y\":-0.02813599,\"h\":0.04337632,\"w\":0.02890625},{\"name\":\"lp42_v\",\"x\":0.0171875,\"y\":-0.023446659,\"h\":0.042203985,\"w\":0.028125},{\"name\":\"lp38\",\"x\":-0.02578125,\"y\":-0.0035169988,\"h\":0.04337632,\"w\":0.02890625},{\"name\":\"lp38_v\",\"x\":0.0234375,\"y\":0.0058616647,\"h\":0.042203985,\"w\":0.028125},{\"name\":\"lp312\",\"x\":-0.059375,\"y\":-0.009378663,\"h\":0.042203985,\"w\":0.028125},{\"name\":\"lp312_v\",\"x\":0.059375,\"y\":0.014067995,\"h\":0.042203985,\"w\":0.028125},{\"name\":\"mouth_lp93\",\"x\":-0.01953125,\"y\":0.06565064,\"h\":0.04337632,\"w\":0.02890625},{\"name\":\"mouth_lp84\",\"x\":-0.04453125,\"y\":0.0996483,\"h\":0.042203985,\"w\":0.028125},{\"name\":\"mouth_lp82\",\"x\":-0.01484375,\"y\":0.13950762,\"h\":0.042203985,\"w\":0.028125},{\"name\":\"mouth_lp81\",\"x\":-0.0140625,\"y\":0.0996483,\"h\":0.04337632,\"w\":0.02890625},{\"name\":\"lp84\",\"x\":0.03046875,\"y\":0.116060965,\"h\":0.04337632,\"w\":0.02890625},{\"name\":\"eye_l\",\"x\":-0.040625,\"y\":-0.00820633,\"h\":0.02813599,\"w\":0.01875},{\"name\":\"eye_r\",\"x\":0.040625,\"y\":0.00820633,\"h\":0.02813599,\"w\":0.01875}]"),
		EmbeddingsJSON: []byte("[[-0.093890525,0.013019683,0.029119994,0.016538357,0.08429999,-0.013141796,0.026667582,-0.032405175,0.1163595,0.06623811,0.088007785,0.009521102,0.015391135,-0.02106023,-0.05691315,0.006022611,-0.058659475,-0.00011029375,-0.06971113,0.05432662,-0.04409823,-0.003976013,0.027959235,-0.034681886,-0.14300948,0.051087014,0.0054640174,-0.007197454,-0.06455456,-0.009305863,0.0044053295,0.06462282,-0.032358933,-0.030238362,-0.020493884,-0.010359775,0.09324912,-0.039328303,-0.016501626,-0.014710057,0.031304553,-0.015599755,0.008533751,0.07130624,0.03166603,-0.023390792,0.023942959,0.059524164,-0.041601457,-0.06416116,-0.041546755,-0.03334894,0.0011531865,0.040073637,-0.018780045,0.022695273,-0.049491756,-0.0414258,-0.029182525,0.017479239,0.01928343,-0.01614069,-0.035605017,0.0027880555,-0.054131843,-0.013329343,-0.070483185,0.02762893,-0.003757605,0.024029065,0.048910603,-0.0626271,0.058255084,-0.015169776,-0.036532834,-0.0143178,-0.027101258,-0.0018407565,-0.04690811,-0.04956762,0.010914193,0.07442895,-0.0043541566,0.022665054,-0.03303305,0.0067597367,-0.0010624131,-0.037461307,0.042763997,-0.027515907,-0.0216556,0.088641025,0.02317886,0.051990937,0.014210248,0.053770877,-0.030388424,0.03557687,-0.008867339,-0.025271282,-0.035980903,0.060673732,-0.04643693,0.020850485,-0.014614189,-0.0020573318,-0.03538145,-0.012771079,-0.04042637,-0.007547424,0.05608984,0.0492629,-0.08212422,0.082140565,0.04542818,0.067287564,0.013836702,0.06768826,0.009714602,-0.054550506,0.06386987,-0.04616299,0.05996367,-0.01937157,0.013215866,-0.054378405,-0.06256393,0.03748458,-0.024062924,-0.026881605,-0.041843604,-0.014912192,0.0146123925,0.0011209485,-0.004296436,-0.0003058275,-0.08093204,-0.10672516,-0.050903864,0.06546454,-0.058595892,-0.0016667336,-0.06931831,0.08064343,-0.031922415,0.01231072,0.007076793,0.050815802,0.0068850033,-0.00010835264,0.0022294046,0.045028266,0.005166697,-0.0045967908,0.014069159,0.03347971,-0.05768536,0.006957895,-0.014871252,-0.044262763,0.061014812,0.0544672,-0.019617066,-0.036315948,0.003572591,-0.08375262,0.003292174,-0.0033475982,0.0729587,0.031858016,0.0050936467,-0.0040652733,-0.0713299,0.04836243,-0.0036649564,0.042359013,0.005535485,0.04166388,0.032519743,-0.037563425,-0.006787622,0.0975232,-0.028610859,-0.05551449,-0.010158359,-0.009648773,-0.020920375,0.020818578,0.01934051,-0.045618217,0.03399537,-0.017113084,-0.009698096,-0.028860886,0.05349579,-0.06723021,0.021912385,-0.0062027103,0.040623836,0.003028591,0.013819611,-0.0741912,0.0043623582,-0.009456924,-0.014306789,0.10665826,0.076034434,-0.027082609,0.06206736,-0.020236213,0.012652845,-0.0039251493,-0.000280856,-0.008572471,0.045621246,-0.03227069,-0.054804426,0.07252653,-0.026879575,-0.043832645,0.017214196,0.005076746,0.08040599,-0.034220904,0.03484136,0.02382526,0.026718752,0.07254515,0.012495314,0.05978514,-0.04628429,-0.024638008,-0.02576567,0.065158054,-0.047027167,0.06418812,-0.081913896,-0.005787421,-0.051078312,0.06797664,0.0017024332,0.07742271,0.010700663,0.03209516,-0.018604087,-0.045509182,-0.008061004,0.023344489,0.01904618,0.041710503,-0.013524363,-0.017318565,0.03588442,-0.0032547913,0.03166146,-0.0043413923,-0.04080873,0.01681051,-0.019007234,-0.013555998,0.032053225,-0.010219326,-0.01866457,0.032395568,-0.0249728,0.0009942359,0.026133865,-0.033865724,0.007027051,-0.04793034,-0.010599442,-0.07745055,0.027022012,0.04158849,0.06573968,0.035531525,0.021987008,0.071070544,0.016728004,-0.0081183035,-0.044853006,0.12151895,0.021718577,0.012723086,-0.06188408,0.012176856,0.036947895,0.057829987,0.01700913,-0.028672377,-0.004252188,0.050896477,-0.061259568,0.046805445,0.0021330062,0.012728627,0.074729234,-0.05108558,-0.026853746,-0.002554891,-0.06541287,0.112090945,-0.04314722,-0.0022233592,-0.006430751,0.015083513,-0.03100459,-0.025453275,-0.042763796,-0.016535807,0.09097279,-0.015041015,0.008733814,-0.04123596,0.024532927,0.011715153,0.06335838,0.0761839,0.08011235,-0.0124487905,-0.037226275,0.0334534,0.047131944,0.08725385,0.051174667,-0.029137474,0.08769971,0.07836939,0.02610011,-0.039806835,0.045638703,-0.060002267,0.04121661,0.03920101,0.012287198,-0.01547638,0.07394301,-0.00089664565,0.054021467,-0.06347721,0.039498687,-0.051903382,0.046906985,-0.032213062,0.03028559,-0.06520618,-0.06003844,0.03062223,-0.036353577,0.024346597,0.02822717,0.018156389,-0.05536987,-0.0031256478,0.017493388,0.02408711,0.010129664,-0.025654754,0.046199925,0.016645173,0.04554169,0.03513556,0.007711406,-0.014392482,0.026389861,-0.05045308,-0.05110089,0.050693404,0.03977609,-0.05128192,0.053380627,-0.023048688,0.017495167,0.00570053,-0.015025937,0.055640794,0.06637663,0.005713842,0.03303093,-0.052888278,0.008493651,-0.009745264,0.071294084,-0.032945618,-0.07234138,-0.0022275746,-0.0336476,-0.0042378865,-0.0054431246,-0.06818403,0.058113907,-0.0406194,-0.02389134,-0.056073356,0.040728915,-0.021555515,0.034714483,-0.019794995,-0.015178331,-0.041329168,-0.03407714,-0.028579155,-0.005672207,0.029484289,0.027802806,0.026038399,0.019196397,0.024043009,0.0765798,0.039046213,0.046637107,0.05134362,0.03244927,-0.03884527,-0.0023525245,0.092064194,-0.08074449,-0.014464295,-0.04845734,0.025665468,0.05623905,-0.045274533,-0.0149016585,-0.033310723,-0.056783903,0.057339143,-0.03954092,-0.053069092,-0.018684955,0.0025479551,-0.028144034,0.02014774,0.039332718,0.073072225,-0.01614404,-0.059333786,-0.02467569,-0.004339183,-0.036381695,0.024719657,-0.06873327,0.04614165,-0.066158466,0.00818247,-0.07389401,0.0339478,-0.057359412,-0.07036976,0.058156338,-0.01655164,-0.036509078,-0.011072368,-0.027338926,0.020310968,-0.05036326,0.08261217,-0.09883814,-0.017118959,-0.022017892,-0.04725586,0.09792606,-0.026525073,-0.016586661,-0.033620592,-0.057665624,-0.00007511597,-0.016471397,-0.019783584,-0.06353213,-0.039600156,-0.009202849,-0.006073607,-0.061406936,-0.040955253,0.031354766,0.113885455,0.019598747,0.10061418,-0.02584035,-0.04032387,0.040245105,0.017961819,-0.10025504,-0.004328129,-0.03746717,-0.0042175096,-0.05155416,-0.03192004,-0.02692704,-0.0862173,-0.0039579575,0.0018015363,-0.053296138,-0.027453119,0.033717077,-0.03140269,-0.102326795,-0.050540317,-0.025906341,-0.0069560385,-0.07068475,-0.015721673,-0.014287674,-0.027509414,0.052948955,-0.006745669,-0.023102764,-0.056568827,0.08737429,-0.024211287,0.0350071,0.05126876]]"),
		X:              0.419531,
		Y:              0.271981,
		W:              0.234375,
		H:              0.3517,
		Size:           200,
		Score:          107,
	},
	"fa-gr-2": Marker{
		MarkerUID:      "ms6sg6b1wowuy777",
		FileUID:        "fs6sg6bw15bnlqdw",
		Thumb:          "pcad9168fa6acc5c5c2965ddf6ec465ca42fd818",
		FaceID:         FaceFixtures.Get("fa-gr").ID,
		FaceDist:       0.6,
		SubjSrc:        SrcAuto,
		SubjUID:        "",
		MarkerSrc:      SrcImage,
		MarkerType:     MarkerFace,
		MarkerName:     "",
		LandmarksJSON:  []byte("[{\"name\":\"lp46\",\"x\":-0.071875,\"y\":0.011723329,\"h\":0.04103165,\"w\":0.02734375},{\"name\":\"lp46_v\",\"x\":0.06484375,\"y\":-0.050410315,\"h\":0.04103165,\"w\":0.02734375},{\"name\":\"lp44\",\"x\":-0.05,\"y\":-0.01641266,\"h\":0.042203985,\"w\":0.028125},{\"name\":\"lp44_v\",\"x\":0.0421875,\"y\":-0.05627198,\"h\":0.04103165,\"w\":0.02734375},{\"name\":\"lp42\",\"x\":-0.02109375,\"y\":-0.021101993,\"h\":0.04103165,\"w\":0.02734375},{\"name\":\"lp42_v\",\"x\":0.01953125,\"y\":-0.037514653,\"h\":0.04103165,\"w\":0.02734375},{\"name\":\"lp38\",\"x\":-0.01953125,\"y\":0.0070339977,\"h\":0.042203985,\"w\":0.028125},{\"name\":\"lp38_v\",\"x\":0.0265625,\"y\":-0.011723329,\"h\":0.04103165,\"w\":0.02734375},{\"name\":\"lp312\",\"x\":-0.0546875,\"y\":0.023446659,\"h\":0.042203985,\"w\":0.028125},{\"name\":\"lp312_v\",\"x\":0.05859375,\"y\":-0.026963657,\"h\":0.04103165,\"w\":0.02734375},{\"name\":\"mouth_lp93\",\"x\":0.01875,\"y\":0.050410315,\"h\":0.04103165,\"w\":0.02734375},{\"name\":\"mouth_lp84\",\"x\":-0.015625,\"y\":0.110199295,\"h\":0.042203985,\"w\":0.028125},{\"name\":\"mouth_lp82\",\"x\":0.02578125,\"y\":0.13012895,\"h\":0.042203985,\"w\":0.028125},{\"name\":\"mouth_lp81\",\"x\":0.02265625,\"y\":0.085580304,\"h\":0.04103165,\"w\":0.02734375},{\"name\":\"lp84\",\"x\":0.06015625,\"y\":0.07854631,\"h\":0.04103165,\"w\":0.02734375},{\"name\":\"eye_l\",\"x\":-0.03828125,\"y\":0.01641266,\"h\":0.025791325,\"w\":0.0171875},{\"name\":\"eye_r\",\"x\":0.03828125,\"y\":-0.015240328,\"h\":0.025791325,\"w\":0.0171875}]"),
		EmbeddingsJSON: []byte("[[-0.054372232,0.039181765,0.031498026,0.00006468251,0.085923195,0.040548585,0.0026052466,-0.039414298,0.05933827,0.023663318,0.09894146,0.024789661,0.08381449,-0.0009519701,0.0040236413,0.0063722683,-0.015737116,-0.014617461,-0.019540241,-0.029962234,-0.048536565,-0.031511437,0.05904624,0.020316958,-0.045277163,0.041760866,-0.037910704,-0.033220347,-0.039845977,0.015874833,-0.034371693,0.012605717,-0.04929036,-0.07819874,0.012040551,0.015452551,0.0965687,-0.054449324,-0.023628006,-0.0565004,0.013442125,-0.038254976,-0.04326975,0.02118397,0.029084323,0.008579383,0.045229904,0.013055096,0.027759727,-0.08371116,-0.060050268,-0.08331734,-0.05214239,0.008944725,-0.019383246,0.0114573315,-0.02055765,-0.03746207,-0.032432828,0.04650022,0.01978044,-0.02538733,-0.045202617,0.029577369,-0.04724416,-0.024435386,-0.027689831,0.013018789,0.013810588,0.051173527,0.066237815,-0.0067154826,0.06873531,-0.0012610955,-0.030723115,-0.04996191,-0.0461783,0.006001794,0.02660609,0.025235772,0.029364051,0.026858289,-0.014544781,0.05740735,-0.017979944,-0.024380311,-0.008692474,0.046802167,0.09299754,-0.019755812,-0.0126305455,0.12018655,-0.0064901947,0.08189685,0.057631522,-0.009468592,-0.049890127,0.050696388,-0.027362281,-0.015018735,-0.04897983,0.026270924,-0.03838939,0.03760829,-0.010569597,-0.010435291,-0.035543915,-0.022772964,-0.021342857,0.003510175,0.009439534,0.031752486,-0.06917819,0.072512254,-0.0014846651,-0.0015212417,0.037430547,0.03241541,-0.008109822,-0.026197173,0.070364155,-0.050799396,0.026972353,-0.049946975,0.04730336,0.015160451,-0.055826616,0.059438467,0.005612464,-0.020598605,0.01042563,-0.0029619534,0.010778734,0.03363065,-0.0036426373,0.033659644,-0.07173102,-0.0080144415,-0.051456682,0.05256069,-0.0861279,-0.010783685,-0.035283152,0.005497062,-0.016684314,-0.01255608,-0.029156175,0.003832838,0.09207083,-0.0214934,0.020649372,0.020402648,0.05635924,0.028637772,0.0018554999,-0.001275046,-0.020943288,-0.041492745,-0.005098246,-0.018425088,-0.005902142,-0.007795507,-0.012569249,-0.015090472,-0.027261628,-0.13381328,0.04913353,0.02731762,0.06516422,0.027890263,0.0066199233,-0.008120477,-0.07240938,0.0370237,-0.047250558,0.03305488,0.0430215,0.054351024,0.07672866,-0.008972388,-0.012583,0.049263064,-0.05263908,0.0039483933,-0.022206614,-0.01810628,0.010214823,0.05440527,-0.036172938,-0.040891606,-0.008949698,-0.038943082,0.00466301,-0.034757555,0.021446096,-0.060837414,0.025626894,-0.05464466,0.04462554,0.030822191,0.022864016,-0.052686494,0.006518084,0.04935852,-0.03714159,0.1178143,0.032482903,-0.019864004,0.06589123,-0.049268965,-0.059515666,-0.028111672,-0.052309103,0.011847165,0.042358596,-0.025433987,-0.050082915,0.06639749,0.016851338,-0.020532604,-0.035726458,0.03455427,0.026566518,-0.043824315,0.047387224,0.046129033,-0.040084973,0.09086816,0.0004362527,0.056333754,-0.060923584,-0.02898282,-0.014046263,0.0627209,-0.002816037,0.013264778,-0.062054787,0.0020665412,-0.011042119,0.038150266,-0.02750016,0.08713206,0.06669175,0.0013982811,0.033410408,-0.061703518,-0.02782464,0.005495053,0.06658737,0.052047268,0.05121723,-0.04058631,-0.026755987,-0.0034220277,0.0028000916,-0.009886429,0.027694378,0.06148172,-0.008622199,-0.04840991,-0.0033856523,-0.0024832839,-0.0033750134,-0.0061055967,0.042073004,-0.026305163,0.047061037,0.0054187095,0.027180143,-0.003373134,-0.028141763,-0.10518332,0.07093758,0.052337892,-0.03512264,-0.018175403,0.01909021,0.049865156,0.02743289,-0.057926476,-0.016333507,0.13824615,-0.0001683252,0.029309746,-0.01965205,0.01826987,-0.0331428,0.018002786,0.03134565,-0.052589804,0.0020567186,0.0013509697,-0.030760918,0.03340601,-0.000057938956,0.0054554744,0.1057856,-0.014039021,-0.044674277,-0.0200911,-0.025374383,0.05266827,-0.016330028,0.00034745375,-0.026274374,0.0054015843,-0.03838495,-0.06392363,-0.042491183,0.004125134,0.074691035,-0.01815788,0.040734135,-0.011939831,0.036953893,-0.0007105282,0.039958067,0.06914358,0.00037906168,-0.014675732,-0.010838799,0.023180598,0.00043795368,0.048800938,0.060397744,-0.009255526,0.08779608,0.10212225,0.06821088,-0.0394667,0.09377539,-0.031714007,0.033195127,-0.017779903,0.0023073403,-0.07820316,0.040017802,0.02774755,0.042927817,0.0012552411,0.06857897,-0.03835711,0.0026496598,-0.013230098,0.027798751,-0.003158967,-0.04901588,-0.0035741555,-0.040651176,-0.007911339,0.07734485,-0.0071988828,-0.08224695,-0.0066104825,0.010763355,0.046783995,0.02597116,0.011201962,0.07557952,-0.07148059,0.021003358,0.017351674,-0.008934093,-0.019112961,0.005029582,-0.09219211,-0.004865103,-0.021242056,-0.03580161,0.03312631,0.015365677,-0.05330894,0.021684073,-0.04610137,0.08155228,0.04728531,0.106373265,0.007509471,-0.010395734,-0.0067949416,0.0016888204,-0.050826676,0.036792357,0.028567528,-0.03769767,-0.014327214,-0.114597246,0.022002887,0.024608398,-0.038854193,0.026020525,-0.046852514,-0.014258566,-0.040672284,0.049628362,-0.0014845175,0.058704358,-0.061757382,-0.08047245,0.055392664,-0.11757615,0.014209077,0.013425823,0.032652758,0.035792053,0.019583482,0.072709315,0.03331942,0.049472883,0.0527305,0.066966735,0.054501895,0.007113472,0.005025461,0.043384537,0.07707812,-0.037694816,0.051992904,-0.021244418,0.026791634,-0.00018824296,-0.09608466,-0.057391673,-0.019557308,-0.045710195,0.11256869,-0.03630969,-0.04346037,-0.03198605,-0.004994154,0.04439497,0.07715531,0.023426961,0.119786546,-0.018045835,-0.018545102,-0.024001092,-0.0058640875,-0.031129215,0.0296328,0.01102629,0.023001922,-0.020752085,-0.008979548,-0.04888688,0.053155813,-0.08248362,-0.034407604,0.063852735,0.010307777,-0.022234993,-0.019875037,0.017233202,0.009299421,-0.010353768,0.06795645,-0.08111678,0.031468038,-0.04074988,-0.065950215,0.002381992,-0.077574216,-0.0638125,-0.015096647,-0.036802486,-0.06519387,-0.061357055,0.0021515447,-0.035495274,-0.046395093,-0.024219131,-0.04006479,-0.015802946,-0.046073157,0.044999864,0.044493504,0.0050695804,0.047709156,-0.06679927,0.009656656,0.008440564,0.041205402,-0.055090237,-0.05124349,-0.070530914,-0.004065805,-0.03881908,-0.04284163,0.013091091,-0.07438322,-0.051147584,-0.004689705,-0.1168612,-0.034551486,0.008786282,-0.05222254,-0.09804541,0.023659328,-0.055399828,0.014005115,-0.00795563,-0.030266479,0.019792065,-0.060083665,0.032388374,-0.0030213597,-0.031277124,-0.030778551,0.07044338,-0.014993716,0.027770035,0.03445111]]"),
		X:              0.404687,
		Y:              0.249707,
		W:              0.214062,
		H:              0.321219,
		Size:           200,
		Score:          74,
	},
	"fa-gr-3": Marker{
		MarkerUID:      "ms6sg6b1wowuy888",
		FileUID:        "fs6sg6bw45bnlqdw",
		Thumb:          "pcad9168fa6acc5c5c2965ddf6ec465ca42fd818",
		FaceID:         FaceFixtures.Get("fa-gr").ID,
		FaceDist:       0.6,
		SubjSrc:        SrcAuto,
		SubjUID:        "",
		MarkerSrc:      SrcImage,
		MarkerType:     MarkerFace,
		MarkerName:     "",
		LandmarksJSON:  []byte("[{\"name\":\"lp46\",\"x\":-0.1265625,\"y\":-0.037514653,\"h\":0.07971864,\"w\":0.053125},{\"name\":\"lp46_v\",\"x\":0.12421875,\"y\":-0.049237985,\"h\":0.080890976,\"w\":0.05390625},{\"name\":\"lp44\",\"x\":-0.0921875,\"y\":-0.06799531,\"h\":0.07854631,\"w\":0.05234375},{\"name\":\"lp44_v\",\"x\":0.09375,\"y\":-0.07620164,\"h\":0.07854631,\"w\":0.05234375},{\"name\":\"lp42\",\"x\":-0.0453125,\"y\":-0.055099647,\"h\":0.07854631,\"w\":0.05234375},{\"name\":\"lp42_v\",\"x\":0.03671875,\"y\":-0.058616646,\"h\":0.07854631,\"w\":0.05234375},{\"name\":\"lp38\",\"x\":-0.04765625,\"y\":-0.0011723329,\"h\":0.07854631,\"w\":0.05234375},{\"name\":\"lp38_v\",\"x\":0.046875,\"h\":0.07854631,\"w\":0.05234375},{\"name\":\"lp312\",\"x\":-0.11328125,\"y\":0.0011723329,\"h\":0.07854631,\"w\":0.05234375},{\"name\":\"lp312_v\",\"x\":0.1171875,\"y\":0.0011723329,\"h\":0.07971864,\"w\":0.053125},{\"name\":\"mouth_lp93\",\"x\":-0.00234375,\"y\":0.110199295,\"h\":0.07854631,\"w\":0.05234375},{\"name\":\"mouth_lp84\",\"x\":-0.075,\"y\":0.1852286,\"h\":0.07971864,\"w\":0.053125},{\"name\":\"mouth_lp82\",\"x\":-0.00859375,\"y\":0.2602579,\"h\":0.07971864,\"w\":0.053125},{\"name\":\"mouth_lp81\",\"x\":-0.00625,\"y\":0.17233294,\"h\":0.07971864,\"w\":0.053125},{\"name\":\"lp84\",\"x\":0.078125,\"y\":0.19109027,\"h\":0.07971864,\"w\":0.053125},{\"name\":\"eye_l\",\"x\":-0.075,\"h\":0.044548653,\"w\":0.0296875},{\"name\":\"eye_r\",\"x\":0.075,\"h\":0.044548653,\"w\":0.0296875}]"),
		EmbeddingsJSON: []byte("[[-0.073866636,0.016031327,0.023936775,-0.0053662593,0.07237993,0.04055533,-0.010006854,-0.08853087,0.07773273,0.035573997,0.064981356,0.0020537896,-0.001027068,-0.010934273,-0.003104742,0.010902052,-0.027014393,-0.013686293,-0.009875583,0.015303323,-0.018991778,-0.02323984,0.030534267,-0.0033639274,-0.10288412,0.0717939,-0.0012669773,0.014334076,-0.039688457,0.017188145,-0.015910042,0.055143923,-0.032555833,-0.03506173,-0.068201624,-0.0039704936,0.08928039,-0.026942518,0.011039717,-0.03735661,-0.0014198971,-0.018449597,-0.06112747,0.04157763,0.07383509,-0.04355786,0.021221923,0.018865572,-0.0039059212,-0.047053855,-0.058129553,-0.038542587,-0.023257237,-0.004728452,-0.028359955,0.0039047676,-0.02627191,-0.022284606,0.007962644,0.06321306,0.03732979,-0.04749387,-0.017337998,0.0030111885,-0.028933149,-0.008887208,-0.06071306,0.03869208,-0.09708857,0.04828468,0.020269504,-0.04063692,0.10137754,0.016340563,-0.0015734726,-0.024068983,-0.025025863,0.04832914,-0.021582557,-0.032818828,0.00018090609,0.029158695,-0.0018422881,0.030217623,-0.0011723741,-0.082951054,-0.03300287,0.030488258,0.025993546,-0.022730732,0.011654745,0.061848763,0.012047269,0.093638696,0.0060161697,0.0047047674,0.005296799,0.06932509,0.016032169,-0.013620633,-0.006022576,0.016952122,-0.066751,-0.016939523,0.006578483,-0.026227117,-0.04812863,0.004717689,-0.0065265307,-0.01629887,0.06322119,0.027887775,-0.066761896,0.08686458,0.07942802,0.08388473,-0.00282358,-0.00541744,0.0708098,-0.014398607,0.08771786,-0.033847287,0.05162851,-0.01365062,0.048112284,-0.05715766,-0.046271008,0.056179672,0.003435988,-0.011598098,-0.029404357,-0.01584704,0.011094245,0.03757599,-0.05238623,0.013646733,-0.02461669,-0.048051346,-0.075406104,-0.0020483842,-0.055833645,-0.014297428,-0.072286725,0.045308035,0.0071518556,-0.045322344,0.006272015,0.008873406,0.01909099,-0.0178786,-0.061731715,0.09681949,0.04529445,-0.039505653,0.048396572,0.029071784,-0.0508098,-0.020671528,0.024967367,-0.050586604,0.017834423,0.019237572,0.009593093,-0.041558046,-0.0003789351,-0.10507235,0.062877074,0.0340332,0.052963976,0.038017586,0.044870827,-0.023327185,-0.027447775,0.018722018,-0.01495255,0.010285529,0.006699261,0.019871375,0.04677616,-0.008053924,0.035305478,0.06910859,-0.058397174,-0.04997201,-0.024150014,-0.047944978,-0.04850946,0.027666207,-0.015385359,-0.026231881,-0.029543651,-0.068578035,0.010962724,-0.012112321,0.041190933,-0.06982521,0.022845706,0.010630225,0.039679203,0.0120911375,0.020542646,-0.086290255,-0.0032323631,0.042691592,-0.04808516,0.054902866,0.084107324,-0.08121146,0.07269181,-0.023218282,0.0085940035,-0.014477415,-0.016376667,0.013630227,0.099591576,-0.017152792,-0.022023872,0.06504699,0.03383892,-0.07171765,0.0018146061,0.025729213,0.055387046,-0.07977077,0.046015475,-0.018759467,0.000032393746,0.09278185,0.015648605,0.073056385,-0.055384524,-0.02845897,-0.027267037,0.09475982,-0.0020406358,0.03758793,-0.054485165,-0.03265821,-0.05159487,0.022056432,-0.011478735,0.06693947,0.04921809,0.014617242,0.0317674,-0.021935562,-0.029373636,-0.024497539,0.04018448,0.028116653,0.017569298,-0.020693202,0.0058392626,-0.033240892,0.005981258,-0.03692178,-0.041199494,0.022738375,0.019006865,-0.040770877,-0.04819203,-0.00074032525,-0.050814908,0.028583968,0.015760805,-0.0131536415,0.06355032,-0.062454503,-0.021504251,-0.03322951,0.015921598,-0.038808152,0.0053016073,0.047145087,0.012950561,-0.005165289,0.021696176,0.1006171,0.00011339755,-0.03743969,-0.0032795696,0.1151706,0.044503003,0.038610794,-0.007968872,0.035065427,0.021606348,0.0051747584,0.022587998,-0.06580073,-0.007051277,0.039693505,-0.06831048,0.033305947,-0.02417094,0.011260378,0.106488094,0.0018363984,-0.019961357,0.015139018,-0.016302284,0.07338007,-0.08660587,0.050163887,-0.06515454,0.04420773,-0.04620322,-0.0016479344,-0.019523032,-0.0046600383,0.051558446,-0.039630923,0.0206993,-0.030601852,-0.01398122,0.000068459005,0.07366608,-0.00028727754,0.044792995,-0.0041720183,-0.023572491,0.03447365,-0.036157113,0.02819346,0.0493312,-0.044256706,0.09224052,0.06909898,0.013466474,-0.04111229,0.059525512,-0.05140521,0.061477825,0.0017825632,-0.029221864,-0.05507708,0.006438174,-0.014033246,0.05725492,-0.056060065,0.024903009,-0.024683116,0.039777134,0.012582429,0.055130392,-0.030750046,-0.059396066,-0.035579916,-0.029797664,0.004726079,0.034804873,-0.034417376,-0.114758596,0.03242788,0.000501204,0.04404313,0.00655221,-0.027173482,0.040714,0.023931323,0.020616865,-0.016255263,-0.0017712632,0.0027488335,-0.014625318,-0.06243433,-0.021571135,-0.015103034,0.012897906,-0.025319636,0.049510416,0.024344563,-0.020421328,-0.009538588,0.04941297,-0.0015938922,0.078475334,-0.0018342786,0.029404538,-0.060807385,-0.015963834,-0.053491082,0.041621022,-0.004584518,-0.07120361,-0.010081799,-0.08262798,0.011636767,-0.0015379221,-0.025175184,0.05776484,-0.028748916,0.05144731,-0.07920147,0.025079658,0.013160541,0.042230397,-0.056532286,-0.021730576,-0.016290681,-0.026606148,-0.0011647565,0.0035673594,0.00085276953,0.040172685,-0.0106583405,0.018701522,0.030779626,0.054770093,0.08547839,0.10493849,0.057681084,0.012756295,-0.012550093,0.038036626,0.05472453,-0.07034408,0.008832732,-0.04203944,0.024039479,0.0022330943,-0.08002771,0.01859618,-0.07650708,-0.06871729,0.08551957,-0.045689788,-0.038133662,-0.06058958,0.02554352,0.024225824,0.031872917,-0.008533843,0.060477596,-0.013617827,-0.045547865,-0.013227217,-0.0077821882,-0.0047530667,0.03495019,0.018960906,0.06562013,-0.05885502,-0.026826475,-0.084350295,-0.006463529,-0.11407113,-0.023642823,0.07699851,-0.0007511166,0.017985942,-0.036139246,-0.08464451,0.07296712,-0.0075233886,0.07328787,-0.10081047,-0.028797977,0.01438471,-0.0034235953,0.051218707,-0.0797163,-0.05970589,-0.042747606,-0.002718021,-0.026282901,-0.018973313,0.012287243,-0.055787902,-0.01068693,-0.054766666,-0.07124911,-0.029021561,-0.05347068,0.05091528,0.06802605,0.019041106,0.02474878,-0.0030039893,-0.02026538,0.048509765,0.04026487,-0.08677108,-0.013551162,-0.04432152,-0.02753063,-0.032842644,-0.03517603,-0.0026440874,-0.04815278,0.0015537251,0.063122645,-0.06946794,-0.012093891,-0.0019356601,0.0231943,-0.12961437,-0.011635037,0.0042307056,-0.0013429738,-0.054212384,0.06293422,0.0029329862,-0.040961236,0.07530531,-0.0519733,-0.022792637,-0.096784875,0.028482867,-0.0127504375,0.06500096,0.052648548]]"),
		X:              0.528125,
		Y:              0.240328,
		W:              0.3625,
		H:              0.543962,
		Size:           200,
		Score:          56,
	},
	"actress-a-1": Marker{
		MarkerUID:      "ms6sg6b1wowuy999",
		FileUID:        "fs6sg6bqhhinlple",
		Thumb:          "pcad9168fa6acc5c5c2965ddf6ec465ca42fd818-045038063041",
		FaceID:         FaceFixtures.Get("actress-1").ID,
		FaceDist:       0.26852392873736236,
		SubjSrc:        SrcManual,
		SubjUID:        SubjectFixtures.Get("actress-1").SubjUID,
		MarkerSrc:      SrcImage,
		MarkerType:     MarkerFace,
		MarkerName:     "Actress A",
		LandmarksJSON:  []byte("[{\"name\":\"lp46\",\"x\":-0.20087977,\"y\":-0.022460938,\"h\":0.055664062,\"w\":0.083577715},{\"name\":\"lp46_v\",\"x\":0.20381232,\"y\":-0.043945312,\"h\":0.056640625,\"w\":0.08504399},{\"name\":\"lp44\",\"x\":-0.14516129,\"y\":-0.037109375,\"h\":0.056640625,\"w\":0.08504399},{\"name\":\"lp44_v\",\"x\":0.12463343,\"y\":-0.060546875,\"h\":0.055664062,\"w\":0.083577715},{\"name\":\"lp42\",\"x\":-0.07331378,\"y\":-0.0234375,\"h\":0.056640625,\"w\":0.08504399},{\"name\":\"lp42_v\",\"x\":0.03372434,\"y\":-0.033203125,\"h\":0.055664062,\"w\":0.083577715},{\"name\":\"lp38\",\"x\":-0.07331378,\"y\":0.01171875,\"h\":0.056640625,\"w\":0.08504399},{\"name\":\"lp38_v\",\"x\":0.0659824,\"y\":0.005859375,\"h\":0.056640625,\"w\":0.08504399},{\"name\":\"lp312\",\"x\":-0.17155425,\"y\":0.009765625,\"h\":0.056640625,\"w\":0.08504399},{\"name\":\"lp312_v\",\"x\":0.17595308,\"y\":-0.0126953125,\"h\":0.056640625,\"w\":0.08504399},{\"name\":\"mouth_lp93\",\"x\":-0.019061584,\"y\":0.107421875,\"h\":0.056640625,\"w\":0.08504399},{\"name\":\"mouth_lp84\",\"x\":-0.08797654,\"y\":0.171875,\"h\":0.056640625,\"w\":0.08504399},{\"name\":\"mouth_lp82\",\"x\":0.02346041,\"y\":0.21386719,\"h\":0.055664062,\"w\":0.083577715},{\"name\":\"mouth_lp81\",\"x\":0.004398827,\"y\":0.15527344,\"h\":0.055664062,\"w\":0.083577715},{\"name\":\"lp84\",\"x\":0.13636364,\"y\":0.16210938,\"h\":0.055664062,\"w\":0.083577715},{\"name\":\"eye_l\",\"x\":-0.1202346,\"y\":0.0068359375,\"h\":0.034179688,\"w\":0.051319648},{\"name\":\"eye_r\",\"x\":0.1202346,\"y\":-0.005859375,\"h\":0.034179688,\"w\":0.051319648}]"),
		EmbeddingsJSON: []byte("[[-0.05229705,0.007989598,-0.062365454,0.0061841086,0.06359905,-0.023156136,0.041654155,0.060551327,0.0080484,0.0259964,-0.017790899,0.05328648,0.008051681,0.004158141,0.01934692,0.031126099,0.037513833,0.0661351,-0.024141736,0.026394045,-0.004832717,-0.048614245,0.021577224,-0.001970885,0.0109787565,-0.06530431,-0.006030935,0.045647576,-0.0017333498,0.014349204,-0.034823675,-0.08507538,-0.06481961,-0.021696921,-0.013733632,-0.06093843,-0.0353926,-0.0816069,-0.003031482,-0.048279442,-0.007382505,0.033463806,-0.016694082,-0.006024777,0.08327889,0.09875023,-0.012484787,-0.058815323,0.032650303,-0.020854296,-0.107102804,-0.052951254,0.06643637,0.049409714,-0.051010255,-0.05989731,-0.030755803,-0.004990421,-0.012278099,-0.033928186,-0.02483369,-0.016562939,0.007251628,0.12116579,-0.030766798,-0.034330606,-0.04448809,-0.06718208,0.0010473772,0.025452167,-0.11771256,-0.073624186,0.06702661,0.001210614,-0.010433612,0.013147661,-0.017261446,-0.058957368,0.045368977,0.004058764,0.022201827,0.027560161,-0.0377051,-0.016491184,-0.015218782,0.061864156,-0.07688957,0.012870432,-0.01164755,-0.047753666,-0.004062014,0.061563116,0.043187067,-0.038274653,0.0073725,0.087547,-0.02465749,0.069889344,0.057197604,-0.0409002,-0.07738756,0.030647544,-0.045078352,0.06300527,-0.037541963,-0.078719966,-0.03773478,0.009842516,-0.016822234,0.013509771,-0.039251234,-0.0067301737,-0.016230693,-0.03264009,0.027045054,-0.056228492,-0.07922239,0.032337304,-0.07653274,-0.040859587,0.018102637,-0.017439928,0.07072474,-0.047896326,0.0892192,-0.008514806,0.035658598,-0.023070173,-0.1018028,-0.05762159,-0.056649454,-0.008618878,0.016522313,0.013173467,0.043471225,0.016440712,0.04963072,0.0025043804,-0.055007797,-0.009640878,-0.038686037,0.028938757,-0.042355012,0.080204286,0.019337134,-0.03411155,-0.02595622,0.043695416,-0.009023003,0.021960387,-0.055932842,0.047417544,0.008447756,0.060802683,0.007049994,-0.027508061,-0.0880883,-0.065615505,-0.033592727,0.019060964,0.051755343,0.0644715,0.06329444,0.047450755,-0.069210045,0.027375769,-0.050313827,0.027648222,0.040717743,0.010694129,-0.042684533,-0.0065284735,0.043558195,0.017130628,-0.05412039,0.051682115,-0.015720656,0.039207693,0.0133312885,-0.005719052,-0.03163015,-0.024424605,0.004745196,0.027041266,0.027891282,-0.09569756,0.0016817392,-0.06326212,0.08236786,-0.041220974,-0.018897083,-0.0034501683,-0.0009880171,-0.03234924,-0.0052740313,-0.03258579,0.011854238,-0.12111912,0.011765493,-0.040605187,0.07189139,0.0053031943,0.0056359037,-0.047506567,0.0061064786,0.07454735,0.0013638375,-0.03039137,0.034319416,0.041107308,0.03366933,0.12155316,-0.03444269,-0.09601736,0.020978406,0.011961241,-0.034874704,0.01691079,-0.036350977,-0.03752899,-0.019909134,0.07804831,0.02025738,0.023722788,0.07989277,0.010130817,0.094901055,0.04674442,-0.03300892,-0.010380252,-0.05247076,-0.06434577,0.08455416,0.0270006,-0.04323316,0.032972153,0.046522085,0.018313596,-0.01438891,0.08599599,0.0065270574,0.021346292,-0.025544036,0.010025259,-0.061830234,-0.022722572,-0.017789774,-0.046070516,0.0012311137,0.060397036,-0.00095879566,0.030007232,0.0373407,0.044799555,0.05593753,0.03707591,-0.029031834,0.076791845,-0.020900607,-0.015646426,-0.004163893,0.020473266,-0.02163454,-0.016153961,0.037079003,0.013442594,-0.036669753,0.011533637,-0.023773039,-0.07111306,-0.029343553,-0.0886156,0.061532106,0.01921337,0.056643642,0.0065780496,0.011087258,0.051643964,0.09629773,0.047176264,-0.03306574,0.025588147,0.007951005,0.016879337,0.010161855,0.04733144,0.06159107,0.103453875,-0.011948827,0.033104483,0.0059451926,0.0028704288,0.021986214,0.048837528,0.022196801,-0.014160903,0.02349835,-0.012660949,-0.032859556,-0.04139531,0.011255187,0.04133296,-0.004485465,0.018995635,0.04702958,0.09558477,0.03325744,-0.09686811,-0.024341797,-0.049072854,-0.026889915,0.0358518,0.008705245,0.028579423,0.011970988,0.030839734,-0.012615775,0.043476205,0.029864708,-0.03080079,-0.04061254,-0.05333887,0.052642222,0.008978231,0.00535499,-0.055364214,0.030401299,-0.041552424,-0.08917391,-0.030813953,0.013840964,0.009201573,-0.0068568857,-0.028739737,-0.034714155,0.038832456,0.054138377,0.028621657,0.028619714,-0.061658528,0.031706166,0.008527403,0.028814454,0.04848206,-0.025092026,0.0077216504,0.045992117,0.04175891,-0.04670346,0.08155426,0.047371842,0.019500673,0.03433615,-0.007175214,0.037078403,0.06326607,-0.021745648,0.021966813,0.06908443,-0.04929061,0.00973276,-0.040354956,0.0808187,0.060764935,0.059249427,0.015942117,-0.036786526,-0.0020648674,0.05868547,0.027981477,0.033442043,0.0028526292,0.081910744,-0.007579615,0.009980506,0.12620251,0.04930073,0.008065173,-0.0340071,0.03412705,0.030472064,0.021306807,0.09693716,-0.0012492486,0.0054060426,0.019264672,0.025324527,0.024840873,0.032975666,0.023894792,-0.008880753,-0.017816521,0.007425608,0.05205727,0.020813603,0.051000256,-0.0013736173,-0.018755639,-0.042811044,-0.0024803795,0.0053950306,-0.10178959,-0.006109442,-0.024801476,0.019034633,0.06860389,-0.011341898,0.050353404,-0.026785567,-0.0090696905,0.011146311,0.068339095,-0.02078327,-0.013683953,0.024704546,0.022463804,0.05390386,0.015567147,-0.017296655,0.008668451,-0.00707021,-0.016485855,0.053326797,0.0077202315,0.000105594605,0.078966126,0.012173883,-0.010164135,-0.00076907326,-0.06266574,-0.06398305,0.053533886,0.06431866,0.015442087,0.052885942,-0.011302109,-0.05066782,-0.050972108,0.020483453,-0.02153529,-0.02996298,0.0019833155,-0.034100793,0.06682743,-0.03296124,0.04058806,0.026214233,-0.039496947,0.015046788,0.022510707,-0.0023394104,-0.056726906,0.018024538,-0.012636283,-0.036644615,0.008710028,0.048582997,-0.00055643794,0.000752097,-0.072080985,-0.014192766,0.030562079,-0.055470504,-0.009195293,0.008115496,0.09196582,-0.033875756,-0.031127209,0.06039318,0.06010307,-0.052503236,0.01380666,-0.03804924,-0.017064193,0.083562344,0.078455605,-0.08022132,0.07292907,0.05657521,-0.0053966385,-0.019952502,-0.060210112,-0.04937814,-0.010188942,-0.008495002,-0.044368472,-0.023539238,-0.023852175,0.06910539,-0.021957787,-0.036084246,-0.04192943,-0.06829056,-0.00027899756,0.012719791,-0.052117694,0.008628383,-0.007880049,-0.0041414862,0.069853604,-0.0043276628,-0.021817885,-0.07530787,-0.013810588,-0.08678773,0.07755373,0.006726282,-0.0054265857,0.04703485,-0.08533555,-0.04510798,-0.02370461]]"),
		X:              0.458944,
		Y:              0.381836,
		W:              0.630499,
		H:              0.419922,
		Size:           430,
		Score:          176,
	},
	"actress-a-2": Marker{
		MarkerUID:      "ms6sg6b1wowu1000",
		FileUID:        "fs6sg6bwhhbnlqdn",
		Thumb:          "pcad9168fa6acc5c5c2965ddf6ec465ca42fd818-046045043065",
		FaceID:         FaceFixtures.Get("actress-1").ID,
		FaceDist:       0.4507357278575355,
		SubjSrc:        "",
		SubjUID:        SubjectFixtures.Get("actress-1").SubjUID,
		MarkerSrc:      SrcImage,
		MarkerType:     MarkerFace,
		MarkerName:     "",
		LandmarksJSON:  []byte("[{\"name\":\"lp46\",\"x\":-0.1328125,\"y\":-0.050469484,\"h\":0.07981221,\"w\":0.053125},{\"name\":\"lp46_v\",\"x\":0.1359375,\"y\":-0.069248825,\"h\":0.07981221,\"w\":0.053125},{\"name\":\"lp44\",\"x\":-0.08984375,\"y\":-0.06807512,\"h\":0.08098592,\"w\":0.05390625},{\"name\":\"lp44_v\",\"x\":0.0953125,\"y\":-0.09389672,\"h\":0.08098592,\"w\":0.05390625},{\"name\":\"lp42\",\"x\":-0.03203125,\"y\":-0.049295776,\"h\":0.08098592,\"w\":0.05390625},{\"name\":\"lp42_v\",\"x\":0.04140625,\"y\":-0.0528169,\"h\":0.08098592,\"w\":0.05390625},{\"name\":\"lp38\",\"x\":-0.04296875,\"y\":0.0070422534,\"h\":0.08098592,\"w\":0.05390625},{\"name\":\"lp38_v\",\"x\":0.05,\"h\":0.08098592,\"w\":0.05390625},{\"name\":\"lp312\",\"x\":-0.1125,\"y\":0.0046948357,\"h\":0.07981221,\"w\":0.053125},{\"name\":\"lp312_v\",\"x\":0.11171875,\"y\":-0.015258216,\"h\":0.08098592,\"w\":0.05390625},{\"name\":\"mouth_lp93\",\"x\":0.021875,\"y\":0.15845071,\"h\":0.07981221,\"w\":0.053125},{\"name\":\"mouth_lp84\",\"x\":-0.06796875,\"y\":0.2511737,\"h\":0.08098592,\"w\":0.05390625},{\"name\":\"mouth_lp82\",\"x\":0.01015625,\"y\":0.29694834,\"h\":0.08098592,\"w\":0.05390625},{\"name\":\"mouth_lp81\",\"x\":0.01328125,\"y\":0.23474178,\"h\":0.08098592,\"w\":0.05390625},{\"name\":\"lp84\",\"x\":0.07578125,\"y\":0.24530517,\"h\":0.08215962,\"w\":0.0546875},{\"name\":\"eye_l\",\"x\":-0.0765625,\"y\":0.0070422534,\"h\":0.0528169,\"w\":0.03515625},{\"name\":\"eye_r\",\"x\":0.0765625,\"y\":-0.005868545,\"h\":0.0528169,\"w\":0.03515625}]"),
		EmbeddingsJSON: []byte("[[-0.049459063,0.017268278,-0.02436374,0.00456427,0.09272429,-0.050807584,0.036965158,0.026884563,0.0119875,0.014209214,-0.067779765,0.04646819,-0.014141333,-0.0036627771,0.021660244,0.021314034,0.014275501,0.08742305,-0.034991235,0.008202811,-0.002463041,-0.02050261,-0.013668234,-0.01591194,0.00038310073,-0.057569426,0.0017369435,0.0018577661,-0.028867407,0.0027254226,-0.005002463,-0.07488987,0.001307097,-0.04501251,-0.0029536102,-0.060898315,-0.024836477,-0.06800526,-0.018251294,-0.06714453,-0.03835583,-0.012315799,-0.02408654,-0.052206445,0.06425532,0.10974466,-0.019249128,-0.082979046,0.05063531,-0.0154190995,-0.0228068,-0.026870046,0.015838344,0.012618892,-0.07076848,-0.099307396,-0.0029199817,-0.008428616,-0.03690643,-0.029002419,-0.08289682,-0.042127404,0.022622276,0.11112179,-0.102848515,-0.051508073,-0.07759363,-0.024752662,0.01072458,0.017454943,-0.096395686,-0.060559936,0.06974608,-0.022983044,0.010305064,-0.015682958,-0.015386821,-0.06532061,0.04780671,0.030457076,0.009153081,-0.009918209,0.028085643,-0.06903502,-0.04477236,0.04568965,-0.0588692,0.008053723,0.0066500003,0.002056475,-0.051001243,0.07434756,0.06958109,-0.0051158112,0.0067235045,0.061066773,-0.02668338,0.07214043,0.029028762,-0.056457512,-0.035895966,0.06470638,-0.010451813,0.06615657,0.009132362,-0.10509057,-0.0214467,-0.019499326,0.021326417,-0.0005096953,-0.039119616,-0.004919122,-0.027968572,-0.02242942,0.04339938,-0.050613083,-0.03398977,-0.008493971,-0.041936025,-0.024089295,0.031790562,-0.020151902,0.0040771635,-0.034357667,0.09156331,-0.005507572,0.038099304,-0.026427202,-0.071385466,-0.047210604,0.015180976,0.02840854,0.006497151,-0.00033469102,0.059061587,0.01597261,0.026339632,0.0047395597,-0.0732964,-0.023477107,-0.013290841,0.0722244,-0.09215446,0.08168655,0.06149926,-0.043894358,-0.0012614318,-0.014505845,0.013292828,0.05467337,-0.07392705,0.03587918,0.03738537,0.039497815,0.014047925,-0.035231546,-0.05510579,-0.06585757,-0.027597472,0.028229747,0.01872451,0.016732052,0.038707886,0.03760357,-0.09509508,0.011902702,-0.039682817,0.063382134,0.015901549,-0.018055184,-0.017384674,-0.0055762334,0.028935213,0.04936567,-0.07914068,0.033277143,-0.04809108,-0.012982491,0.027650237,0.012381077,-0.007831506,-0.028501108,0.0027739317,0.030846888,0.06363329,-0.063592546,0.0013009127,-0.047159683,0.08388043,0.017999368,-0.030521795,0.016651977,-0.02127061,-0.0066180443,0.021815853,-0.04923658,0.014300308,-0.10884089,0.03554048,-0.076338924,0.04290125,-0.03496307,-0.016342787,0.003979376,-0.005279251,0.046642117,0.03875152,0.021821734,0.0212685,0.02517185,0.013970688,0.09438682,-0.008246351,-0.07201821,0.043268915,-0.013038975,-0.03842977,0.031770673,0.014474782,-0.00904498,-0.035458993,0.105679035,-0.005526758,0.035617128,0.087437995,-0.0074472744,0.03652849,0.03156119,-0.0074446313,0.025843417,-0.033748094,-0.07544038,0.06703343,0.058584675,-0.034583744,-0.014526141,0.010346831,0.02020119,0.017172644,0.036033068,0.017345741,-0.005148574,0.005949535,0.009638718,-0.051637497,-0.017285585,0.01982075,-0.040740706,0.024971858,0.032606248,0.0054185386,-0.034356512,0.055193033,0.0087926695,0.034704905,0.00855733,0.0038743499,0.07179773,-0.019840432,-0.032834504,0.00042203598,0.08087348,-0.025469255,0.014843097,0.09630777,0.0047693965,-0.024934268,0.012820331,0.011042015,-0.030395493,-0.033821043,-0.08145805,0.075025946,-0.03607769,0.057038724,-0.0027300948,0.054555744,0.05634548,0.09752533,0.046370883,-0.05634598,0.015927348,0.021280775,0.012376771,-0.018440763,0.03532993,0.02491145,0.052214853,0.0022429496,0.020258121,-0.039332327,-0.013443214,0.029031718,-0.02472637,0.013089783,-0.0143768415,0.034685213,-0.03686133,-0.00024506677,-0.020284498,0.009332724,0.008956202,-0.001900865,0.027391685,0.015421629,0.065207265,0.018158332,-0.11686228,-0.021487968,-0.052634593,0.00041134108,0.070758514,-0.012821131,0.0056990935,0.009860178,-0.012334778,-0.028138964,0.028736291,0.011418021,-0.024555748,0.006178947,-0.032897394,0.03567247,0.015546294,0.005205685,-0.066652454,0.03141584,-0.057265297,-0.060639385,-0.05043094,-0.012570809,0.026399242,0.039814834,-0.05367967,-0.09991194,0.029263567,0.06516923,-0.002547701,0.01744748,-0.07774265,-0.01485503,-0.0008515376,-0.00009239801,0.040131442,-0.008471036,0.046221625,0.036377743,0.03975367,-0.02172364,0.016733838,0.03406566,0.029283218,0.01903691,-0.030763604,0.05134629,0.056930035,-0.050130114,0.07097113,0.026646879,-0.06706624,0.0185106,-0.027858399,0.0919206,0.058494482,0.088975206,-0.05819871,-0.04681766,0.00006603616,0.03765832,0.036368955,0.022435583,-0.036811493,0.054468587,-0.01463473,0.008204965,0.08055711,0.025345674,0.035949606,-0.094104804,0.10039316,-0.013622636,0.025994016,0.069019005,0.0139777325,-0.0014750401,0.016625214,-0.020974183,0.011298052,0.013663046,0.049106684,-0.06313476,-0.02732274,0.007753176,0.0716419,0.03180572,0.0520323,0.008170091,0.0022347167,-0.05285675,-0.0020002343,-0.0077795237,-0.14255907,-0.039583888,-0.0060677547,0.028627384,0.035871346,-0.025141723,0.05824233,-0.07839286,0.0044170194,-0.022603396,0.03614475,-0.011268937,0.037637427,0.0025523365,0.054308962,0.03597362,0.041037004,-0.028538795,0.0022853648,-0.047099475,-0.037321594,0.048661713,-0.026266742,-0.030840356,0.08786395,-0.039021745,0.0019526927,-0.0109154405,-0.055744655,-0.086810485,0.015435788,0.04645769,0.028589347,0.041702002,-0.0064188247,-0.07415001,-0.017071126,0.025768213,-0.02186999,-0.0048967577,0.014584777,0.0061198445,0.021607645,-0.0446379,0.035067543,0.03668494,-0.071570486,0.025967104,0.0042253863,-0.039801758,-0.0140141845,0.026637642,0.0039601126,-0.06624098,0.012255538,0.027761143,-0.005409356,-0.009112263,-0.015837284,-0.03027765,0.0025985541,-0.01429484,-0.04303043,0.014554412,0.11623079,-0.059168987,-0.024508484,0.08753183,0.041292477,-0.045497976,-0.0016933419,-0.059131842,0.010029583,0.04696655,0.061362173,-0.053241152,0.022399137,0.063325584,0.03223329,-0.031676352,-0.068241775,-0.026388923,-0.038682334,0.06003698,-0.027799105,-0.006467925,-0.06406409,0.09387454,-0.020002173,-0.068420134,-0.036658607,-0.04201613,-0.0033988056,0.034520224,-0.025423609,-0.0063035307,0.027934644,0.011818505,0.08374407,0.023470499,-0.06288708,-0.038999792,-0.01913346,-0.04121274,0.12673251,0.021116056,-0.025599312,0.059204243,-0.10120517,-0.02541926,-0.036548868]]"),
		X:              0.464844,
		Y:              0.449531,
		W:              0.434375,
		H:              0.652582,
		Size:           556,
		Score:          155,
	},
	"actress-a-3": Marker{
		MarkerUID:      "ms6sg6b1wowu1001",
		FileUID:        "fs6sg6bw45bnlqdw",
		Thumb:          "pcad9168fa6acc5c5c2965ddf6ec465ca42fd818-05403304060446",
		FaceID:         FaceFixtures.Get("actress-1").ID,
		FaceDist:       0.5099754448545762,
		SubjSrc:        "",
		SubjUID:        SubjectFixtures.Get("actress-1").SubjUID,
		MarkerSrc:      SrcImage,
		MarkerType:     MarkerFace,
		MarkerName:     "",
		LandmarksJSON:  []byte("[{\"name\":\"lp46\",\"x\":-0.12421875,\"y\":-0.05516432,\"h\":0.07629108,\"w\":0.05078125},{\"name\":\"lp46_v\",\"x\":0.11875,\"y\":-0.061032865,\"h\":0.07394366,\"w\":0.04921875},{\"name\":\"lp44\",\"x\":-0.0671875,\"y\":-0.07746479,\"h\":0.07511737,\"w\":0.05},{\"name\":\"lp44_v\",\"x\":0.09921875,\"y\":-0.08568075,\"h\":0.07511737,\"w\":0.05},{\"name\":\"lp42\",\"x\":-0.01484375,\"y\":-0.048122067,\"h\":0.07511737,\"w\":0.05},{\"name\":\"lp42_v\",\"x\":0.0546875,\"y\":-0.049295776,\"h\":0.07394366,\"w\":0.04921875},{\"name\":\"lp38\",\"x\":-0.034375,\"y\":0.01056338,\"h\":0.07511737,\"w\":0.05},{\"name\":\"lp38_v\",\"x\":0.05078125,\"y\":0.0035211267,\"h\":0.07394366,\"w\":0.04921875},{\"name\":\"lp312\",\"x\":-0.0984375,\"y\":0.0023474179,\"h\":0.07511737,\"w\":0.05},{\"name\":\"lp312_v\",\"x\":0.10078125,\"y\":-0.005868545,\"h\":0.07511737,\"w\":0.05},{\"name\":\"mouth_lp93\",\"x\":0.04765625,\"y\":0.15375587,\"h\":0.072769955,\"w\":0.0484375},{\"name\":\"mouth_lp84\",\"x\":-0.06015625,\"y\":0.25704226,\"h\":0.07511737,\"w\":0.05},{\"name\":\"mouth_lp82\",\"x\":0.009375,\"y\":0.3051643,\"h\":0.07511737,\"w\":0.05},{\"name\":\"mouth_lp81\",\"x\":0.021875,\"y\":0.2382629,\"h\":0.07394366,\"w\":0.04921875},{\"name\":\"lp84\",\"x\":0.065625,\"y\":0.26408452,\"h\":0.07511737,\"w\":0.05},{\"name\":\"eye_l\",\"x\":-0.0703125,\"y\":0.0011737089,\"h\":0.049295776,\"w\":0.0328125},{\"name\":\"eye_r\",\"x\":0.07109375,\"h\":0.048122067,\"w\":0.03203125}]"),
		EmbeddingsJSON: []byte("[[-0.030162131,-0.01176201,-0.014886564,0.007073464,0.11269621,-0.037331063,0.041961063,0.00563907,0.0064236526,-0.010960639,-0.0042644828,0.030771699,0.014614853,-0.0054937406,0.038051017,0.04635477,0.034364603,0.099259354,-0.004648092,0.0111822635,0.03520799,-0.03549263,0.012646834,-0.008714125,-0.017289585,-0.0675926,0.025010059,0.006254254,-0.03860531,-0.0064788107,0.0036798783,-0.07745418,-0.023225985,-0.03152003,0.021388594,-0.07726075,-0.0026089547,-0.045097895,-0.018101906,-0.09037953,-0.046974577,-0.0060178176,-0.019378802,-0.044005536,0.076491445,0.08707773,-0.010284405,-0.11935611,0.040282827,0.002283568,-0.04324527,-0.010690265,0.00821257,0.02017954,-0.07631943,-0.10987312,0.013558569,-0.022746177,-0.04028441,0.016965218,-0.040909234,-0.050942566,0.022242,0.120476194,-0.06658611,-0.043091573,-0.061836794,-0.05709718,0.021490382,0.0127024,-0.12067826,-0.072207615,0.08343471,-0.022888778,0.019897169,0.0061817374,0.0068232967,-0.061381537,0.04549849,0.024943795,-0.010488667,0.0060791434,-0.0025351476,-0.06707843,-0.018208109,0.047146965,-0.042749375,0.059901927,0.0059034643,0.0033945336,-0.07921299,0.05713912,0.04361319,0.028458657,-0.009879499,0.03140627,-0.03420856,0.06741427,0.032505736,-0.07861183,-0.06382085,0.047678914,-0.025663754,0.06887441,0.019920425,-0.10962419,-0.04204298,-0.033558466,0.016722236,0.0069335983,-0.06629326,0.0070168413,-0.05316388,-0.034083262,0.044397466,-0.057145473,-0.04868806,0.003810704,-0.03113833,0.00451248,0.033465132,-0.02550965,-0.0014888983,-0.018374179,0.083570614,0.018924896,0.02233672,-0.029520582,-0.040832445,-0.037519787,0.014580376,0.03572498,0.032270227,0.0011982368,0.07239436,0.02194068,0.009013371,-0.008845176,-0.087144405,-0.04784175,0.0037576582,0.08675284,-0.079827845,0.083858594,0.0052718134,-0.06609754,-0.017537236,0.0023137867,0.04661473,0.076047845,-0.08587876,0.03176565,0.045361705,0.040074382,0.0022822036,-0.051515233,-0.07997518,-0.048273496,0.0048421766,0.013196157,-0.001204384,0.007837211,0.0356769,0.059981547,-0.08063003,0.00008905198,-0.044701546,0.052903607,0.075195655,-0.018885499,-0.0026354361,0.00076671876,0.005910425,0.013754204,-0.09388003,0.03119816,-0.07051509,0.017419366,0.04646836,0.022504669,-0.0121046,-0.015959464,0.00077243324,0.021920238,0.042870726,-0.07402386,-0.014377326,-0.03249675,0.043629974,0.008337455,-0.04739697,0.007994139,-0.014181621,0.002159787,0.0032577785,-0.04634685,0.01633049,-0.095778786,0.039750375,-0.05830882,0.10493905,-0.03386401,-0.0011024777,0.000035083165,-0.031482525,0.08941169,-0.006559033,0.0011195478,0.007442567,0.011850524,0.014894581,0.07711941,-0.01781475,-0.07233728,0.0104106255,-0.02415632,-0.025316598,0.030230487,0.02232721,0.015015193,-0.025859257,0.09529066,0.010125857,0.045184348,0.11370714,-0.016670218,0.046251483,0.033300634,-0.027609989,0.0053348867,-0.029097768,-0.06434757,0.08473599,0.044195455,0.0017243569,0.006499155,0.022776723,0.013160947,0.030223062,0.051617682,0.023164669,0.0046141455,0.02451903,0.02003469,-0.06611676,-0.015008822,-0.009100582,-0.023646737,0.014851652,0.05118252,-0.00806539,-0.030246861,0.05131044,0.0018270313,0.016332064,-0.015110148,-0.0221731,0.07055847,-0.01610019,-0.07459282,-0.012506088,0.0392053,-0.030212378,0.040515084,0.07911197,0.013703636,-0.02601204,-0.007438952,0.013708828,-0.03800723,-0.013123793,-0.054646052,0.09945399,-0.026949355,0.056145936,0.000132012,0.012252103,0.032066572,0.048699293,0.02713033,-0.07295968,0.008908392,0.0289968,0.007670751,0.0094207395,0.030742127,0.036395837,0.030165685,0.0067158896,0.015760195,-0.020583164,-0.016060544,0.026999488,-0.0155271385,0.040173646,0.0033110501,0.033762258,-0.020186787,0.028177904,-0.054987755,0.040557962,0.046010483,0.0011205788,0.030392257,0.008612636,0.07607412,0.0008984152,-0.08356993,-0.015211418,-0.04510859,0.01222945,0.07540885,0.021029217,-0.009751237,0.03184632,0.01771495,0.009178708,0.05495884,0.025463067,-0.061587475,-0.010072273,-0.07609662,0.03149099,-0.008777812,0.013090374,-0.05082709,0.038662266,-0.022361549,-0.021717813,-0.041924257,-0.018597972,0.032336537,0.016977564,-0.038131896,-0.077193856,0.048771136,0.05553366,-0.021213856,-0.0015424791,-0.050436478,0.012934503,-0.008933084,-0.023577854,0.061587427,-0.01823785,0.059933748,0.035802152,0.040674545,-0.056200683,0.016260745,0.040546842,0.0039818278,0.04945143,-0.0018760421,0.06255753,0.084238365,-0.027262675,0.04971824,0.012032575,-0.059859876,0.003484273,-0.021963429,0.078829266,0.03816938,0.058965817,-0.049293403,-0.050726783,-0.01641507,0.04514422,0.036381047,-0.0033632722,0.012200278,0.036309812,0.0033158667,0.016262444,0.081099205,0.066613905,0.013018905,-0.09975876,0.088449836,-0.012223532,0.038857326,0.0781463,0.0018207218,0.020662569,0.028938767,-0.0030848426,0.02327823,0.031876724,0.021129506,-0.07868327,-0.009467011,0.00116268,0.065723725,0.046733923,0.05853955,0.0060063065,0.033734698,-0.077721916,-0.018714668,-0.008721541,-0.14526516,0.00048844464,-0.032561086,0.03130981,0.039426308,-0.017761374,0.051276337,-0.070010826,-0.014580368,0.026206205,0.05247335,-0.027971998,0.0450822,-0.0022506353,0.046587817,0.010188847,0.023309886,-0.0289147,0.028314758,-0.022734744,-0.04674994,0.036228098,-0.0016859015,-0.03641872,0.10718571,-0.0407207,0.0030549522,-0.013909063,-0.04348161,-0.11307476,0.026893105,0.035188023,0.034982115,0.039688844,0.0027830838,-0.04913703,-0.01759755,0.019436093,-0.020588767,-0.006698757,0.016285665,0.02749752,0.0060938844,-0.00225327,-0.009089173,0.04672811,-0.045318406,0.032092486,0.052882172,-0.035544295,-0.019481437,0.036609054,0.013728736,-0.0767841,0.014160247,0.00037633505,0.031475645,-0.027891,0.0007301672,-0.024034673,0.0037688382,-0.0075244275,-0.019190969,-0.0030586733,0.07638717,-0.058804777,-0.02630959,0.082916915,0.029464893,-0.036910444,-0.006469457,-0.0682574,-0.007479055,0.023391867,0.057415135,-0.063745,0.028567027,0.03873816,-0.033826143,-0.051247973,-0.07371592,-0.013598142,-0.047880393,0.025868626,-0.012925152,0.015025656,-0.054448534,0.06986233,-0.044671394,-0.037487887,-0.03713938,-0.044612743,0.023765674,0.058858916,-0.018240381,0.017626476,0.022116672,0.00901462,0.087559484,0.030257765,-0.044527713,-0.06482999,-0.025346886,-0.051224142,0.10009641,0.049901918,-0.03698612,0.038127467,-0.0647444,-0.04372432,-0.030457335]]"),
		X:              0.547656,
		Y:              0.330986,
		W:              0.402344,
		H:              0.60446,
		Size:           515,
		Score:          102,
	},
	"actor-a-1": Marker{
		MarkerUID:      "ms6sg6b1wowu1002",
		FileUID:        "fs6sg6bw45bn0005",
		Thumb:          "pcad9168fa6acc5c5c2965ddf6ec465ca42fd818",
		FaceID:         FaceFixtures.Get("actor-1").ID,
		FaceDist:       0.5223304453393212,
		SubjSrc:        "",
		SubjUID:        SubjectFixtures.Get("actor-1").SubjUID,
		MarkerSrc:      SrcImage,
		MarkerType:     MarkerFace,
		MarkerName:     "",
		LandmarksJSON:  []byte("[{\"name\":\"lp46\",\"x\":-0.19501466,\"y\":-0.040039062,\"h\":0.059570312,\"w\":0.08944281},{\"name\":\"lp46_v\",\"x\":0.24780059,\"y\":-0.026367188,\"h\":0.059570312,\"w\":0.08944281},{\"name\":\"lp44\",\"x\":-0.14516129,\"y\":-0.051757812,\"h\":0.05859375,\"w\":0.08797654},{\"name\":\"lp44_v\",\"x\":0.16568916,\"y\":-0.049804688,\"h\":0.059570312,\"w\":0.08944281},{\"name\":\"lp42\",\"x\":-0.06451613,\"y\":-0.036132812,\"h\":0.059570312,\"w\":0.08944281},{\"name\":\"lp42_v\",\"x\":0.052785926,\"y\":-0.036132812,\"h\":0.059570312,\"w\":0.08944281},{\"name\":\"lp38\",\"x\":-0.0659824,\"y\":-0.0048828125,\"h\":0.059570312,\"w\":0.08944281},{\"name\":\"lp38_v\",\"x\":0.08504399,\"y\":-0.001953125,\"h\":0.05859375,\"w\":0.08797654},{\"name\":\"lp312\",\"x\":-0.17008798,\"y\":-0.0087890625,\"h\":0.05859375,\"w\":0.08797654},{\"name\":\"lp312_v\",\"x\":0.2111437,\"y\":-0.0048828125,\"h\":0.059570312,\"w\":0.08944281},{\"name\":\"mouth_lp93\",\"x\":-0.026392963,\"y\":0.13183594,\"h\":0.059570312,\"w\":0.08944281},{\"name\":\"mouth_lp84\",\"x\":-0.08064516,\"y\":0.17871094,\"h\":0.05859375,\"w\":0.08797654},{\"name\":\"mouth_lp82\",\"x\":0.029325513,\"y\":0.23144531,\"h\":0.059570312,\"w\":0.08944281},{\"name\":\"mouth_lp81\",\"x\":0.0014662757,\"y\":0.18261719,\"h\":0.059570312,\"w\":0.08944281},{\"name\":\"lp84\",\"x\":0.14516129,\"y\":0.18652344,\"h\":0.057617188,\"w\":0.08651026},{\"name\":\"eye_l\",\"x\":-0.1260997,\"y\":-0.001953125,\"h\":0.037109375,\"w\":0.055718474},{\"name\":\"eye_r\",\"x\":0.1260997,\"y\":0.001953125,\"h\":0.037109375,\"w\":0.055718474}]"),
		EmbeddingsJSON: []byte("[[0.032855246,-0.07232429,-0.04815501,-0.011801741,-0.0032103483,0.0301237,0.05892233,0.00646951,-0.035176292,0.028196052,-0.030077307,-0.06685119,0.020990284,-0.038560383,0.01825826,-0.051752236,0.012342135,0.026032474,0.024240453,-0.006976277,-0.14969136,-0.0024285947,-0.0074134357,-0.09146982,-0.03967136,-0.021166649,-0.04581924,-0.053691976,0.029491227,-0.0051317145,-0.0078089074,0.054134272,-0.015014806,0.022364784,-0.033213902,-0.08593488,-0.039883927,0.014747101,-0.06490993,-0.028171739,-0.008159537,0.014380036,-0.04653358,-0.028092079,0.005439498,-0.010360581,0.025590211,-0.016143693,0.006029687,-0.085595444,-0.055133607,-0.006755117,0.017286904,0.0075420975,-0.028040254,-0.014315911,0.0063766106,-0.019893538,0.018132381,0.07130619,-0.06411563,-0.079487845,0.057442058,0.043432467,-0.0072473357,-0.069809444,0.02243422,-0.059182137,-0.084966816,-0.038870424,-0.071094975,-0.047527812,0.053081967,-0.040204182,-0.018401334,-0.033760473,0.037008327,-0.046002593,0.096362986,-0.034936786,-0.0039791833,0.010414152,-0.011183865,0.042103436,0.008567614,0.05292752,-0.03668417,-0.030097948,0.014000469,-0.060841605,0.003195719,-0.050103813,0.0065110154,-0.014163554,-0.012031434,0.004975188,-0.025715034,0.025361452,0.008923189,0.0067529576,0.029884145,-0.024447357,0.017704992,0.023883883,-0.0011254395,-0.04223931,-0.04498216,-0.025191432,0.012617899,-0.05203149,-0.04475085,0.03008548,-0.039378714,-0.043345124,-0.03391975,0.104752235,-0.009164133,-0.017720146,0.045362163,0.04255787,0.010183778,-0.08097497,0.031196896,-0.010245854,0.02766351,-0.026423447,0.05947675,-0.04628546,-0.006393928,0.039347947,0.0005482721,-0.05529541,-0.010070946,0.08361046,0.00062064436,0.007913768,-0.009913223,-0.021926977,0.05465324,-0.0128699485,-0.036495075,0.06539919,0.0034716618,0.012557881,0.030759508,0.019568035,-0.0066889264,-0.0033072212,-0.04575941,0.06363104,0.03148176,0.06466417,0.040457275,0.002027742,0.005893496,-0.0035623028,-0.0105139455,-0.06888851,-0.004222814,-0.05237192,-0.040226724,0.0267429,0.0051985127,-0.09201201,-0.05568559,0.015682995,-0.024375828,0.064885125,-0.025768446,0.03679055,0.057959937,0.0047564334,0.09244771,0.024140155,-0.062997594,0.027446521,-0.0065566306,0.0033643593,0.031703487,-0.02165699,0.05559023,0.066683054,0.0660726,0.00974781,0.07601043,0.017041292,0.070716895,-0.052387897,0.032530535,-0.06681567,-0.022871584,0.03352602,-0.017034536,-0.010388532,0.051305674,0.010019757,-0.022984471,-0.026172945,0.053954646,-0.06819696,-0.01015469,-0.003955051,0.036666665,-0.031050239,-0.08013679,-0.02837582,0.033354558,0.05159143,0.087239996,0.034515638,-0.04632376,-0.006268703,-0.0706901,0.012611078,0.037834905,0.04603518,0.05536366,0.00090115395,-0.003120968,0.06531989,0.07337324,0.08021952,-0.0026173447,-0.0103801275,-0.008948841,-0.03689586,0.01072744,0.0070689917,0.0043986184,0.026989233,-0.025442392,0.020562518,-0.01395705,0.017678566,-0.10774234,-0.039579976,0.026478361,-0.032912575,0.053048328,-0.07658681,0.041787766,-0.08298041,-0.10818516,-0.059092283,-0.044391647,-0.044744607,-0.055444222,-0.10885611,0.002826131,0.01760361,0.09931783,0.030719511,0.042219907,0.016767267,-0.07456513,0.05140381,-0.031062327,-0.023170024,-0.0138462065,-0.03884725,-0.015841696,0.03637182,0.01907891,0.019417608,0.015712734,0.0033817694,0.07003932,-0.017421255,-0.0017069357,-0.08243727,0.03423313,0.02788201,-0.005583366,-0.052891035,-0.08233641,0.008539445,-0.020276109,0.009965778,0.03451201,0.12913105,0.03131948,0.099913284,-0.042192973,0.048168365,-0.03535933,0.06434285,0.008922108,0.01933475,0.03413161,-0.024891391,-0.010270658,0.0063089533,0.020419398,0.06521184,0.062081676,0.038025275,-0.0007443501,-0.01351645,0.015005282,-0.0104653565,0.0060110176,-0.0043178573,0.0012482941,-0.015664661,-0.080216005,0.0011655743,0.040932383,-0.00019473187,-0.05673829,0.018231891,-0.10595597,-0.049569525,-0.035623502,-0.039944995,-0.03166565,-0.03705636,-0.0006584446,-0.044564996,0.054860123,-0.0142813185,-0.01221049,0.047282692,0.08554689,-0.038415514,0.012577251,-0.0887724,-0.05759227,-0.032659724,-0.04867507,-0.036066126,0.0026297516,0.056695156,0.07609243,-0.084324226,-0.030844916,0.025689159,0.054182667,0.023727974,-0.03401803,-0.0014428025,-0.03872163,0.0039440733,-0.026607404,-0.03244791,-0.016608475,-0.023798747,-0.056947183,-0.04391733,0.03018079,0.05194356,0.05005993,-0.009526605,-0.051233474,-0.025138993,-0.016654449,-0.055433895,-0.025031775,0.0075716795,-0.032692224,0.015471422,-0.016325194,-0.052670605,-0.001577893,0.060323358,-0.005554155,0.020635812,0.03396529,0.023938023,-0.008477038,0.059978757,0.032743372,0.029255355,-0.050158966,0.014001326,-0.0497458,-0.049451165,-0.009876491,0.012463847,0.059876304,-0.048628423,-0.061366163,-0.043104444,-0.059743315,-0.027501991,-0.026212567,0.0056909523,-0.011885602,-0.0025480723,0.021128116,0.002087354,0.047409065,-0.011387444,-0.0027466123,0.013988325,0.0356983,0.037437078,-0.027809894,-0.0453338,0.036766164,-0.07042974,-0.062130354,0.013886667,-0.06115635,0.11400308,0.07871207,-0.008551372,-0.045933083,0.0133141875,-0.044125218,-0.0035975785,0.020274017,0.033914942,0.00045532387,-0.06851983,0.012079694,0.03451323,-0.009954221,0.0021440156,-0.00965334,0.0636073,-0.05002175,-0.045848675,0.04829302,0.05098234,-0.014159836,0.036640894,-0.014516405,-0.0073460895,-0.044774447,0.02955026,0.019875972,-0.021161543,0.021274494,0.012587778,-0.0029330768,0.0055311676,-0.03819962,-0.070777535,-0.0019666136,0.06333522,-0.06267681,-0.01205497,-0.00023279272,-0.019530538,0.051965658,-0.03133921,-0.00081407005,-0.035302483,-0.05896832,-0.08426587,-0.014516043,0.004309106,0.03311867,-0.023665972,0.047257707,-0.01812261,-0.027997129,-0.025251692,-0.021959215,0.020541757,0.0014857346,0.09639087,0.05580496,0.030594379,-0.036150362,0.009014544,0.09634428,-0.03496988,-0.022672776,-0.006968501,-0.04056171,-0.108776055,-0.050350178,0.12082129,0.079713605,0.029853592,0.017477341,-0.04754323,0.020407882,0.09167366,0.0330347,-0.037753075,-0.016409004,-0.07574358,0.052205704,-0.020273402,-0.08381828,-0.01966146,-0.010071673,0.07455173,-0.09812973,-0.047724105,-0.010024544,-0.032340642,-0.0752673,-0.051842786,0.018969253,0.020976553,0.019409496,0.012322483,0.03501961,-0.076072074,-0.008648517,0.025028905,-0.04160748,-0.009214679,-0.047751524,-0.01350248,0.052919757,-0.08047056,-0.106879674,0.04316481]]"),
		X:              0.388563,
		Y:              0.407227,
		W:              0.683284,
		H:              0.455078,
		Size:           466,
		Score:          39,
	},
	"actor-a-2": Marker{
		MarkerUID:      "ms6sg6b1wowu1003",
		FileUID:        "fs6sg6bq45bnlqd0",
		Thumb:          "pcad9168fa6acc5c5c2965ddf6ec465ca42fd818",
		FaceID:         FaceFixtures.Get("actor-1").ID,
		FaceDist:       0.5088545446490167,
		SubjSrc:        "",
		SubjUID:        SubjectFixtures.Get("actor-1").SubjUID,
		MarkerSrc:      SrcImage,
		MarkerType:     MarkerFace,
		MarkerName:     "",
		LandmarksJSON:  []byte("[{\"name\":\"lp46\",\"x\":-0.15982404,\"y\":-0.01953125,\"h\":0.041992188,\"w\":0.06304985},{\"name\":\"lp46_v\",\"x\":0.16129032,\"y\":-0.016601562,\"h\":0.04296875,\"w\":0.06451613},{\"name\":\"lp44\",\"x\":-0.10410557,\"y\":-0.043945312,\"h\":0.04296875,\"w\":0.06451613},{\"name\":\"lp44_v\",\"x\":0.11143695,\"y\":-0.037109375,\"h\":0.04296875,\"w\":0.06451613},{\"name\":\"lp42\",\"x\":-0.038123168,\"y\":-0.029296875,\"h\":0.041992188,\"w\":0.06304985},{\"name\":\"lp42_v\",\"x\":0.045454547,\"y\":-0.026367188,\"h\":0.04296875,\"w\":0.06451613},{\"name\":\"lp38\",\"x\":-0.049853373,\"y\":-0.0029296875,\"h\":0.041992188,\"w\":0.06304985},{\"name\":\"lp38_v\",\"x\":0.057184752,\"y\":0.0009765625,\"h\":0.041992188,\"w\":0.06304985},{\"name\":\"lp312\",\"x\":-0.13489737,\"y\":-0.00390625,\"h\":0.04296875,\"w\":0.06451613},{\"name\":\"lp312_v\",\"x\":0.13343109,\"y\":0.0048828125,\"h\":0.041992188,\"w\":0.06304985},{\"name\":\"mouth_lp93\",\"x\":-0.0029325513,\"y\":0.076171875,\"h\":0.041992188,\"w\":0.06304985},{\"name\":\"mouth_lp84\",\"x\":-0.08211144,\"y\":0.12792969,\"h\":0.04296875,\"w\":0.06451613},{\"name\":\"mouth_lp82\",\"x\":-0.0058651026,\"y\":0.15136719,\"h\":0.04296875,\"w\":0.06451613},{\"name\":\"mouth_lp81\",\"x\":-0.004398827,\"y\":0.11816406,\"h\":0.04296875,\"w\":0.06451613},{\"name\":\"lp84\",\"x\":0.079178885,\"y\":0.13183594,\"h\":0.041992188,\"w\":0.06304985},{\"name\":\"eye_l\",\"x\":-0.09090909,\"y\":-0.001953125,\"h\":0.029296875,\"w\":0.04398827},{\"name\":\"eye_r\",\"x\":0.09237537,\"y\":0.0029296875,\"h\":0.029296875,\"w\":0.04398827}]"),
		EmbeddingsJSON: []byte("[[0.025850557,-0.06093545,0.0368982,0.06372315,0.05819578,0.02103298,0.01997543,-0.00091705215,-0.0044884095,0.02101784,-0.010375784,-0.069441825,-0.041025233,-0.02052857,-0.021357061,-0.05729292,0.01153833,0.07206746,0.03228107,0.027049806,-0.09680665,0.026478615,-0.01815613,-0.11853885,-0.09021952,-0.032307897,-0.008106277,-0.012864208,0.006889873,-0.0035746095,-0.020889107,0.015340129,-0.030180681,-0.022996614,0.028324237,-0.09605296,0.0023181369,-0.045894492,-0.052518725,-0.02263554,-0.0049566897,0.07417423,0.011769089,-0.040978402,-0.030022662,-0.030996634,0.030147078,0.009252719,-0.005372327,-0.057348363,0.003100089,0.0016500733,0.03800931,0.04001668,0.012677207,-0.059954997,0.014178818,-0.0070479973,-0.0021506618,0.042117607,-0.05819657,-0.05596404,0.0651372,0.023987,-0.026973046,-0.039929256,0.039374754,-0.018362906,0.016696857,-0.07892796,-0.040695485,-0.025516117,0.034011215,-0.06638884,-0.015205762,-0.024361376,0.10429649,-0.06252967,0.0572541,-0.018680168,-0.0020993226,-0.0017909874,0.02976623,0.04914115,0.009871193,0.088365585,0.015116564,-0.086087346,0.036731087,0.0000752887,0.0060829753,-0.002749375,0.025623456,0.00021773092,-0.050351918,0.060579132,-0.014586461,0.025068155,-0.007418315,0.017641086,0.02851262,-0.020255527,0.0070640934,0.020123357,-0.004319393,-0.02265385,-0.0010601471,-0.020050107,0.039150067,-0.018594569,0.016206533,0.039614532,-0.042292144,0.010547318,-0.087099105,0.084688775,0.012596003,0.0063226717,0.072233714,0.07767242,0.0016507888,-0.07450455,0.0289588,-0.011538841,0.03744912,-0.007990092,0.044274215,-0.031113053,-0.032958783,0.07143125,-0.006628044,-0.035622302,0.0010994285,0.05464144,0.010740343,0.071469724,-0.072258435,-0.0325497,0.069872566,0.015427646,-0.03811206,0.07467409,-0.0014575481,0.05232805,0.008112917,0.051944427,-0.0024722444,0.0055723167,-0.011392005,0.07161022,0.07032855,0.0355871,0.008825621,0.0087439,-0.01611391,0.009837366,0.017460005,-0.020397808,-0.051347066,-0.030875728,-0.021624234,-0.021304565,-0.057859488,-0.04132616,-0.02648937,0.053935815,-0.03601852,0.031489648,-0.046292003,0.031165944,0.06813594,-0.0105578145,0.04025706,0.029717738,-0.036843926,0.0051157004,-0.0045793215,0.011164978,0.00013289182,-0.009687761,0.007492278,0.08754006,0.04718467,-0.048819933,0.0042895875,0.027882833,0.027942829,-0.057678856,0.044429038,-0.04565885,0.0011657312,0.08049496,-0.036958806,-0.008910369,0.056621093,0.026110312,-0.061702363,0.017555503,0.041242205,-0.038715087,-0.037767734,0.0046808748,0.00016832014,-0.02544352,-0.047905717,-0.009043355,0.012068452,0.08852993,0.040326595,0.034892663,-0.036096767,-0.04851799,0.020822499,0.0027219756,-0.046346728,0.031942263,0.023767224,0.044103436,-0.027173864,0.08712574,0.09681587,0.02972255,0.059853315,0.0140766725,-0.012022688,0.046874333,-0.02156004,-0.062485,0.04218151,0.016493505,0.09185935,0.03941136,-0.032595742,0.032620214,-0.054721415,-0.046962306,-0.013343799,-0.017996676,0.015918111,0.009111351,0.008349152,-0.095217675,-0.07116934,0.017525194,-0.04458484,-0.045515705,-0.03465809,-0.07348762,0.022729497,-0.00044160505,0.05590264,-0.04496442,0.04204909,0.0097087035,-0.04508295,0.01772759,-0.06171485,-0.022922626,0.009498403,-0.09159762,-0.03441869,0.08626533,0.10709985,0.004760334,0.014014961,0.033757064,0.016755385,-0.024957133,0.0062322705,-0.042117853,0.01842548,0.030491084,0.01871334,-0.08051873,-0.05987026,0.0065961587,-0.0428282,-0.014284081,0.020128557,0.08936088,0.009462254,0.102014415,-0.04007223,0.05792014,-0.10125429,0.01435374,-0.0080212075,0.03926293,0.066572085,0.011050679,-0.035060946,-0.02754076,-0.031371504,0.042674374,0.05182274,0.045753364,-0.019049607,-0.045874137,-0.046058774,-0.04331934,-0.022159534,0.044569768,0.026029905,0.03460048,-0.026210295,-0.010067363,0.02149376,0.051106166,-0.09497297,-0.0051454003,-0.031769942,0.013681938,-0.05617198,-0.022969976,0.04372262,-0.019325681,0.017163664,-0.03892902,0.052662864,0.009360625,0.053500857,0.090902716,0.15222716,0.015904753,0.044421777,-0.077695005,0.013201821,-0.022117233,-0.021025725,-0.045937363,-0.027292019,0.02432692,0.06508629,-0.040242467,-0.00741067,0.038486846,0.08022589,0.038982328,-0.059829433,-0.04762815,0.012859384,0.036591094,-0.040744346,-0.03644136,-0.029906962,-0.0026252659,-0.059644774,-0.018045977,0.03221406,-0.032125678,0.00041471247,-0.029704632,-0.017819304,-0.0037686932,-0.024612611,-0.07163339,0.0043299384,0.04770555,-0.03924099,0.056008447,0.028763933,0.05188814,-0.019262461,0.085330844,0.010896455,-0.0051132934,-0.03471156,-0.0148428455,-0.010709143,0.08729209,-0.0016238821,0.01891455,-0.050513223,0.04513832,-0.12252999,-0.005879728,-0.052913003,0.011536323,0.08204751,0.00536133,-0.022050064,0.0057066055,-0.03886006,-0.017958729,0.004520475,0.06552154,-0.010891071,0.00014121566,0.0076887296,-0.0011419698,0.011958931,0.018182158,-0.026482873,-0.004512454,0.05684528,0.050684657,-0.039094076,-0.04004381,0.06436006,-0.07305537,-0.037933875,-0.04439576,-0.1013637,0.085403785,0.09011323,-0.038690835,-0.06788751,0.0106515465,0.029921878,-0.005176694,0.012238351,0.014081106,0.026094873,-0.03305788,-0.011139984,-0.015388231,-0.051220205,0.0049824836,0.014251263,0.09640484,-0.030268047,-0.053675987,0.03731559,0.007775012,0.035535563,0.02225952,-0.053412843,0.026593747,-0.051303796,0.017838547,0.010709802,-0.020094335,0.06521372,0.04491418,-0.029864738,-0.041365206,-0.009245257,-0.056656696,-0.036779195,0.0066534644,-0.049411103,-0.055952385,-0.012297519,-0.016213154,0.01843797,0.010769171,0.00475617,-0.0096877115,-0.045869652,-0.10229853,-0.02326172,0.024581168,0.025495404,-0.030882027,0.038255822,-0.03170366,-0.053069178,-0.06427871,-0.028199887,0.039933547,0.05443948,0.08602497,0.009807377,0.010963302,-0.07279134,-0.006742718,0.12988268,-0.04568489,-0.038965367,-0.028095778,-0.024067627,-0.05677665,-0.037691217,0.0778802,0.07255626,0.041965704,0.012700325,-0.054935027,-0.036121413,0.068424605,-0.011170968,0.034630798,0.04743858,-0.048249003,0.0016257163,0.040156122,-0.08245449,-0.020883203,-0.048990805,0.07229405,-0.067015775,-0.022706345,-0.02952138,0.022175975,-0.021930775,-0.038443886,0.036818188,0.010916856,-0.031726003,0.061578147,0.031199284,-0.04972384,-0.0091532385,0.02102439,0.033434935,-0.022444356,-0.042535402,-0.009987717,0.041546587,-0.05721117,-0.09052485,0.016235605]]"),
		X:              0.590909,
		Y:              0.364258,
		W:              0.543988,
		H:              0.362305,
		Size:           371,
		Score:          164,
	},
	"actor-a-3": Marker{
		MarkerUID:      "ms6sg6b1wowu1004",
		FileUID:        "fs6sg6bw45bn0008",
		Thumb:          "pcad9168fa6acc5c5c2965ddf6ec465ca42fd818",
		FaceID:         FaceFixtures.Get("actor-1").ID,
		FaceDist:       0.3139983399779298,
		SubjSrc:        "",
		SubjUID:        SubjectFixtures.Get("actor-1").SubjUID,
		MarkerSrc:      SrcImage,
		MarkerType:     MarkerFace,
		MarkerName:     "",
		LandmarksJSON:  []byte("[{\"name\":\"lp46\",\"x\":-0.18475074,\"y\":-0.021484375,\"h\":0.044921875,\"w\":0.06744868},{\"name\":\"lp46_v\",\"x\":0.17008798,\"y\":-0.032226562,\"h\":0.044921875,\"w\":0.06744868},{\"name\":\"lp44\",\"x\":-0.12170088,\"y\":-0.045898438,\"h\":0.045898438,\"w\":0.06891496},{\"name\":\"lp44_v\",\"x\":0.12316716,\"y\":-0.043945312,\"h\":0.045898438,\"w\":0.06891496},{\"name\":\"lp42\",\"x\":-0.03372434,\"y\":-0.034179688,\"h\":0.045898438,\"w\":0.06891496},{\"name\":\"lp42_v\",\"x\":0.052785926,\"y\":-0.033203125,\"h\":0.044921875,\"w\":0.06744868},{\"name\":\"lp38\",\"x\":-0.048387095,\"y\":-0.005859375,\"h\":0.044921875,\"w\":0.06744868},{\"name\":\"lp38_v\",\"x\":0.06304985,\"y\":-0.0068359375,\"h\":0.045898438,\"w\":0.06891496},{\"name\":\"lp312\",\"x\":-0.14662756,\"y\":-0.001953125,\"h\":0.044921875,\"w\":0.06744868},{\"name\":\"lp312_v\",\"x\":0.14369501,\"y\":-0.0068359375,\"h\":0.045898438,\"w\":0.06891496},{\"name\":\"mouth_lp93\",\"x\":0.026392963,\"y\":0.08496094,\"h\":0.045898438,\"w\":0.06891496},{\"name\":\"mouth_lp84\",\"x\":-0.07331378,\"y\":0.14746094,\"h\":0.045898438,\"w\":0.06891496},{\"name\":\"mouth_lp82\",\"x\":0.014662757,\"y\":0.15527344,\"h\":0.044921875,\"w\":0.06744868},{\"name\":\"mouth_lp81\",\"x\":0.014662757,\"y\":0.1328125,\"h\":0.044921875,\"w\":0.06744868},{\"name\":\"lp84\",\"x\":0.09090909,\"y\":0.12890625,\"h\":0.044921875,\"w\":0.06744868},{\"name\":\"eye_l\",\"x\":-0.09677419,\"y\":0.0029296875,\"h\":0.029296875,\"w\":0.04398827},{\"name\":\"eye_r\",\"x\":0.09824047,\"y\":-0.001953125,\"h\":0.030273438,\"w\":0.045454547}]"),
		EmbeddingsJSON: []byte("[[0.0241189,-0.025448853,0.01971207,0.07477431,0.029368635,0.065149345,0.019691017,-0.027140766,-0.069330186,0.01369886,0.022924561,-0.10598081,-0.0107157715,-0.04387154,0.00074134365,-0.08449435,-0.013399419,0.062207934,0.016872669,0.010151844,-0.08972217,0.01775942,-0.037011825,-0.08675501,-0.08084332,0.007980393,0.024497543,-0.030971544,0.0054492033,0.017956365,0.035841327,0.07698076,-0.03380329,0.008567795,-0.023067271,-0.09811399,-0.0010807886,-0.0054811924,-0.05164965,-0.024714936,-0.037977934,0.01928394,-0.0017313755,-0.031516418,0.005060377,-0.063584946,0.03184435,0.0071552224,0.019650856,-0.05358221,-0.013053836,-0.0040250854,0.06048915,0.037270173,0.03410795,-0.032625496,0.022053579,-0.008050705,0.026254226,0.054191872,-0.0050928732,-0.0701365,0.08091048,-0.011165439,0.009210382,-0.042749535,-0.0025287757,-0.033075456,-0.047698416,-0.027112162,-0.06173463,0.016861385,-0.011524539,-0.046826746,0.006913302,-0.014969781,0.037694477,-0.08483616,0.06804454,-0.05438421,-0.0026405696,0.009939937,0.036037885,0.025078684,0.0023995,0.035154417,-0.0073386175,-0.06873133,0.079220675,-0.038906228,0.00889237,-0.01367475,-0.01234027,0.022059537,0.0067459717,0.03250029,-0.0028207155,-0.004059492,0.010042018,0.038391475,0.05251459,-0.0472587,0.022298004,-0.020642964,-0.015391656,0.0030214072,-0.06672993,-0.05324318,-0.009793097,-0.028919524,0.010212229,0.094463356,-0.05920518,-0.011330406,-0.06278151,0.119243756,-0.0062643364,-0.003138933,0.03991868,0.075746424,-0.01245529,-0.040539727,0.02519044,0.0035121313,0.018371355,-0.010697244,0.045725945,-0.044019576,0.033581235,0.05349032,0.029611032,-0.048856873,0.029358555,0.07958862,0.007803037,0.033951145,-0.0520466,-0.028146595,0.030594697,0.009223683,-0.03279937,0.0834495,-0.025979092,0.011159661,0.0017479698,0.092388265,0.02655674,-0.012700307,-0.011329149,0.09861018,0.03926978,0.06700136,-0.0052194875,-0.023631724,0.019508827,0.028228413,-0.01890668,-0.022872308,0.014641512,-0.054289263,-0.043869156,-0.034021996,-0.013381035,-0.025692547,-0.079564564,0.010310671,-0.03143431,0.034518253,-0.021919694,0.015661074,0.100572236,0.012357619,0.07375158,0.05263366,-0.06739581,0.043482315,-0.030185254,0.026642513,-0.009051221,-0.0137912715,0.031073352,0.051403936,0.056526307,-0.05260979,0.031139035,0.039328396,0.073295236,0.008607304,0.03255723,-0.05729197,-0.02364793,0.06145766,0.011409498,-0.01736089,0.011772054,0.020448195,-0.04909043,-0.018005868,0.040363066,-0.072531186,-0.03743413,-0.017628878,0.023893634,-0.0025076326,-0.02479488,-0.029163662,0.020921819,0.040692117,0.025948912,-0.013020787,-0.04117587,-0.05791494,0.022829456,0.06012986,-0.004330102,0.05611698,0.06765467,0.028230835,0.0031771883,0.05605863,0.074357055,0.037313923,0.016163273,0.04561953,0.03224548,-0.0007505003,-0.013430067,-0.024415143,0.0253009,0.023222398,0.057590898,0.08652045,-0.04533834,0.014417665,-0.06354011,-0.0362967,-0.029949388,0.029054292,0.042659663,-0.069231145,-0.017795684,-0.057715464,-0.11571932,-0.0047633424,-0.012693249,-0.054190062,-0.015187415,-0.114473745,0.03666413,0.024795914,0.01079902,-0.04760727,0.022203835,0.0014664391,-0.036828913,-0.009136192,-0.05434181,-0.009194948,0.025657827,-0.08249531,-0.0011342004,0.044261448,0.110017076,0.017704211,0.009680822,-0.040511273,0.0214013,-0.03371387,0.008263556,-0.087992616,0.08248352,0.06568328,0.0013820113,-0.045540746,-0.07393807,0.032076474,-0.010202442,-0.004528019,0.013565449,0.09030435,0.028257981,0.06743232,-0.060353294,0.050759707,-0.08575617,0.05504735,-0.0041432222,-0.030415514,0.020774705,-0.014768877,-0.043551575,0.0075783143,-0.022090174,0.07088676,0.039059203,0.026824951,-0.018257143,-0.059455562,0.0068820897,-0.023811212,0.025966812,0.038778935,0.03408857,-0.003927295,-0.009927159,0.006845898,0.022898953,0.095958136,-0.10943442,0.059841156,-0.0329057,-0.014989488,-0.0099570425,-0.0054250853,0.028435722,-0.005912107,0.0015472741,-0.070560716,0.01405069,0.02599756,0.055876102,0.06497188,0.06686203,-0.00041323446,0.071866155,-0.08703112,0.019231811,-0.019437244,-0.01683527,-0.027770445,0.005866662,0.03531373,0.04985404,-0.057761267,-0.05643273,0.031104514,0.027478304,0.012353039,-0.042244535,-0.027004665,-0.015228322,0.0033582435,-0.003757445,-0.021780523,-0.0002495209,0.003004802,-0.067975186,-0.027171573,0.047085125,-0.027879145,-0.046555117,-0.03397349,-0.05223016,-0.036266815,-0.01995977,-0.018127305,0.03331055,0.011295108,-0.032571245,0.030799594,-0.0032081523,-0.005006236,-0.051317785,0.051040146,0.013830912,-0.013475147,-0.033495985,0.0041825725,-0.038844317,0.07565783,0.051785465,0.034383923,-0.057561517,0.023323342,-0.10755573,-0.057723172,-0.034321193,-0.007261268,0.04946982,-0.07867155,-0.043154243,-0.050276272,-0.028036693,-0.072502784,-0.035116717,0.023928309,-0.006641352,-0.028951764,-0.0041091447,0.02050946,0.029804204,0.0095836185,-0.0005514448,-0.010170746,0.038714428,0.052193444,-0.054136213,0.016370663,0.039368838,-0.071207434,-0.059000753,0.025615899,-0.05380398,0.10234193,0.07370049,-0.034783952,-0.071128905,0.036198493,-0.0009824741,0.038318958,0.020151136,0.028071845,-0.010147319,-0.03663609,0.017137734,-0.0032465514,-0.06701466,0.010660954,0.011438627,0.08278354,-0.051199164,-0.08603243,0.022747265,0.020045064,0.013767936,0.02868625,-0.0062343683,0.042678885,-0.014097165,0.052178975,-0.006595326,-0.036774322,0.02628719,-0.0106942,0.007208945,-0.02574367,-0.04521323,-0.08107589,-0.0017406823,0.01035763,-0.04006552,-0.041636836,-0.033654448,-0.028680064,0.014997795,0.0049166796,-0.007070443,0.028293293,-0.05064481,-0.102517426,0.0003173745,0.012364589,0.010157306,-0.03782072,0.04388659,0.0053726607,-0.07745431,-0.051161427,-0.009871388,0.044439815,0.019786526,0.12772952,0.041621633,0.061495423,-0.069796726,-0.015762078,0.14293943,-0.016974578,-0.045484126,-0.051442474,-0.036469147,-0.107812196,-0.04059229,0.09380313,0.041693937,0.012281637,0.00004808483,-0.05351686,-0.025729517,0.03091851,0.0027129648,0.005839676,0.04283082,-0.052247364,0.0037811226,0.007034242,-0.091081426,-0.013131171,-0.052680276,0.06921746,-0.064018995,-0.0019934413,-0.017883189,0.0024744943,-0.049458586,-0.046182927,0.04503004,0.0022532486,0.018249985,0.06025625,0.052217223,-0.063786834,0.040839724,-0.013639264,-0.008605548,-0.0015252201,-0.02793267,-0.0148031525,0.05309417,-0.030952483,-0.06517421,0.051078424]]"),
		X:              0.423754,
		Y:              0.286133,
		W:              0.549853,
		H:              0.366211,
		Size:           375,
		Score:          100,
	},
	"actor-a-4": Marker{
		MarkerUID:      "ms6sg6b1wowu1005",
		FileUID:        "fs6sg6bw45bnlqdw",
		Thumb:          "pcad9168fa6acc5c5c2965ddf6ec465ca42fd818",
		FaceID:         FaceFixtures.Get("actor-1").ID,
		FaceDist:       0.3139983399779298,
		SubjSrc:        "",
		SubjUID:        SubjectFixtures.Get("actor-1").SubjUID,
		MarkerSrc:      SrcImage,
		MarkerType:     MarkerFace,
		MarkerName:     "",
		LandmarksJSON:  []byte("[{\"name\":\"lp46\",\"x\":-0.2170088,\"y\":-0.043945312,\"h\":0.064453125,\"w\":0.09677419},{\"name\":\"lp46_v\",\"x\":0.24780059,\"y\":-0.018554688,\"h\":0.06347656,\"w\":0.09530792},{\"name\":\"lp44\",\"x\":-0.15542522,\"y\":-0.057617188,\"h\":0.06347656,\"w\":0.09530792},{\"name\":\"lp44_v\",\"x\":0.17008798,\"y\":-0.037109375,\"h\":0.064453125,\"w\":0.09677419},{\"name\":\"lp42\",\"x\":-0.06451613,\"y\":-0.033203125,\"h\":0.0625,\"w\":0.09384164},{\"name\":\"lp42_v\",\"x\":0.06304985,\"y\":-0.025390625,\"h\":0.06347656,\"w\":0.09530792},{\"name\":\"lp38\",\"x\":-0.07331378,\"y\":-0.0068359375,\"h\":0.064453125,\"w\":0.09677419},{\"name\":\"lp38_v\",\"x\":0.08211144,\"y\":0.0029296875,\"h\":0.06347656,\"w\":0.09530792},{\"name\":\"lp312\",\"x\":-0.19061583,\"y\":-0.018554688,\"h\":0.0625,\"w\":0.09384164},{\"name\":\"lp312_v\",\"x\":0.2111437,\"y\":0.0048828125,\"h\":0.06347656,\"w\":0.09530792},{\"name\":\"mouth_lp93\",\"x\":-0.03372434,\"y\":0.14160156,\"h\":0.0625,\"w\":0.09384164},{\"name\":\"mouth_lp84\",\"x\":-0.1202346,\"y\":0.17871094,\"h\":0.06347656,\"w\":0.09530792},{\"name\":\"mouth_lp82\",\"x\":-0.0029325513,\"y\":0.23730469,\"h\":0.0625,\"w\":0.09384164},{\"name\":\"mouth_lp81\",\"x\":-0.019061584,\"y\":0.1875,\"h\":0.06347656,\"w\":0.09530792},{\"name\":\"lp84\",\"x\":0.11583578,\"y\":0.1953125,\"h\":0.06347656,\"w\":0.09530792},{\"name\":\"eye_l\",\"x\":-0.13489737,\"y\":-0.0068359375,\"h\":0.041015625,\"w\":0.06158358},{\"name\":\"eye_r\",\"x\":0.13636364,\"y\":0.0068359375,\"h\":0.040039062,\"w\":0.0601173}]"),
		EmbeddingsJSON: []byte("[[0.034662753,-0.07515357,-0.027421089,0.027164537,0.03281823,0.034066916,0.040151987,0.005131678,-0.051408786,0.02138763,-0.0020104107,-0.092951514,0.0011152446,-0.04599768,-0.008270178,-0.045973886,0.005246504,0.0467101,0.027940497,0.009135831,-0.13090636,0.015421832,-0.008646728,-0.12298539,-0.07183828,-0.021239195,-0.01587619,-0.027267754,0.026962636,0.013014155,-0.018146865,0.03272022,-0.0355399,0.014600214,0.008228809,-0.08974728,0.004542779,-0.004164545,-0.06299126,-0.041513063,-0.010044361,0.045358863,0.007475488,-0.03035305,-0.0019370121,-0.03377335,0.02097817,-0.029641997,0.0053119785,-0.07807538,-0.053098224,-0.019402111,0.036674708,0.020695541,-0.022861501,-0.0328745,0.00041619025,0.0066822763,0.02678277,0.06844911,-0.024177998,-0.089664154,0.055873763,0.026511757,-0.016572997,-0.04733968,0.06041348,-0.04506725,-0.0440545,-0.043465305,-0.08466757,-0.047940645,0.06937382,-0.05174244,-0.031919822,-0.052532118,0.055104855,-0.057418138,0.09513463,-0.030847855,-0.013393116,0.017321678,0.015352415,0.06266471,0.004371987,0.082215935,-0.027642775,-0.037788026,0.019007893,-0.040698484,0.007252205,-0.04555225,0.0036288318,-0.019109517,-0.025423475,0.022892103,0.020521527,0.037838284,0.0069704326,0.0028434666,-0.000007890554,-0.027438216,0.01632463,0.044652876,-0.021146774,-0.059141133,-0.018336238,-0.03956552,0.016873531,-0.03617141,-0.036296625,0.0452434,-0.033563133,-0.044047527,-0.056349114,0.071866535,0.0006336365,0.0020115525,0.07210679,0.054019984,0.004293855,-0.077260524,0.015685929,0.007959316,0.027031986,-0.008321843,0.053827506,-0.019692779,-0.006546793,0.06447086,-0.009692751,-0.044721182,0.011167481,0.091063015,0.011955558,0.015812382,-0.03727312,-0.016216457,0.064182766,0.035192747,-0.03690497,0.053072676,-0.0014434075,0.03661861,-0.011134347,0.030718837,-0.026580738,-0.019045766,-0.002533027,0.09117581,0.07268581,0.06505146,0.026307546,0.0011414461,-0.014501565,-0.01381276,-0.010762091,-0.06934276,-0.030354645,-0.030254962,-0.040888697,-0.008559847,-0.0025087395,-0.06811634,-0.06408384,0.034834474,-0.03239649,0.018536773,0.0021422682,0.043406606,0.07114512,0.014656275,0.061994847,0.033170443,-0.057281204,0.02749827,0.0064080837,0.030610576,0.048294768,-0.033563465,0.031064298,0.0915216,0.052813128,-0.004047518,0.03655105,0.043488204,0.05502745,-0.038181335,0.052595284,-0.047716342,0.004784436,0.04710556,-0.054140363,-0.004285169,0.051303614,0.03542736,-0.053388838,0.01631177,0.031889267,-0.043530267,-0.025739623,0.0066037597,0.0041180085,-0.0343014,-0.06750475,0.01816452,0.010236262,0.07606839,0.05248127,0.014703146,-0.04228897,-0.042164054,-0.008262126,0.026167141,-0.0092158355,0.064278185,0.02536698,0.019015567,-0.033657987,0.09837179,0.074141435,0.04427338,0.0008232351,0.0030125817,-0.009613508,0.020759264,0.013438778,-0.026801428,0.029361656,0.029830646,0.034178168,0.041513868,-0.02565135,0.015280345,-0.091757916,-0.057591274,0.020382164,-0.032912165,0.047102317,-0.0537798,0.03522351,-0.070603274,-0.10042917,-0.044259664,-0.05656392,-0.066472664,-0.052284684,-0.07114145,0.010942273,0.018367367,0.06885217,0.000328366,0.015852025,-0.017089441,-0.055761185,0.03959602,-0.03540408,-0.027026111,0.01097983,-0.087987356,-0.0141266575,0.0477098,0.04715876,0.02981215,0.028453104,0.012142521,0.0414125,-0.007917575,0.019288184,-0.09619139,0.037593354,0.046853587,0.024258884,-0.040744804,-0.081190184,0.010178999,-0.017786952,0.0076704076,0.03182778,0.108371824,0.0300346,0.118935734,-0.030138513,0.053382974,-0.054067366,0.013308057,-0.002923006,0.04212049,0.06448999,0.008950148,-0.024584545,-0.016902402,-0.018726686,0.077366434,0.0720145,0.04482006,-0.020877872,-0.003987193,-0.0055302437,-0.040336147,-0.0020323289,0.025164614,0.01988865,0.0020544392,-0.06139798,0.017070476,0.051994644,0.013102099,-0.07839188,0.03814943,-0.06141372,-0.0053769723,-0.039636735,-0.062667124,0.0030709528,-0.01150501,-0.0037239688,-0.018055739,0.06664771,-0.007206864,0.017365457,0.045659833,0.119550705,-0.010744959,0.028682454,-0.08890404,-0.045568824,-0.03403332,-0.031422295,-0.04852906,0.0055045974,0.032420922,0.06823958,-0.07809195,-0.010570189,0.034012794,0.055969138,0.022515832,-0.048068438,-0.03258343,0.009647381,0.037987974,-0.03464533,-0.038181216,-0.061377004,-0.0004884829,-0.08379789,-0.057416007,0.031279963,0.019974045,0.017852016,-0.032113247,-0.008062755,-0.015848003,-0.012933433,-0.08879804,-0.0096005555,0.04632914,-0.041106034,0.015690649,-0.018962137,-0.009873597,-0.015545504,0.04258754,0.0063387137,-0.0227696,0.0015804488,-0.010803154,-0.030131789,0.06305187,0.02417472,0.030738,-0.08922446,0.02478569,-0.08690923,-0.031031277,-0.008328196,0.027938409,0.061026003,-0.032657385,-0.04322679,-0.029606264,-0.04135331,-0.045082416,0.0023190908,0.030073075,0.0035433297,-0.008771726,0.036227144,0.0069337306,0.036894448,0.024385192,-0.0076897577,0.013183864,0.05346051,0.056419842,-0.013123595,-0.011530761,0.039244197,-0.074317284,-0.049931187,-0.007667257,-0.08389443,0.1084195,0.102141395,-0.0045269835,-0.07588101,-0.012968535,-0.022474805,0.0009351038,0.027013958,0.030684583,0.00045854814,-0.04521747,0.028453987,0.0128245875,-0.021188725,0.00930826,-0.01831257,0.0883785,-0.022052575,-0.05507159,0.06886579,0.03973715,-0.0072707967,0.054643735,-0.0073106834,0.01063856,-0.061747946,0.037848778,0.0059647635,-0.012968941,0.025542775,0.026938496,0.009256024,0.0045996383,-0.0147836385,-0.05553128,-0.008061934,0.050770868,-0.06617903,-0.017863886,-0.012341288,-0.006366187,0.047267023,-0.00113794,0.0026080452,-0.01546114,-0.02984513,-0.10787811,0.009284058,0.012735944,0.037892807,-0.0268263,0.06422156,-0.013755387,-0.048054893,-0.045854043,-0.027558113,0.0057992544,0.039035577,0.1051863,0.03645703,0.04235808,-0.060727175,-0.013235699,0.1267887,-0.057449587,-0.02739236,-0.014682901,-0.027444385,-0.08132802,-0.048119355,0.09594713,0.0930062,0.049179528,0.02065355,-0.052434687,-0.017428227,0.08315784,-0.009780164,0.0048672156,0.017652279,-0.06980165,0.017093178,-0.007031052,-0.08876805,-0.0061365073,-0.049735166,0.05652551,-0.07136955,-0.023506315,-0.048254803,-0.008994596,-0.047011845,-0.03392492,0.05161366,0.032137435,0.014259274,0.04449572,0.03503813,-0.056423254,-0.015646791,0.021688757,-0.032869253,-0.0152852265,-0.035607334,-0.03943668,0.039529365,-0.03870807,-0.09175319,0.048733745]]"),
		X:              0.5,
		Y:              0.429688,
		W:              0.746334,
		H:              0.49707,
		Size:           509,
		Score:          100,
	},
	"ms6sg6b14ahkyd24": Marker{
		MarkerUID:      "ms6sg6b14ahkyd24",
		FileUID:        "fs6sg6bw45bnlqdw",
		Thumb:          "acad9168fa6acc5c5c2965ddf6ec465ca42fd818",
		FaceID:         "VF7ANLDET2BKZNT4VQWJMMC6HBEFDOG6",
		FaceDist:       0.3139983399779298,
		SubjSrc:        "",
		SubjUID:        "",
		MarkerSrc:      SrcImage,
		MarkerType:     MarkerFace,
		MarkerName:     "",
		LandmarksJSON:  []byte{},
		EmbeddingsJSON: []byte("[[0.10730543085474682,-0.007740289179353713,0.04013410115400314,0.01458170011165962,-0.033333988977870946,0.06636234022813034,-0.00010941258007316575,0.0266348918046072,-0.05017391628723953,0.026034562221256254,-0.03388911566430759,-0.03461048494812202,0.040559725024994844,0.02683793627304573,-0.00972269717541027,-0.07836494561032105,-0.022470260049817198,0.011276674801708603,-0.05526434009558201,0.014401617237932205,-0.031258523568474236,-0.05416104192368187,-0.05567222379755878,0.017950877029356768,-0.016397424193561935,0.062346790423413276,-0.019043469394284057,0.04085343435437774,-0.05627231374819698,0.002355368169155769,0.07268979656775187,-0.0015096598716884627,-0.030188596848975374,-0.030941932784964564,-0.02826790015985233,-0.05420075791573048,-0.015742074680253033,0.019360258910790157,-0.008227027287290193,-0.08797317745792674,-0.07358703463505077,0.09688007249803735,0.015168583267354964,-0.034569315837825396,0.054231690688333986,0.018033145214487362,0.01579093209709463,-0.09204238994311237,0.08645247031890774,-0.10499936100221444,0.022421303168151857,0.005288450124515152,-0.017391072021601867,0.011218363053184624,-0.08478270589438915,0.0038618527485391615,-0.023381522484070015,-0.05428399272960853,-0.049397680150033,0.04006855272634697,-0.056704127236808774,-0.00958812557516262,-0.024006645464504622,-0.0073450501057456975,-0.03138197361666756,-0.013765138786817361,0.01162637563227787,0.0023935177775817563,0.08953138773108768,0.05337418268588829,-0.012870218945196915,0.03652425150877475,-0.027783526080406188,-0.019489638927241745,-0.01591402705199299,-0.005031992847164803,-0.014592982936285286,-0.03540697236418762,0.015595597412254449,0.004689344744109726,-0.009276015175478172,0.0058068592886232374,0.10480716412028504,0.0169216338187767,-0.0159497901004467,0.04574707649004688,-0.012214007484710122,-0.04849749380776977,0.054958586523843764,0.055898306713647844,-0.05052226642217827,0.008803732924324036,0.02326267119630642,0.047305830959801676,0.04497242295638694,0.020850376996620942,0.01314765746152954,-0.06768179592533874,0.05844347174572754,-0.03379152370001783,0.009412363744416903,0.04876727547273407,0.03299943491180715,0.01981742466488743,0.0547951049219265,0.020208802772381018,-0.08163521584288311,-0.038910958658009524,-0.004049565234655952,-0.02227413252290535,-0.0176418922441086,0.0568860088455925,-0.03240221023084612,0.0018760896289435579,-0.03234445138420723,0.007601825631139565,0.004916589611196899,-0.07292478312312889,0.021712048014592936,0.008807552270011749,0.0045489283733609,0.018861112444398878,-0.0341377092368577,-0.06305481604926585,0.039113288345403674,-0.01390809621003151,-0.04930861238819008,0.02377057523982868,0.019087416355893325,-0.013899296822125817,0.02251690464443226,0.08074113913260841,-0.018922226267959787,0.07189693789385795,0.060660045672045707,-0.023638294307546808,-0.006141792394255906,-0.06662582397409247,-0.013895529799502565,0.016608829923953898,-0.00390724028582611,0.05038048671591301,-0.015355035841564064,-0.0008532485082750321,-0.004694504582768126,-0.016610601585741958,0.008180847821889228,-0.04035771976174698,0.01847608156922703,0.08409907464663602,-0.029978496458568385,-0.06499117178372192,0.07448235046571827,0.10142187900247382,-0.023405319141915855,0.05237413796294822,0.04315940939233541,-0.02349721355909328,0.012594679585403442,-0.10457832859776592,0.001468614040066719,0.0165479676672657,-0.07708675453700256,-0.05102918249748802,0.045642631412478735,-0.004785828004440499,0.0203317336356945,-0.02006395174473057,0.04201285855375195,0.032883700123707296,0.0477916040669878,0.08070634492548084,-0.09245629058029556,0.05112703265588493,-0.006224603994954872,-0.0005257819460310555,0.005513055457300567,0.02521921247766018,0.012207323409280013,-0.009936333046208725,-0.007426916158089448,0.027260071572856714,0.006004036209329835,-0.039462719505699156,0.04428369084658737,0.005021041270120048,0.00955255667591259,-0.024385389176467896,0.06930311634011002,-0.0389855151682066,0.009325780048200605,0.0067487294106089776,-0.0538568250434906,-0.04132319716445885,0.005287871307727813,0.02836177144018917,0.016369665767238237,-0.02612976718916588,0.0781344821977253,0.0124423230052565,0.007052016124275589,0.07093038059380721,-0.040975969278632354,0.05987170546998787,0.0429845054696949,0.06377765311330413,-0.054260408781722336,0.017124075467253648,0.011034745989844896,-0.01129856537228031,-0.03058279355517101,-0.052326615682374664,0.06340472755555274,-0.007235566082305412,0.08209440086026383,-0.0037407900405261995,-0.02100836190159107,0.051361881913555715,0.035520336595121764,0.019260735587613487,0.04814414379586697,-0.010566343916274241,-0.03353529212573547,0.05283452853813282,-0.027749841873006824,-0.03820509264906912,-0.0015166780129867554,0.02487160170807457,0.03048850776525669,-0.030538799520168875,0.0921192664219265,0.03269134465648327,-0.031787506815418434,-0.01908650508301182,0.05982613160244779,-0.053232109332236294,-0.03650761934345913,0.0026813365359365463,0.032588356136758805,-0.032364926929593085,0.07780626359498405,0.044541174425177764,0.011626562325897788,0.03554684517681643,-0.030510870967539787,-0.04088990689640999,0.07105028789278889,0.03138784011465073,-0.06342823476303319,0.09164142434876824,-0.0112280279000453,-0.04595559070266152,0.08798781996626949,0.026803936697537615,-0.0014241986940294257,-0.020834715982498548,0.023556784775891685,0.008996215819517326,-0.0012677171940084454,-0.07692881668502807,0.024615258007191814,0.02948731386628723,0.06911119150276565,-0.041541930091072085,0.07317672894504547,-0.012252912262506771,-0.03429316172188286,0.03286905748134327,0.025736928383919527,0.003926683415351601,0.006255630871762562,-0.020806247741813468,0.0675457214042778,0.007579460672946357,0.012004441173839569,-0.028187582314963343,-0.0018772867526912688,-0.01844064376148571,-0.05389302147970715,-0.04154738243111,-0.05912346626385308,-0.003186127453911171,-0.015869915592464562,0.036601020266580665,-0.08332522355102062,-0.015594113206121387,0.010554298175920372,0.009863903175943527,-0.04408378851017952,-0.01321298950931368,-0.026788807387387467,-0.00905998101737915,-0.07901183432849217,0.022626760559060342,0.05966787504726859,-0.0373913765745697,-0.00620443077226124,-0.005321248754354935,-0.05629461318153381,-0.04339327553344822,0.03066110013017902,-0.0560899433873785,0.029585001932263853,-0.06142458606396866,0.018855098215825178,0.03336997769082436,-0.07772387048591708,0.02869667860757885,0.04751144987925148,0.07131169258731747,0.01554444873138424,-0.019102520424152183,-0.06713599618322277,0.021553602847260475,0.022784952935549926,-0.07224605423420524,-0.03428428022313595,0.025510370273970604,-0.042455744666400605,0.024999596293880464,0.0007267671517935561,-0.007103063657435513,0.051193967364198685,-0.03918299151588478,-0.05340270113635778,-0.0005553757678619388,-0.04361415384515381,-0.05659870360464592,-0.003001301568729019,-0.10493783691904449,0.007865782491956196,-0.010459198798326888,0.03839990013440418,-0.029396389004837837,0.04123072916591454,-0.003870788638888664,0.011576299454542732,0.021793958225202522,0.0013144587776207917,-0.024084851461598205,-0.007895128372669067,0.02794634672595444,0.013256276108802492,-0.06581846043538475,-0.03512838380870453,0.010219935781849479,0.041956290830379675,-0.02193645334812136,0.036522118692461206,-0.04014683200312634,-0.007509486720670319,0.025035869046040268,0.03341998480559387,-0.03562761249035026,0.04892323307058029,-0.030771232001644132,-0.016917612628533363,0.002604945885121918,-0.044643074882380486,0.01154372547133419,-0.021955625942386627,0.018907365975515553,0.03550167291446045,0.01069377167082758,0.00010183658435096768,-0.04899959038740444,0.04724968668608978,-0.01864932432341235,0.0591259089168789,0.07907125494612216,0.028897156624642945,0.01633692932619137,0.06420496597867965,0.018129071607111358,-0.06522170992608013,-0.03939954941189146,0.04130569647272587,0.04419998725251961,0.04542913027885341,0.018470383181769943,0.008568164058957863,-0.06659949697784996,-0.053012251715078354,-0.020253768667636778,-0.0428765378002491,0.07184141544699574,0.02058260375849676,-0.03779574153167915,0.0021254573788347247,0.00922705617390442,-0.06903300705643031,0.048223514541707424,-0.008124176700399017,0.06623217639861775,0.011399885879904556,0.13320644195552445,-0.015707634324862062,0.004298537653726769,0.007440328888434029,-0.03552852988830433,0.006549433453245544,-0.019685784628289793,0.001693401851796341,0.050209905835451124,0.023254144681681632,-0.04905436637160683,-0.01058279299507389,0.06261640349854469,-0.07554102380998802,-0.010803172210683784,0.04001997347501145,-0.013296409033855438,0.056829244201244355,0.029110596151947783,0.006392164909307861,-0.0035876165295053485,-0.019022594469099045,-0.06487911801050472,0.02178870949222603,0.05293369045270252,0.0014374271403566358,0.02058438161717472,-0.05258523574003887,-0.03312468141761551,0.051533518133239746,0.03929023312081566,-0.07294044148252202,0.01607557897360134,-0.0007034383966050719,0.014925192443655966,0.051449392859268764,-0.06079890988933106,-0.04363216685223599,0.028568039422766974,0.045766175851156804,0.07275596444172669,-0.02276483221781349,0.09294405910429002,0.06625853254336929,-0.04167032707059745,-0.04751508792911625,-0.014774199240300752,0.023224616626467326,-0.01281115503053608,0.03472993899021339,0.008343472536062031,-0.011408440443860645,0.004419146704378701,0.05045044130775452,-0.03518939370823498,-0.04170123182437134,0.022208642446600917,0.07141607704347333,-0.04112406919064011,0.03227901691925602,0.03527487398910847,-0.029543274091153718,0.005872693907862854,-0.008123872357421475,-0.058780187362098696,-0.00027467445847377796,0.024044984289353373,0.057634827237228584,-0.04450547877367153,-0.03946884506688686,-0.02006971111822632,0.006139106799438476,0.014848452844277668,-0.040448605585189826,-0.047422823475079534,0.00047739853115692137,-0.03920787799786568,-0.05102518756346798,0.029106281725284004,0.023013759328845976,-0.0181101632871727,0.003943383191735267,-0.11744085779379082,0.00652325401639185,-0.0016088291387550352,0.004582751362570763,0.06564233218507957,0.014525142593546867,-0.05397913284980278,-0.005146496768864823,0.008265835225847246,-0.09204165418391608,-0.023673615795413973,0.016221329961976054,0.0560354235721693,-0.03387280199538708,0.011243025140723228,0.02789629877560217,0.07942785398379296,0.019745293456116107,-0.03951280953572121,-0.0325216371505229,-0.04877831216997623,0.008021598871560669,0.06607214515587043,0.08340918698473548,-0.06638043362871171,0.0003533690162649157,-0.05787711264029312,0.017585791805968413,-0.004768172475530777,-0.031721018591366806,0.059853391075907716,0.08903246940908241,0.00910143805785122,-0.02198764055408287,0.023417301139897727]]"),
		X:              0.1,
		Y:              0.229688,
		W:              0.246334,
		H:              0.29707,
		Size:           209,
		Score:          55,
	},
}
View Source
var MetadataEstimateInterval = 24 * 7 * time.Hour // 7 Days
View Source
var MetadataUpdateInterval = 24 * 3 * time.Hour // 3 Days
View Source
var PasswordFixtures = PasswordMap{
	"alice":   NewPassword("uqxetse3cy5eo9z2", "Alice123!", false),
	"bob":     NewPassword("uqxc08w3d0ej2283", "Bobbob123!", false),
	"friend":  NewPassword("uqxqg7i1kperxvu7", "!Friend321", false),
	"fowler":  NewPassword("urinotv3d6jedvlm", "PleaseChange$42", false),
	"jane":    NewPassword("usamyuogp49vd4lh", "Jane123!", false),
	"metrics": NewPassword("cs5cpu17n6gj2qo5", "xcCbOrw6I0vcoXzhnOmXhjpVSyFq0l0e", false),
}
View Source
var PasswordLength = PasswordLengthDefault

PasswordLength specifies the minimum length of a password in characters (runes, not bytes).

View Source
var PhotoAlbumFixtures = PhotoAlbumMap{
	"1": {
		PhotoUID:  "ps6sg6be2lvl0yh7",
		AlbumUID:  "as6sg6bxpogaaba8",
		Hidden:    false,
		Missing:   false,
		Order:     0,
		CreatedAt: time.Date(2020, 3, 6, 2, 6, 51, 0, time.UTC),
		UpdatedAt: time.Date(2020, 3, 28, 14, 6, 0, 0, time.UTC),
		Photo:     PhotoFixtures.Pointer("19800101_000002_D640C559"),
		Album:     AlbumFixtures.Pointer("holiday-2030"),
	},
	"2": {
		PhotoUID:  "ps6sg6be2lvl0y11",
		AlbumUID:  "as6sg6bxpogaaba9",
		Hidden:    false,
		Missing:   false,
		Order:     0,
		CreatedAt: time.Date(2020, 2, 6, 2, 6, 51, 0, time.UTC),
		UpdatedAt: time.Date(2020, 4, 28, 14, 6, 0, 0, time.UTC),
		Photo:     PhotoFixtures.Pointer("Photo04"),
		Album:     AlbumFixtures.Pointer("berlin-2019"),
	},
	"3": {
		PhotoUID:  "ps6sg6be2lvl0yh8",
		AlbumUID:  "as6sg6bxpogaaba9",
		Hidden:    false,
		Missing:   false,
		Order:     0,
		CreatedAt: time.Date(2020, 2, 6, 2, 6, 51, 0, time.UTC),
		UpdatedAt: time.Date(2020, 4, 28, 14, 6, 0, 0, time.UTC),
		Photo:     PhotoFixtures.Pointer("Photo01"),
		Album:     AlbumFixtures.Pointer("berlin-2019"),
	},
	"4": {
		PhotoUID:  "ps6sg6bexxvl0yh0",
		AlbumUID:  "as6sg6bxpogaaba9",
		Hidden:    false,
		Missing:   false,
		Order:     0,
		CreatedAt: time.Date(2020, 2, 6, 2, 6, 51, 0, time.UTC),
		UpdatedAt: time.Date(2020, 4, 28, 14, 6, 0, 0, time.UTC),
		Photo:     PhotoFixtures.Pointer("Photo19"),
		Album:     AlbumFixtures.Pointer("april-1990"),
	},
	"5": {
		PhotoUID:  "ps6sg6be2lvl0yh0",
		AlbumUID:  "as6sg6bxpogaaba9",
		Hidden:    false,
		Missing:   false,
		Order:     0,
		CreatedAt: time.Date(2020, 2, 6, 2, 6, 51, 0, time.UTC),
		UpdatedAt: time.Date(2020, 4, 28, 14, 6, 0, 0, time.UTC),
		Photo:     PhotoFixtures.Pointer("Photo03"),
		Album:     AlbumFixtures.Pointer("berlin-2019"),
	},
	"6": {
		PhotoUID:  "ps6sg6be2lvl0yh0",
		AlbumUID:  "as6sg6bxpogaaba8",
		Hidden:    false,
		Missing:   false,
		Order:     0,
		CreatedAt: time.Date(2020, 2, 6, 2, 6, 51, 0, time.UTC),
		UpdatedAt: time.Date(2020, 4, 28, 14, 6, 0, 0, time.UTC),
		Photo:     PhotoFixtures.Pointer("Photo03"),
		Album:     AlbumFixtures.Pointer("berlin-2019"),
	},
	"7": {
		PhotoUID:  "ps6sg6be2lvl0y21",
		AlbumUID:  "as6sg6bxpogaaba7",
		Hidden:    false,
		Missing:   false,
		Order:     1,
		CreatedAt: time.Date(2020, 3, 6, 2, 6, 51, 0, time.UTC),
		UpdatedAt: time.Date(2020, 5, 28, 14, 6, 0, 0, time.UTC),
		Photo:     PhotoFixtures.Pointer("Photo14"),
		Album:     AlbumFixtures.Pointer("berlin-2019"),
	},
	"8": {
		PhotoUID:  "ps6sg6be2lvl0y21",
		AlbumUID:  "as6sg6bxpogaaba8",
		Hidden:    false,
		Missing:   false,
		Order:     1,
		CreatedAt: time.Date(2020, 3, 6, 2, 6, 51, 0, time.UTC),
		UpdatedAt: time.Date(2020, 5, 28, 14, 6, 0, 0, time.UTC),
		Photo:     PhotoFixtures.Pointer("Photo14"),
		Album:     AlbumFixtures.Pointer("berlin-2019"),
	},
	"9": {
		PhotoUID:  "ps6sg6be2lvl0yh0",
		AlbumUID:  "as6sg6bipotaab24",
		Hidden:    false,
		Missing:   false,
		Order:     0,
		CreatedAt: time.Date(2020, 2, 6, 2, 6, 51, 0, time.UTC),
		UpdatedAt: time.Date(2020, 4, 28, 14, 6, 0, 0, time.UTC),
		Photo:     PhotoFixtures.Pointer("Photo03"),
		Album:     AlbumFixtures.Pointer("light&"),
	},
	"10": {
		PhotoUID:  "ps6sg6be2lvl0yh0",
		AlbumUID:  "as6sg6bipotaab23",
		Hidden:    false,
		Missing:   false,
		Order:     0,
		CreatedAt: time.Date(2020, 2, 6, 2, 6, 51, 0, time.UTC),
		UpdatedAt: time.Date(2020, 4, 28, 14, 6, 0, 0, time.UTC),
		Photo:     PhotoFixtures.Pointer("Photo03"),
		Album:     AlbumFixtures.Pointer("pets&dogs"),
	},
	"11": {
		PhotoUID:  "ps6sg6be2lvl0yh0",
		AlbumUID:  "as6sg6bipotaab19",
		Hidden:    false,
		Missing:   false,
		Order:     0,
		CreatedAt: time.Date(2020, 2, 6, 2, 6, 51, 0, time.UTC),
		UpdatedAt: time.Date(2020, 4, 28, 14, 6, 0, 0, time.UTC),
		Photo:     PhotoFixtures.Pointer("Photo03"),
		Album:     AlbumFixtures.Pointer("&ilikefood"),
	},
	"12": {
		PhotoUID:  "ps6sg6be2lvl0yh0",
		AlbumUID:  "as6sg6bipotaab22",
		Hidden:    false,
		Missing:   false,
		Order:     0,
		CreatedAt: time.Date(2020, 2, 6, 2, 6, 51, 0, time.UTC),
		UpdatedAt: time.Date(2020, 4, 28, 14, 6, 0, 0, time.UTC),
		Photo:     PhotoFixtures.Pointer("Photo03"),
		Album:     AlbumFixtures.Pointer("sale%"),
	},
	"13": {
		PhotoUID:  "ps6sg6be2lvl0yh0",
		AlbumUID:  "as6sg6bipotaab21",
		Hidden:    false,
		Missing:   false,
		Order:     0,
		CreatedAt: time.Date(2020, 2, 6, 2, 6, 51, 0, time.UTC),
		UpdatedAt: time.Date(2020, 4, 28, 14, 6, 0, 0, time.UTC),
		Photo:     PhotoFixtures.Pointer("Photo03"),
		Album:     AlbumFixtures.Pointer("%gold"),
	},
	"14": {
		PhotoUID:  "ps6sg6be2lvl0yh0",
		AlbumUID:  "as6sg6bipotaab20",
		Hidden:    false,
		Missing:   false,
		Order:     0,
		CreatedAt: time.Date(2020, 2, 6, 2, 6, 51, 0, time.UTC),
		UpdatedAt: time.Date(2020, 4, 28, 14, 6, 0, 0, time.UTC),
		Photo:     PhotoFixtures.Pointer("Photo03"),
		Album:     AlbumFixtures.Pointer("i-love-%-dog"),
	},
	"15": {
		PhotoUID:  "ps6sg6be2lvl0yh0",
		AlbumUID:  "as6sg6bipotaab25",
		Hidden:    false,
		Missing:   false,
		Order:     0,
		CreatedAt: time.Date(2020, 2, 6, 2, 6, 51, 0, time.UTC),
		UpdatedAt: time.Date(2020, 4, 28, 14, 6, 0, 0, time.UTC),
		Photo:     PhotoFixtures.Pointer("Photo03"),
		Album:     AlbumFixtures.Pointer("'family"),
	},
	"16": {
		PhotoUID:  "ps6sg6be2lvl0yh0",
		AlbumUID:  "as6sg6bipotaab26",
		Hidden:    false,
		Missing:   false,
		Order:     0,
		CreatedAt: time.Date(2020, 2, 6, 2, 6, 51, 0, time.UTC),
		UpdatedAt: time.Date(2020, 4, 28, 14, 6, 0, 0, time.UTC),
		Photo:     PhotoFixtures.Pointer("Photo03"),
		Album:     AlbumFixtures.Pointer("father's-day"),
	},
	"17": {
		PhotoUID:  "ps6sg6be2lvl0yh0",
		AlbumUID:  "as6sg6bipotaab27",
		Hidden:    false,
		Missing:   false,
		Order:     0,
		CreatedAt: time.Date(2020, 2, 6, 2, 6, 51, 0, time.UTC),
		UpdatedAt: time.Date(2020, 4, 28, 14, 6, 0, 0, time.UTC),
		Photo:     PhotoFixtures.Pointer("Photo03"),
		Album:     AlbumFixtures.Pointer("ice-cream'"),
	},
	"18": {
		PhotoUID:  "ps6sg6be2lvl0yh0",
		AlbumUID:  "as6sg6bipotaab28",
		Hidden:    false,
		Missing:   false,
		Order:     0,
		CreatedAt: time.Date(2020, 2, 6, 2, 6, 51, 0, time.UTC),
		UpdatedAt: time.Date(2020, 4, 28, 14, 6, 0, 0, time.UTC),
		Photo:     PhotoFixtures.Pointer("Photo03"),
		Album:     AlbumFixtures.Pointer("*forrest"),
	},
	"19": {
		PhotoUID:  "ps6sg6be2lvl0yh0",
		AlbumUID:  "as6sg6bipotaab29",
		Hidden:    false,
		Missing:   false,
		Order:     0,
		CreatedAt: time.Date(2020, 2, 6, 2, 6, 51, 0, time.UTC),
		UpdatedAt: time.Date(2020, 4, 28, 14, 6, 0, 0, time.UTC),
		Photo:     PhotoFixtures.Pointer("Photo03"),
		Album:     AlbumFixtures.Pointer("my*kids"),
	},
	"20": {
		PhotoUID:  "ps6sg6be2lvl0yh0",
		AlbumUID:  "as6sg6bipotaab30",
		Hidden:    false,
		Missing:   false,
		Order:     0,
		CreatedAt: time.Date(2020, 2, 6, 2, 6, 51, 0, time.UTC),
		UpdatedAt: time.Date(2020, 4, 28, 14, 6, 0, 0, time.UTC),
		Photo:     PhotoFixtures.Pointer("Photo03"),
		Album:     AlbumFixtures.Pointer("yoga***"),
	},
	"21": {
		PhotoUID:  "ps6sg6be2lvl0yh0",
		AlbumUID:  "as6sg6bipotaab31",
		Hidden:    false,
		Missing:   false,
		Order:     0,
		CreatedAt: time.Date(2020, 2, 6, 2, 6, 51, 0, time.UTC),
		UpdatedAt: time.Date(2020, 4, 28, 14, 6, 0, 0, time.UTC),
		Photo:     PhotoFixtures.Pointer("Photo03"),
		Album:     AlbumFixtures.Pointer("|banana"),
	},
	"22": {
		PhotoUID:  "ps6sg6be2lvl0yh0",
		AlbumUID:  "as6sg6bipotaab32",
		Hidden:    false,
		Missing:   false,
		Order:     0,
		CreatedAt: time.Date(2020, 2, 6, 2, 6, 51, 0, time.UTC),
		UpdatedAt: time.Date(2020, 4, 28, 14, 6, 0, 0, time.UTC),
		Photo:     PhotoFixtures.Pointer("Photo03"),
		Album:     AlbumFixtures.Pointer("red|green"),
	},
	"23": {
		PhotoUID:  "ps6sg6be2lvl0yh0",
		AlbumUID:  "as6sg6bipotaab33",
		Hidden:    false,
		Missing:   false,
		Order:     0,
		CreatedAt: time.Date(2020, 2, 6, 2, 6, 51, 0, time.UTC),
		UpdatedAt: time.Date(2020, 4, 28, 14, 6, 0, 0, time.UTC),
		Photo:     PhotoFixtures.Pointer("Photo03"),
		Album:     AlbumFixtures.Pointer("blue|"),
	},
	"24": {
		PhotoUID:  "ps6sg6be2lvl0yh0",
		AlbumUID:  "as6sg6bipotaab34",
		Hidden:    false,
		Missing:   false,
		Order:     0,
		CreatedAt: time.Date(2020, 2, 6, 2, 6, 51, 0, time.UTC),
		UpdatedAt: time.Date(2020, 4, 28, 14, 6, 0, 0, time.UTC),
		Photo:     PhotoFixtures.Pointer("Photo03"),
		Album:     AlbumFixtures.Pointer("345-shirt"),
	},
	"25": {
		PhotoUID:  "ps6sg6be2lvl0yh0",
		AlbumUID:  "as6sg6bipotaab35",
		Hidden:    false,
		Missing:   false,
		Order:     0,
		CreatedAt: time.Date(2020, 2, 6, 2, 6, 51, 0, time.UTC),
		UpdatedAt: time.Date(2020, 4, 28, 14, 6, 0, 0, time.UTC),
		Photo:     PhotoFixtures.Pointer("Photo03"),
		Album:     AlbumFixtures.Pointer("color-555-blue"),
	},
	"26": {
		PhotoUID:  "ps6sg6be2lvl0yh0",
		AlbumUID:  "as6sg6bipotaab36",
		Hidden:    false,
		Missing:   false,
		Order:     0,
		CreatedAt: time.Date(2020, 2, 6, 2, 6, 51, 0, time.UTC),
		UpdatedAt: time.Date(2020, 4, 28, 14, 6, 0, 0, time.UTC),
		Photo:     PhotoFixtures.Pointer("Photo03"),
		Album:     AlbumFixtures.Pointer("route-66"),
	},
	"27": {
		PhotoUID:  "ps6sg6be2lvl0yh9",
		AlbumUID:  "as6sg6bipotaab26",
		Hidden:    false,
		Missing:   false,
		Order:     0,
		CreatedAt: time.Date(2020, 2, 6, 2, 6, 51, 0, time.UTC),
		UpdatedAt: time.Date(2020, 4, 28, 14, 6, 0, 0, time.UTC),
		Photo:     PhotoFixtures.Pointer("Photo02"),
		Album:     AlbumFixtures.Pointer("father's-day"),
	},
	"28": {
		PhotoUID:  "ps6sg6be2lvl0yh9",
		AlbumUID:  "as6sg6bipotaab24",
		Hidden:    false,
		Missing:   false,
		Order:     0,
		CreatedAt: time.Date(2020, 2, 6, 2, 6, 51, 0, time.UTC),
		UpdatedAt: time.Date(2020, 4, 28, 14, 6, 0, 0, time.UTC),
		Photo:     PhotoFixtures.Pointer("Photo02"),
		Album:     AlbumFixtures.Pointer("light&"),
	},
}
View Source
var PhotoFixtures = PhotoMap{
	"19800101_000002_D640C559": {
		ID: 1000000,

		PhotoUID:         "ps6sg6be2lvl0yh7",
		TakenAt:          time.Date(2008, 7, 1, 10, 0, 0, 0, time.UTC),
		TakenAtLocal:     time.Date(2008, 7, 1, 12, 0, 0, 0, time.UTC),
		TakenSrc:         "meta",
		PhotoType:        "image",
		TypeSrc:          "",
		PhotoTitle:       "Lake / 2790",
		TitleSrc:         "",
		PhotoDescription: "photo description lake",
		DescriptionSrc:   "meta",
		PhotoPath:        "2790/07",
		PhotoName:        "27900704_070228_D6D51B6C",
		OriginalName:     "Vacation/exampleFileNameOriginal",
		PhotoFavorite:    false,

		PhotoPrivate:     false,
		PhotoScan:        false,
		PhotoPanorama:    false,
		TimeZone:         "Europe/Berlin",
		Place:            &UnknownPlace,
		PlaceID:          UnknownPlace.ID,
		PlaceSrc:         "",
		Cell:             &UnknownLocation,
		CellID:           UnknownLocation.ID,
		CellAccuracy:     0,
		PhotoAltitude:    0,
		PhotoLat:         0,
		PhotoLng:         0,
		PhotoCountry:     UnknownPlace.CountryCode(),
		PhotoYear:        2790,
		PhotoMonth:       7,
		PhotoDay:         4,
		PhotoIso:         200,
		PhotoExposure:    "1/80",
		PhotoFNumber:     5,
		PhotoFocalLength: 50,
		PhotoQuality:     3,
		PhotoResolution:  2,
		Camera:           CameraFixtures.Pointer("canon-eos-6d"),
		CameraID:         CameraFixtures.Pointer("canon-eos-6d").ID,
		CameraSerial:     "",
		CameraSrc:        "meta",
		Lens:             LensFixtures.Pointer("lens-f-380"),
		LensID:           LensFixtures.Pointer("lens-f-380").ID,
		Details:          DetailsFixtures.Pointer("lake", 1000000),
		Keywords: []Keyword{
			KeywordFixtures.Get("bridge"),
		},
		Albums: []Album{
			AlbumFixtures.Get("holiday-2030"),
		},
		Files: []File{},
		Labels: []PhotoLabel{
			LabelFixtures.PhotoLabel(1000000, "flower", 38, "image"),
			LabelFixtures.PhotoLabel(1000000, "cake", 38, "manual"),
		},
		CreatedAt:  time.Date(2009, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:  time.Date(2008, 1, 1, 0, 0, 0, 0, time.UTC),
		EditedAt:   nil,
		CheckedAt:  &checkedTime,
		DeletedAt:  nil,
		PhotoColor: 9,
		PhotoStack: 0,
		PhotoFaces: 3,
	},
	"Photo01": {
		ID:               1000001,
		PhotoUID:         "ps6sg6be2lvl0yh8",
		TakenAt:          time.Date(2006, 1, 1, 2, 0, 0, 0, time.UTC),
		TakenAtLocal:     time.Date(2006, 1, 1, 2, 0, 0, 0, time.UTC),
		TakenSrc:         "meta",
		PhotoType:        "raw",
		TypeSrc:          "",
		PhotoTitle:       "",
		TitleSrc:         "",
		PhotoDescription: "photo description blacklist",
		DescriptionSrc:   "",
		PhotoPath:        "2790/02",
		PhotoName:        "Photo01",
		OriginalName:     "",
		PhotoFavorite:    true,
		PhotoPrivate:     false,
		PhotoScan:        false,
		PhotoPanorama:    false,
		TimeZone:         "Europe/Berlin",
		Place:            PlaceFixtures.Pointer("Germany"),
		PlaceID:          PlaceFixtures.Pointer("Germany").ID,
		PlaceSrc:         "manual",
		Cell:             CellFixtures.Pointer("Neckarbrücke"),
		CellID:           CellFixtures.Pointer("Neckarbrücke").ID,
		CellAccuracy:     0,
		PhotoAltitude:    -10,
		PhotoLat:         48.519234,
		PhotoLng:         9.057997,
		PhotoCountry:     "de",
		PhotoYear:        2790,
		PhotoMonth:       2,
		PhotoDay:         12,
		PhotoIso:         305,
		PhotoExposure:    "",
		PhotoFNumber:     3.5,
		PhotoFocalLength: 28,
		PhotoQuality:     3,
		PhotoResolution:  2,
		Camera:           CameraFixtures.Pointer("canon-eos-6d"),
		CameraID:         CameraFixtures.Pointer("canon-eos-6d").ID,
		CameraSerial:     "",
		CameraSrc:        "",
		Lens:             LensFixtures.Pointer("lens-f-380"),
		LensID:           LensFixtures.Pointer("lens-f-380").ID,
		Details:          DetailsFixtures.Pointer("lake", 1000001),
		Keywords:         []Keyword{},
		Albums:           []Album{},
		Files:            []File{},
		Labels: []PhotoLabel{
			LabelFixtures.PhotoLabel(1000001, "no-jpeg", 20, "image"),
		},
		CreatedAt:  time.Date(2009, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:  time.Date(2020, 3, 28, 14, 6, 0, 0, time.UTC),
		EditedAt:   nil,
		CheckedAt:  &checkedTime,
		DeletedAt:  nil,
		PhotoColor: 3,
		PhotoStack: 0,
		PhotoFaces: 0,
	},
	"Photo02": {
		ID:               1000002,
		PhotoUID:         "ps6sg6be2lvl0yh9",
		TakenAt:          time.Date(1990, 3, 2, 0, 0, 0, 0, time.UTC),
		TakenAtLocal:     time.Date(1990, 3, 2, 0, 0, 0, 0, time.UTC),
		TakenSrc:         "manual",
		PhotoType:        "image",
		TypeSrc:          "",
		PhotoTitle:       "",
		TitleSrc:         "",
		PhotoDescription: "",
		DescriptionSrc:   "",
		PhotoPath:        "London",
		PhotoName:        "bridge1",
		OriginalName:     "",
		PhotoFavorite:    false,
		PhotoPrivate:     false,
		PhotoScan:        false,
		PhotoPanorama:    false,
		TimeZone:         "",
		Place:            &UnknownPlace,
		PlaceID:          UnknownPlace.ID,
		PlaceSrc:         "",
		Cell:             &UnknownLocation,
		CellID:           UnknownLocation.ID,
		CellAccuracy:     0,
		PhotoAltitude:    0,
		PhotoLat:         0,
		PhotoLng:         0,
		PhotoCountry:     UnknownPlace.CountryCode(),
		PhotoYear:        1990,
		PhotoMonth:       3,
		PhotoDay:         2,
		PhotoIso:         290,
		PhotoExposure:    "",
		PhotoFNumber:     10,
		PhotoFocalLength: 30,
		PhotoQuality:     3,
		PhotoResolution:  2,
		Camera:           CameraFixtures.Pointer("canon-eos-6d"),
		CameraID:         CameraFixtures.Pointer("canon-eos-6d").ID,
		CameraSerial:     "",
		CameraSrc:        "",
		Lens:             LensFixtures.Pointer("lens-f-380"),
		LensID:           LensFixtures.Pointer("lens-f-380").ID,
		Details:          DetailsFixtures.Pointer("lake", 1000002),
		Keywords:         []Keyword{},
		Albums:           []Album{},
		Files:            []File{},
		Labels:           []PhotoLabel{LabelFixtures.PhotoLabel(1000002, "cake", 20, "image")},
		CreatedAt:        time.Date(2009, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:        time.Date(2010, 1, 1, 0, 0, 0, 0, time.UTC),
		EditedAt:         nil,
		CheckedAt:        &checkedTime,
		DeletedAt:        nil,
		PhotoColor:       12,
		PhotoStack:       0,
		PhotoFaces:       1,
	},
	"Photo03": {
		ID:               1000003,
		PhotoUID:         "ps6sg6be2lvl0yh0",
		TakenAt:          time.Date(1990, 4, 18, 1, 0, 0, 0, time.UTC),
		TakenAtLocal:     time.Date(1990, 4, 18, 1, 0, 0, 0, time.UTC),
		TakenSrc:         "meta",
		PhotoType:        "video",
		PhotoDuration:    time.Hour * 2,
		TypeSrc:          "",
		PhotoTitle:       "",
		TitleSrc:         "",
		PhotoDescription: "",
		DescriptionSrc:   "",
		PhotoPath:        "1990/04",
		PhotoName:        "bridge2",
		OriginalName:     "",
		PhotoFavorite:    false,
		PhotoPrivate:     false,
		PhotoScan:        false,
		PhotoPanorama:    false,
		TimeZone:         "",
		Place:            CellFixtures.Pointer("caravan park").Place,
		PlaceID:          CellFixtures.Pointer("caravan park").Place.ID,
		PlaceSrc:         "meta",
		Cell:             CellFixtures.Pointer("caravan park"),
		CellID:           CellFixtures.Pointer("caravan park").ID,
		CellAccuracy:     0,
		PhotoAltitude:    -100,
		PhotoLat:         48.519234,
		PhotoLng:         9.057997,
		PhotoCountry:     CellFixtures.Pointer("caravan park").Place.CountryCode(),
		PhotoYear:        1990,
		PhotoMonth:       4,
		PhotoDay:         18,
		PhotoIso:         400,
		PhotoExposure:    "",
		PhotoFNumber:     4.5,
		PhotoFocalLength: 84,
		PhotoQuality:     4,
		PhotoResolution:  45,
		Camera:           CameraFixtures.Pointer("canon-eos-6d"),
		CameraID:         CameraFixtures.Pointer("canon-eos-6d").ID,
		CameraSerial:     "",
		CameraSrc:        "",
		Lens:             LensFixtures.Pointer("lens-f-380"),
		LensID:           LensFixtures.Pointer("lens-f-380").ID,
		Details:          DetailsFixtures.Pointer("bridge", 1000003),
		Keywords:         []Keyword{},
		Albums:           []Album{},
		Files:            []File{},
		Labels: []PhotoLabel{
			LabelFixtures.PhotoLabel(1000003, "cow", 20, "image"),
			LabelFixtures.PhotoLabel(1000003, "updatePhotoLabel", 20, "manual"),
			LabelFixtures.PhotoLabel(1000000, "landscape", 10, "location"),
		},
		CreatedAt:  time.Date(2009, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:  time.Date(2008, 1, 1, 0, 0, 0, 0, time.UTC),
		EditedAt:   nil,
		CheckedAt:  &checkedTime,
		DeletedAt:  nil,
		PhotoColor: 12,
		PhotoStack: 0,
		PhotoFaces: 1,
	},
	"Photo04": {
		ID:               1000004,
		PhotoUID:         "ps6sg6be2lvl0y11",
		TakenAt:          time.Date(2014, 7, 17, 15, 42, 12, 0, time.UTC),
		TakenAtLocal:     time.Date(2014, 7, 17, 17, 42, 12, 0, time.UTC),
		TakenSrc:         "meta",
		PhotoType:        "image",
		TypeSrc:          "",
		PhotoTitle:       "Neckarbrücke",
		TitleSrc:         "",
		PhotoDescription: "",
		DescriptionSrc:   "",
		PhotoPath:        "Germany",
		PhotoName:        "bridge",
		OriginalName:     "",
		PhotoFavorite:    false,
		PhotoPrivate:     false,
		PhotoScan:        false,
		PhotoPanorama:    false,
		TimeZone:         "Europe/Berlin",
		Place:            PlaceFixtures.Pointer("Germany"),
		PlaceID:          PlaceFixtures.Pointer("Germany").ID,
		PlaceSrc:         "estimate",
		Cell:             &UnknownLocation,
		CellID:           UnknownLocation.ID,
		CellAccuracy:     0,
		PhotoAltitude:    0,
		PhotoLat:         0,
		PhotoLng:         0,
		PhotoCountry:     PlaceFixtures.Pointer("Germany").CountryCode(),
		PhotoYear:        2014,
		PhotoMonth:       7,
		PhotoDay:         10,
		PhotoIso:         401,
		PhotoExposure:    "",
		PhotoFNumber:     3.2,
		PhotoFocalLength: 60,
		PhotoQuality:     3,
		PhotoResolution:  150,
		Camera:           CameraFixtures.Pointer("canon-eos-6d"),
		CameraID:         CameraFixtures.Pointer("canon-eos-6d").ID,
		CameraSerial:     "",
		CameraSrc:        "",
		Lens:             LensFixtures.Pointer("lens-f-380"),
		LensID:           LensFixtures.Pointer("lens-f-380").ID,
		Details:          DetailsFixtures.Pointer("lake", 1000004),
		Keywords: []Keyword{
			KeywordFixtures.Get("bridge"),
			KeywordFixtures.Get("flower"),
		},
		Albums: []Album{
			AlbumFixtures.Get("berlin-2019"),
		},
		Files:      []File{},
		Labels:     []PhotoLabel{LabelFixtures.PhotoLabel(1000004, "batchdelete", 20, "image")},
		CreatedAt:  time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:  time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		EditedAt:   nil,
		CheckedAt:  &checkedTime,
		DeletedAt:  nil,
		PhotoColor: 12,
		PhotoStack: 0,
		PhotoFaces: 3,
	},
	"Photo05": {
		ID:               1000005,
		PhotoUID:         "ps6sg6be2lvl0y12",
		TakenAt:          time.Date(2015, 11, 1, 0, 0, 0, 0, time.UTC),
		TakenAtLocal:     time.Date(2015, 11, 1, 0, 0, 0, 0, time.UTC),
		TakenSrc:         "name",
		PhotoType:        "image",
		TypeSrc:          "",
		PhotoTitle:       "Reunion",
		TitleSrc:         "name",
		PhotoDescription: "",
		DescriptionSrc:   "",
		PhotoPath:        "2015/11",
		PhotoName:        "20151101_000000_51C501B5",
		OriginalName:     "2015/11/reunion",
		PhotoFavorite:    false,
		PhotoPrivate:     true,
		PhotoScan:        false,
		PhotoPanorama:    false,
		TimeZone:         "America/Mexico_City",
		Place:            PlaceFixtures.Pointer("mexico"),
		PlaceID:          PlaceFixtures.Pointer("mexico").ID,
		PlaceSrc:         "meta",
		Cell:             CellFixtures.Pointer("mexico"),
		CellID:           CellFixtures.Pointer("mexico").ID,
		CellAccuracy:     0,
		PhotoAltitude:    0,
		PhotoLat:         -21.342636,
		PhotoLng:         55.466944,
		PhotoCountry:     PlaceFixtures.Pointer("mexico").CountryCode(),
		PhotoYear:        2015,
		PhotoMonth:       11,
		PhotoDay:         0,
		PhotoIso:         199,
		PhotoExposure:    "",
		PhotoFNumber:     0,
		PhotoFocalLength: 0,
		PhotoQuality:     3,
		PhotoResolution:  2,
		Camera:           CameraFixtures.Pointer("canon-eos-6d"),
		CameraID:         CameraFixtures.Pointer("canon-eos-6d").ID,
		CameraSerial:     "123",
		CameraSrc:        "",
		Lens:             LensFixtures.Pointer("lens-f-380"),
		LensID:           LensFixtures.Pointer("lens-f-380").ID,
		Details:          DetailsFixtures.Pointer("lake", 1000005),
		Keywords:         []Keyword{},
		Albums:           []Album{},
		Files:            []File{},
		Labels:           []PhotoLabel{LabelFixtures.PhotoLabel(1000005, "updateLabel", 20, "image")},
		CreatedAt:        time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:        time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		EditedAt:         nil,
		CheckedAt:        &checkedTime,
		DeletedAt:        nil,
		PhotoColor:       6,
		PhotoStack:       0,
		PhotoFaces:       2,
	},
	"Photo06": {
		ID:               1000006,
		PhotoUID:         "ps6sg6be2lvl0y13",
		TakenAt:          time.Date(2016, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenAtLocal:     time.Date(2016, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenSrc:         "meta",
		PhotoType:        "image",
		TypeSrc:          "",
		PhotoTitle:       "ToBeUpdated",
		TitleSrc:         SrcMeta,
		PhotoDescription: "",
		DescriptionSrc:   "",
		PhotoPath:        "2016/11",
		PhotoName:        "Photo06",
		OriginalName:     "",
		PhotoFavorite:    false,
		PhotoPrivate:     true,
		PhotoScan:        false,
		PhotoPanorama:    false,
		TimeZone:         "",
		Place:            &UnknownPlace,
		PlaceID:          UnknownPlace.ID,
		PlaceSrc:         "",
		Cell:             &UnknownLocation,
		CellID:           UnknownLocation.ID,
		CellAccuracy:     0,
		PhotoAltitude:    0,
		PhotoLat:         -21.342636,
		PhotoLng:         55.466944,
		PhotoCountry:     UnknownPlace.CountryCode(),
		PhotoYear:        2016,
		PhotoMonth:       11,
		PhotoDay:         11,
		PhotoIso:         0,
		PhotoExposure:    "",
		PhotoFNumber:     0,
		PhotoFocalLength: 0,
		PhotoQuality:     0,
		PhotoResolution:  2,
		Camera:           CameraFixtures.Pointer("canon-eos-6d"),
		CameraID:         CameraFixtures.Pointer("canon-eos-6d").ID,
		CameraSerial:     "",
		CameraSrc:        "",
		Lens:             LensFixtures.Pointer("lens-f-380"),
		LensID:           LensFixtures.Pointer("lens-f-380").ID,
		Details:          DetailsFixtures.Pointer("lake", 1000006),
		Keywords:         []Keyword{},
		Albums:           []Album{},
		Files:            []File{},
		Labels:           []PhotoLabel{LabelFixtures.PhotoLabel(1000006, "updatePhotoLabel", 20, "image")},
		CreatedAt:        time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:        time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		EditedAt:         nil,
		CheckedAt:        &checkedTime,
		DeletedAt:        nil,
		PhotoColor:       4,
		PhotoStack:       0,
		PhotoFaces:       0,
	},
	"Photo07": {
		ID:               1000007,
		PhotoUID:         "ps6sg6be2lvl0y14",
		TakenAt:          time.Date(2016, 11, 12, 9, 7, 18, 0, time.UTC),
		TakenAtLocal:     time.Date(2016, 11, 12, 9, 7, 18, 0, time.UTC),
		TakenSrc:         "",
		PhotoType:        "image",
		TypeSrc:          "",
		PhotoTitle:       "ToBeUpdated",
		TitleSrc:         SrcMeta,
		PhotoDescription: "",
		DescriptionSrc:   "",
		PhotoPath:        "2016/11",
		PhotoName:        "Photo07",
		OriginalName:     "",
		PhotoFavorite:    false,
		PhotoPrivate:     false,
		PhotoScan:        false,
		PhotoPanorama:    false,
		TimeZone:         "",
		Place:            &UnknownPlace,
		PlaceID:          UnknownPlace.ID,
		PlaceSrc:         "",
		Cell:             &UnknownLocation,
		CellID:           UnknownLocation.ID,
		CellAccuracy:     0,
		PhotoAltitude:    200,
		PhotoLat:         0,
		PhotoLng:         0,
		PhotoCountry:     UnknownPlace.CountryCode(),
		PhotoYear:        2016,
		PhotoMonth:       11,
		PhotoDay:         12,
		PhotoIso:         0,
		PhotoExposure:    "",
		PhotoFNumber:     0,
		PhotoFocalLength: 0,
		PhotoQuality:     0,
		PhotoResolution:  0,
		Camera:           CameraFixtures.Pointer("canon-eos-6d"),
		CameraID:         CameraFixtures.Pointer("canon-eos-6d").ID,
		CameraSerial:     "",
		CameraSrc:        "",
		Lens:             LensFixtures.Pointer("lens-f-380"),
		LensID:           LensFixtures.Pointer("lens-f-380").ID,
		Details:          DetailsFixtures.Pointer("lake", 1000007),
		Keywords:         []Keyword{},
		Albums:           []Album{},
		Files:            []File{},
		Labels:           []PhotoLabel{LabelFixtures.PhotoLabel(1000007, "landscape", 20, "image")},
		CreatedAt:        time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:        time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		EditedAt:         &editTime,
		CheckedAt:        &checkedTime,
		DeletedAt:        nil,
		PhotoColor:       4,
		PhotoStack:       0,
		PhotoFaces:       0,
	},
	"Photo08": {
		ID:               1000008,
		PhotoUID:         "ps6sg6be2lvl0y15",
		TakenAt:          time.Date(2016, 11, 11, 8, 7, 18, 0, time.UTC),
		TakenAtLocal:     time.Date(2016, 11, 11, 8, 7, 18, 0, time.UTC),
		TakenSrc:         SrcMeta,
		PhotoType:        "image",
		TypeSrc:          "",
		PhotoTitle:       "Black beach",
		TitleSrc:         SrcMeta,
		PhotoDescription: "",
		DescriptionSrc:   "",
		PhotoPath:        "2016/11",
		PhotoName:        "Photo08",
		OriginalName:     "",
		PhotoFavorite:    false,
		PhotoPrivate:     false,
		PhotoScan:        false,
		PhotoPanorama:    false,
		TimeZone:         "America/Mexico_City",
		Place:            PlaceFixtures.Pointer("mexico"),
		PlaceID:          PlaceFixtures.Pointer("mexico").ID,
		PlaceSrc:         SrcManual,
		Cell:             CellFixtures.Pointer("mexico"),
		CellID:           CellFixtures.Pointer("mexico").ID,
		CellAccuracy:     0,
		PhotoAltitude:    898,
		PhotoLat:         19.681944,
		PhotoLng:         -98.84659,
		PhotoCountry:     PlaceFixtures.Pointer("mexico").CountryCode(),
		PhotoYear:        2016,
		PhotoMonth:       11,
		PhotoDay:         11,
		PhotoIso:         0,
		PhotoExposure:    "",
		PhotoFNumber:     0,
		PhotoFocalLength: 0,
		PhotoQuality:     0,
		PhotoResolution:  0,
		Camera:           CameraFixtures.Pointer("canon-eos-6d"),
		CameraID:         CameraFixtures.Pointer("canon-eos-6d").ID,
		CameraSerial:     "",
		CameraSrc:        "",
		Lens:             LensFixtures.Pointer("lens-f-380"),
		LensID:           LensFixtures.Pointer("lens-f-380").ID,
		Details:          DetailsFixtures.Pointer("lake", 1000008),
		Keywords:         []Keyword{},
		Albums:           []Album{},
		Files:            []File{},
		Labels:           []PhotoLabel{LabelFixtures.PhotoLabel(1000008, "landscape", 20, "image")},
		CreatedAt:        time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:        time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		EditedAt:         nil,
		CheckedAt:        &checkedTime,
		DeletedAt:        nil,
		PhotoColor:       1,
		PhotoStack:       0,
		PhotoFaces:       0,
	},
	"Photo09": {
		ID:               1000009,
		PhotoUID:         "ps6sg6be2lvl0y16",
		TakenAt:          time.Date(2016, 11, 11, 8, 6, 18, 0, time.UTC),
		TakenAtLocal:     time.Date(2016, 11, 11, 8, 6, 18, 0, time.UTC),
		TakenSrc:         SrcMeta,
		PhotoType:        "image",
		TypeSrc:          "",
		PhotoTitle:       "Title",
		TitleSrc:         "",
		PhotoDescription: "",
		DescriptionSrc:   "",
		PhotoPath:        "2016/11",
		PhotoName:        "Photo09",
		OriginalName:     "",
		PhotoFavorite:    false,
		PhotoPrivate:     false,
		PhotoScan:        false,
		PhotoPanorama:    false,
		TimeZone:         "America/Mexico_City",
		Place:            PlaceFixtures.Pointer("mexico"),
		PlaceID:          PlaceFixtures.Pointer("mexico").ID,
		PlaceSrc:         SrcMeta,
		Cell:             CellFixtures.Pointer("mexico"),
		CellID:           CellFixtures.Pointer("mexico").ID,
		CellAccuracy:     0,
		PhotoAltitude:    398,
		PhotoLat:         19.681944,
		PhotoLng:         -98.846590,
		PhotoCountry:     PlaceFixtures.Pointer("mexico").CountryCode(),
		PhotoYear:        2016,
		PhotoMonth:       11,
		PhotoDay:         11,
		PhotoIso:         0,
		PhotoExposure:    "",
		PhotoFNumber:     0,
		PhotoFocalLength: 0,
		PhotoQuality:     0,
		PhotoResolution:  0,
		Camera:           CameraFixtures.Pointer("canon-eos-6d"),
		CameraID:         CameraFixtures.Pointer("canon-eos-6d").ID,
		CameraSerial:     "",
		CameraSrc:        "",
		Lens:             LensFixtures.Pointer("lens-f-380"),
		LensID:           LensFixtures.Pointer("lens-f-380").ID,
		Details:          DetailsFixtures.Pointer("lake", 1000009),
		Keywords:         []Keyword{},
		Albums:           []Album{},
		Files:            []File{},
		Labels:           []PhotoLabel{LabelFixtures.PhotoLabel(1000008, "landscape", 20, "image")},
		CreatedAt:        time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:        time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		EditedAt:         nil,
		CheckedAt:        &checkedTime,
		DeletedAt:        nil,
		PhotoColor:       1,
		PhotoStack:       0,
		PhotoFaces:       0,
	},
	"Photo10": {
		ID:               1000010,
		PhotoUID:         "ps6sg6be2lvl0y17",
		TakenAt:          time.Date(2016, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenAtLocal:     time.Date(2016, 11, 11, 11, 7, 18, 0, time.UTC),
		TakenSrc:         "manual",
		PhotoType:        "video",
		PhotoDuration:    time.Minute * 2,
		TypeSrc:          "",
		PhotoTitle:       "Title",
		TitleSrc:         "",
		PhotoDescription: "",
		DescriptionSrc:   "",
		PhotoPath:        "Holiday",
		PhotoName:        "Video",
		OriginalName:     "",
		PhotoFavorite:    false,
		PhotoPrivate:     false,
		PhotoScan:        false,
		PhotoPanorama:    false,
		TimeZone:         "Europe/Berlin",
		Place:            PlaceFixtures.Pointer("holidaypark"),
		PlaceID:          PlaceFixtures.Pointer("holidaypark").ID,
		PlaceSrc:         "meta",
		Cell:             CellFixtures.Pointer("hassloch"),
		CellID:           CellFixtures.Pointer("hassloch").ID,
		CellAccuracy:     0,
		PhotoAltitude:    0,
		PhotoLat:         49.31,
		PhotoLng:         8.30,
		PhotoCountry:     PlaceFixtures.Pointer("holidaypark").CountryCode(),
		PhotoYear:        2016,
		PhotoMonth:       11,
		PhotoDay:         11,
		PhotoIso:         0,
		PhotoExposure:    "",
		PhotoFNumber:     0,
		PhotoFocalLength: 0,
		PhotoQuality:     0,
		PhotoResolution:  0,
		Camera:           CameraFixtures.Pointer("canon-eos-6d"),
		CameraID:         CameraFixtures.Pointer("canon-eos-6d").ID,
		CameraSerial:     "",
		CameraSrc:        "",
		Lens:             LensFixtures.Pointer("lens-f-380"),
		LensID:           LensFixtures.Pointer("lens-f-380").ID,
		Details:          DetailsFixtures.Pointer("lake", 10000010),
		Keywords:         []Keyword{},
		Albums:           []Album{},
		Files:            []File{},
		Labels:           []PhotoLabel{LabelFixtures.PhotoLabel(1000008, "landscape", 20, "image")},
		CreatedAt:        time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:        time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		EditedAt:         nil,
		CheckedAt:        &checkedTime,
		DeletedAt:        nil,
		PhotoColor:       9,
		PhotoStack:       0,
		PhotoFaces:       1,
	},
	"Photo11": {
		ID:               1000011,
		PhotoUID:         "ps6sg6be2lvl0y18",
		TakenAt:          time.Date(2016, 12, 11, 9, 7, 18, 0, time.UTC),
		TakenAtLocal:     time.Date(2016, 12, 11, 9, 7, 18, 0, time.UTC),
		TakenSrc:         "",
		PhotoType:        "image",
		TypeSrc:          "",
		PhotoTitle:       "Title",
		TitleSrc:         "",
		PhotoDescription: "",
		DescriptionSrc:   "",
		PhotoPath:        "2016/12",
		PhotoName:        "Photo11",
		OriginalName:     "",
		PhotoFavorite:    false,
		PhotoPrivate:     false,
		PhotoScan:        false,
		PhotoPanorama:    false,
		TimeZone:         "",
		Place:            PlaceFixtures.Pointer("emptyNameLongCity"),
		PlaceID:          PlaceFixtures.Pointer("emptyNameLongCity").ID,
		PlaceSrc:         "",
		Cell:             CellFixtures.Pointer("emptyNameLongCity"),
		CellID:           CellFixtures.Pointer("emptyNameLongCity").ID,
		CellAccuracy:     0,
		PhotoAltitude:    0,
		PhotoLat:         0,
		PhotoLng:         0,
		PhotoCountry:     PlaceFixtures.Pointer("emptyNameLongCity").CountryCode(),
		PhotoYear:        2016,
		PhotoMonth:       12,
		PhotoDay:         11,
		PhotoIso:         0,
		PhotoExposure:    "",
		PhotoFNumber:     0,
		PhotoFocalLength: 0,
		PhotoQuality:     0,
		PhotoResolution:  0,
		Camera:           CameraFixtures.Pointer("canon-eos-6d"),
		CameraID:         CameraFixtures.Pointer("canon-eos-6d").ID,
		CameraSerial:     "",
		CameraSrc:        "",
		Lens:             LensFixtures.Pointer("lens-f-380"),
		LensID:           LensFixtures.Pointer("lens-f-380").ID,
		Details:          DetailsFixtures.Pointer("lake", 10000011),
		Keywords:         []Keyword{},
		Albums:           []Album{},
		Files:            []File{},
		Labels:           []PhotoLabel{LabelFixtures.PhotoLabel(1000008, "landscape", 20, "image")},
		CreatedAt:        time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:        time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		EditedAt:         nil,
		CheckedAt:        &checkedTime,
		DeletedAt:        nil,
		PhotoColor:       11,
		PhotoStack:       0,
		PhotoFaces:       0,
	},
	"Photo12": {
		ID:               1000012,
		PhotoUID:         "ps6sg6be2lvl0y19",
		TakenAt:          time.Date(2016, 01, 11, 9, 7, 18, 0, time.UTC),
		TakenAtLocal:     time.Date(2016, 01, 11, 9, 7, 18, 0, time.UTC),
		TakenSrc:         "",
		PhotoType:        "image",
		TypeSrc:          "",
		PhotoTitle:       "Title",
		TitleSrc:         "",
		PhotoDescription: "",
		DescriptionSrc:   "",
		PhotoPath:        "2016/01",
		PhotoName:        "Photo12",
		OriginalName:     "",
		PhotoFavorite:    false,
		PhotoPrivate:     false,
		PhotoScan:        false,
		PhotoPanorama:    false,
		TimeZone:         "",
		Place:            PlaceFixtures.Pointer("emptyNameShortCity"),
		PlaceID:          PlaceFixtures.Pointer("emptyNameShortCity").ID,
		PlaceSrc:         "",
		Cell:             CellFixtures.Pointer("emptyNameShortCity"),
		CellID:           CellFixtures.Pointer("emptyNameShortCity").ID,
		CellAccuracy:     0,
		PhotoAltitude:    0,
		PhotoLat:         0,
		PhotoLng:         0,
		PhotoCountry:     PlaceFixtures.Pointer("emptyNameShortCity").CountryCode(),
		PhotoYear:        2016,
		PhotoMonth:       1,
		PhotoDay:         11,
		PhotoIso:         0,
		PhotoExposure:    "",
		PhotoFNumber:     0,
		PhotoFocalLength: 0,
		PhotoQuality:     0,
		PhotoResolution:  0,
		Camera:           CameraFixtures.Pointer("canon-eos-6d"),
		CameraID:         CameraFixtures.Pointer("canon-eos-6d").ID,
		CameraSerial:     "",
		CameraSrc:        "",
		Lens:             LensFixtures.Pointer("lens-f-380"),
		LensID:           LensFixtures.Pointer("lens-f-380").ID,
		Details:          &Details{},
		Keywords:         []Keyword{},
		Albums:           []Album{},
		Files:            []File{},
		Labels:           []PhotoLabel{LabelFixtures.PhotoLabel(1000008, "landscape", 20, "image")},
		CreatedAt:        time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:        time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		EditedAt:         nil,
		CheckedAt:        &checkedTime,
		DeletedAt:        nil,
		PhotoColor:       1,
		PhotoStack:       0,
		PhotoFaces:       0,
	},
	"Photo13": {
		ID:               1000013,
		PhotoUID:         "ps6sg6be2lvl0y20",
		TakenAt:          time.Date(2016, 06, 11, 9, 7, 18, 0, time.UTC),
		TakenAtLocal:     time.Date(2016, 06, 11, 9, 7, 18, 0, time.UTC),
		TakenSrc:         SrcMeta,
		PhotoType:        "image",
		TypeSrc:          "",
		PhotoTitle:       "Title",
		TitleSrc:         "",
		PhotoDescription: "",
		DescriptionSrc:   "",
		PhotoPath:        "2016/06",
		PhotoName:        "Photo13",
		OriginalName:     "",
		PhotoFavorite:    false,
		PhotoPrivate:     false,
		PhotoScan:        false,
		PhotoPanorama:    false,
		TimeZone:         "America/Mexico_City",
		Place:            PlaceFixtures.Pointer("veryLongLocName"),
		PlaceID:          PlaceFixtures.Pointer("veryLongLocName").ID,
		PlaceSrc:         SrcMeta,
		Cell:             CellFixtures.Pointer("veryLongLocName"),
		CellID:           CellFixtures.Pointer("veryLongLocName").ID,
		CellAccuracy:     0,
		PhotoAltitude:    0,
		PhotoLat:         19.681944,
		PhotoLng:         -98.846590,
		PhotoCountry:     PlaceFixtures.Pointer("veryLongLocName").CountryCode(),
		PhotoYear:        2016,
		PhotoMonth:       6,
		PhotoDay:         11,
		PhotoIso:         0,
		PhotoExposure:    "",
		PhotoFNumber:     0,
		PhotoFocalLength: 0,
		PhotoQuality:     0,
		PhotoResolution:  0,
		Camera:           CameraFixtures.Pointer("canon-eos-6d"),
		CameraID:         CameraFixtures.Pointer("canon-eos-6d").ID,
		CameraSerial:     "",
		CameraSrc:        "",
		Lens:             LensFixtures.Pointer("lens-f-380"),
		LensID:           LensFixtures.Pointer("lens-f-380").ID,
		Details:          &Details{},
		Keywords:         []Keyword{},
		Albums:           []Album{},
		Files:            []File{},
		Labels:           []PhotoLabel{LabelFixtures.PhotoLabel(1000008, "landscape", 20, "image")},
		CreatedAt:        time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:        time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		EditedAt:         nil,
		CheckedAt:        &checkedTime,
		DeletedAt:        nil,
		PhotoColor:       1,
		PhotoStack:       0,
		PhotoFaces:       0,
	},
	"Photo14": {
		ID:               1000014,
		PhotoUID:         "ps6sg6be2lvl0y21",
		TakenAt:          time.Date(2018, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenAtLocal:     time.Date(2018, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenSrc:         SrcMeta,
		PhotoType:        "image",
		TypeSrc:          "",
		PhotoTitle:       "Title",
		TitleSrc:         "",
		PhotoDescription: "",
		DescriptionSrc:   "",
		PhotoPath:        "2018/11",
		PhotoName:        "Photo14",
		OriginalName:     "",
		PhotoFavorite:    false,
		PhotoPrivate:     false,
		PhotoScan:        false,
		PhotoPanorama:    false,
		TimeZone:         "America/Mexico_City",
		Place:            PlaceFixtures.Pointer("mediumLongLocName"),
		PlaceID:          PlaceFixtures.Pointer("mediumLongLocName").ID,
		PlaceSrc:         SrcMeta,
		Cell:             CellFixtures.Pointer("mediumLongLocName"),
		CellID:           CellFixtures.Pointer("mediumLongLocName").ID,
		CellAccuracy:     0,
		PhotoAltitude:    0,
		PhotoLat:         19.681944,
		PhotoLng:         -98.846590,
		PhotoCountry:     PlaceFixtures.Pointer("mediumLongLocName").CountryCode(),
		PhotoYear:        2018,
		PhotoMonth:       11,
		PhotoDay:         11,
		PhotoIso:         0,
		PhotoExposure:    "",
		PhotoFNumber:     0,
		PhotoFocalLength: 0,
		PhotoQuality:     0,
		PhotoResolution:  0,
		Camera:           CameraFixtures.Pointer("canon-eos-6d"),
		CameraID:         CameraFixtures.Pointer("canon-eos-6d").ID,
		CameraSerial:     "",
		CameraSrc:        "",
		Lens:             LensFixtures.Pointer("lens-f-380"),
		LensID:           LensFixtures.Pointer("lens-f-380").ID,
		Details:          &Details{},
		Keywords:         []Keyword{},
		Albums:           []Album{},
		Files:            []File{},
		Labels:           []PhotoLabel{LabelFixtures.PhotoLabel(1000014, "landscape", 20, "image")},
		CreatedAt:        time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:        time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		EditedAt:         nil,
		CheckedAt:        &checkedTime,
		DeletedAt:        nil,
		PhotoColor:       1,
		PhotoStack:       0,
		PhotoFaces:       0,
	},
	"Photo15": {
		ID:               1000015,
		PhotoUID:         "ps6sg6be2lvl0y22",
		TakenAt:          time.Date(2013, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenAtLocal:     time.Date(2013, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenSrc:         SrcName,
		PhotoType:        "image",
		TypeSrc:          "",
		PhotoTitle:       "TitleToBeSet",
		TitleSrc:         SrcName,
		PhotoDescription: "photo description blacklist",
		DescriptionSrc:   SrcMeta,
		PhotoPath:        "1990",
		PhotoName:        "missing",
		OriginalName:     "",
		PhotoFavorite:    false,
		PhotoPrivate:     false,
		PhotoScan:        false,
		PhotoPanorama:    false,
		TimeZone:         "Europe/Berlin",
		Place:            PlaceFixtures.Pointer("Germany"),
		PlaceID:          PlaceFixtures.Pointer("Germany").ID,
		PlaceSrc:         SrcMeta,
		Cell:             CellFixtures.Pointer("Neckarbrücke"),
		CellID:           CellFixtures.Pointer("Neckarbrücke").ID,
		CellAccuracy:     0,
		PhotoAltitude:    3,
		PhotoLat:         1.234,
		PhotoLng:         4.321,
		PhotoCountry:     "de",
		PhotoYear:        2013,
		PhotoMonth:       11,
		PhotoDay:         11,
		PhotoIso:         0,
		PhotoExposure:    "",
		PhotoFNumber:     0,
		PhotoFocalLength: 0,
		PhotoQuality:     0,
		PhotoResolution:  0,
		Camera:           CameraFixtures.Pointer("canon-eos-6d"),
		CameraID:         CameraFixtures.Pointer("canon-eos-6d").ID,
		CameraSerial:     "",
		CameraSrc:        "",
		Lens:             LensFixtures.Pointer("lens-f-380"),
		LensID:           LensFixtures.Pointer("lens-f-380").ID,
		Details:          DetailsFixtures.Pointer("blacklist", 1000015),
		Keywords:         []Keyword{},
		Albums:           []Album{},
		Files:            []File{},
		Labels:           []PhotoLabel{LabelFixtures.PhotoLabel(10000015, "landscape", 20, "image")},
		CreatedAt:        time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:        time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		EditedAt:         nil,
		CheckedAt:        &checkedTime,
		DeletedAt:        nil,
		PhotoColor:       6,
		PhotoStack:       0,
		PhotoFaces:       0,
	},
	"Photo16": {
		ID:               1000016,
		PhotoUID:         "ps6sg6be2lvl0y23",
		TakenAt:          time.Date(2013, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenAtLocal:     time.Date(2013, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenSrc:         "",
		PhotoType:        "image",
		TypeSrc:          "",
		PhotoTitle:       "ForDeletion",
		TitleSrc:         SrcName,
		PhotoDescription: "",
		DescriptionSrc:   "",
		PhotoPath:        "1990",
		PhotoName:        "Photo16",
		OriginalName:     "",
		PhotoFavorite:    false,
		PhotoPrivate:     false,
		PhotoScan:        true,
		PhotoPanorama:    false,
		TimeZone:         "",
		Place:            &UnknownPlace,
		PlaceID:          UnknownPlace.ID,
		PlaceSrc:         "",
		Cell:             &UnknownLocation,
		CellID:           UnknownLocation.ID,
		CellAccuracy:     0,
		PhotoAltitude:    3,
		PhotoLat:         1.234,
		PhotoLng:         4.321,
		PhotoCountry:     UnknownCountry.ID,
		PhotoYear:        2013,
		PhotoMonth:       11,
		PhotoDay:         11,
		PhotoIso:         0,
		PhotoExposure:    "",
		PhotoFNumber:     0,
		PhotoFocalLength: 0,
		PhotoQuality:     0,
		PhotoResolution:  0,
		Camera:           CameraFixtures.Pointer("canon-eos-6d"),
		CameraID:         CameraFixtures.Pointer("canon-eos-6d").ID,
		CameraSerial:     "",
		CameraSrc:        "",
		Lens:             LensFixtures.Pointer("lens-f-380"),
		LensID:           LensFixtures.Pointer("lens-f-380").ID,
		Details:          DetailsFixtures.Pointer("lake", 1000015),
		Keywords:         []Keyword{},
		Albums:           []Album{},
		Files:            []File{},
		Labels:           []PhotoLabel{LabelFixtures.PhotoLabel(10000015, "landscape", 20, "image")},
		CreatedAt:        time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:        time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		EditedAt:         nil,
		CheckedAt:        &checkedTime,
		DeletedAt:        nil,
		PhotoColor:       1,
		PhotoStack:       0,
		PhotoFaces:       0,
	},
	"Photo17": {
		ID:               1000017,
		PhotoUID:         "ps6sg6be2lvl0y24",
		TakenAt:          time.Date(2013, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenAtLocal:     time.Date(2013, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenSrc:         "",
		PhotoType:        "image",
		TypeSrc:          "",
		PhotoTitle:       "Quality1FavoriteTrue",
		TitleSrc:         SrcName,
		PhotoDescription: "",
		DescriptionSrc:   SrcAuto,
		PhotoPath:        "1990/04",
		PhotoName:        "Quality1FavoriteTrue",
		OriginalName:     "",
		PhotoFavorite:    true,
		PhotoPrivate:     false,
		PhotoScan:        false,
		PhotoPanorama:    false,
		TimeZone:         "",
		Place:            PlaceFixtures.Pointer("mexico"),
		PlaceID:          PlaceFixtures.Pointer("mexico").ID,
		PlaceSrc:         SrcMeta,
		Cell:             CellFixtures.Pointer("mexico"),
		CellID:           CellFixtures.Pointer("mexico").ID,
		CellAccuracy:     0,
		PhotoAltitude:    3,
		PhotoLat:         1.234,
		PhotoLng:         4.321,
		PhotoCountry:     PlaceFixtures.Pointer("mexico").CountryCode(),
		PhotoYear:        2013,
		PhotoMonth:       11,
		PhotoDay:         11,
		PhotoIso:         0,
		PhotoExposure:    "",
		PhotoFNumber:     0,
		PhotoFocalLength: 0,
		PhotoQuality:     0,
		PhotoResolution:  0,
		Camera:           CameraFixtures.Pointer("canon-eos-6d"),
		CameraID:         CameraFixtures.Pointer("canon-eos-6d").ID,
		CameraSerial:     "",
		CameraSrc:        "",
		Lens:             LensFixtures.Pointer("lens-f-380"),
		LensID:           LensFixtures.Pointer("lens-f-380").ID,
		Details:          DetailsFixtures.Pointer("lake", 1000015),
		Keywords:         []Keyword{},
		Albums:           []Album{},
		Files:            []File{},
		Labels: []PhotoLabel{
			LabelFixtures.PhotoLabel(10000015, "landscape", 20, "image"),
			LabelFixtures.PhotoLabel(10000018, "likeLabel", 20, "image")},
		CreatedAt:  time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:  time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		EditedAt:   nil,
		CheckedAt:  &checkedTime,
		DeletedAt:  nil,
		PhotoColor: 6,
		PhotoStack: 0,
		PhotoFaces: 0,
	},
	"Photo18": {
		ID:               1000018,
		PhotoUID:         "ps6sg6be2lvl0y25",
		TakenAt:          time.Date(2013, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenAtLocal:     time.Date(2013, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenSrc:         SrcMeta,
		PhotoType:        "image",
		TypeSrc:          "",
		PhotoTitle:       "ArchivedChroma0",
		TitleSrc:         "",
		PhotoDescription: "",
		DescriptionSrc:   "",
		PhotoPath:        "Archived",
		PhotoName:        "Photo18",
		OriginalName:     "",
		PhotoFavorite:    true,
		PhotoPrivate:     false,
		PhotoScan:        false,
		PhotoPanorama:    false,
		TimeZone:         "",
		Place:            PlaceFixtures.Pointer("mexico"),
		PlaceID:          PlaceFixtures.Pointer("mexico").ID,
		PlaceSrc:         SrcMeta,
		Cell:             CellFixtures.Pointer("mexico"),
		CellID:           CellFixtures.Pointer("mexico").ID,
		CellAccuracy:     0,
		PhotoAltitude:    3,
		PhotoLat:         1.234,
		PhotoLng:         4.321,
		PhotoCountry:     PlaceFixtures.Pointer("mexico").CountryCode(),
		PhotoYear:        2013,
		PhotoMonth:       11,
		PhotoDay:         11,
		PhotoIso:         0,
		PhotoExposure:    "",
		PhotoFNumber:     0,
		PhotoFocalLength: 0,
		PhotoQuality:     0,
		PhotoResolution:  0,
		Camera:           CameraFixtures.Pointer("canon-eos-6d"),
		CameraID:         CameraFixtures.Pointer("canon-eos-6d").ID,
		CameraSerial:     "",
		CameraSrc:        "",
		Lens:             LensFixtures.Pointer("lens-f-380"),
		LensID:           LensFixtures.Pointer("lens-f-380").ID,
		Details:          DetailsFixtures.Pointer("lake", 1000015),
		Keywords:         []Keyword{},
		Albums:           []Album{},
		Files:            []File{},
		Labels: []PhotoLabel{
			LabelFixtures.PhotoLabel(10000018, "landscape", 20, "image"),
			LabelFixtures.PhotoLabel(10000018, "likeLabel", 20, "image")},
		CreatedAt:  time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:  time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		EditedAt:   nil,
		CheckedAt:  &checkedTime,
		DeletedAt:  &deleteTime,
		PhotoColor: 9,
		PhotoStack: 0,
		PhotoFaces: 0,
	},
	"Photo19": {
		ID:               1000019,
		UUID:             "123e4567-e89b-12d3-a456-426614174000",
		PhotoUID:         "ps6sg6bexxvl0yh0",
		TakenAt:          time.Date(2008, 1, 1, 0, 0, 0, 0, time.UTC),
		TakenAtLocal:     time.Date(2008, 1, 1, 0, 0, 0, 0, time.UTC),
		TakenSrc:         "",
		PhotoType:        "image",
		TypeSrc:          "",
		PhotoTitle:       "",
		TitleSrc:         "",
		PhotoDescription: "",
		DescriptionSrc:   "",
		PhotoPath:        "1990/04",
		PhotoName:        "Photo19",
		OriginalName:     "",
		PhotoFavorite:    false,
		PhotoPrivate:     false,
		PhotoScan:        false,
		PhotoPanorama:    false,
		TimeZone:         "",
		Place:            &UnknownPlace,
		PlaceID:          UnknownPlace.ID,
		PlaceSrc:         "",
		Cell:             &UnknownLocation,
		CellID:           UnknownLocation.ID,
		CellAccuracy:     0,
		PhotoAltitude:    0,
		PhotoLat:         0,
		PhotoLng:         0,
		PhotoCountry:     UnknownPlace.CountryCode(),
		PhotoYear:        2008,
		PhotoMonth:       1,
		PhotoDay:         1,
		PhotoIso:         0,
		PhotoExposure:    "",
		PhotoFNumber:     0,
		PhotoFocalLength: 0,
		PhotoQuality:     -1,
		PhotoResolution:  2,
		Camera:           CameraFixtures.Pointer("canon-eos-6d"),
		CameraID:         CameraFixtures.Pointer("canon-eos-6d").ID,
		CameraSerial:     "",
		CameraSrc:        "",
		Lens:             LensFixtures.Pointer("lens-f-380"),
		LensID:           LensFixtures.Pointer("lens-f-380").ID,
		Details:          DetailsFixtures.Pointer("bridge", 1000019),
		Keywords:         []Keyword{},
		Albums:           []Album{},
		Files:            []File{},
		Labels:           []PhotoLabel{},
		CreatedAt:        time.Date(2009, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:        time.Date(2010, 1, 1, 0, 0, 0, 0, time.UTC),
		EditedAt:         nil,
		CheckedAt:        &checkedTime,
		DeletedAt:        nil,
		PhotoColor:       12,
		PhotoStack:       0,
		PhotoFaces:       0,
	},
	"Photo20": {
		ID:               1000020,
		PhotoUID:         "ps6sg6bexxvl0y20",
		TakenAt:          time.Date(2008, 1, 1, 0, 0, 0, 0, time.UTC),
		TakenAtLocal:     time.Time{},
		TakenSrc:         "",
		PhotoType:        "image",
		TypeSrc:          "",
		PhotoTitle:       "",
		TitleSrc:         "",
		PhotoDescription: "",
		DescriptionSrc:   "",
		PhotoPath:        "1990/04",
		PhotoName:        "Photo20",
		OriginalName:     "",
		PhotoFavorite:    false,
		PhotoPrivate:     false,
		PhotoScan:        false,
		PhotoPanorama:    false,
		TimeZone:         "",
		Place:            &UnknownPlace,
		PlaceID:          UnknownPlace.ID,
		PlaceSrc:         "",
		Cell:             &UnknownLocation,
		CellID:           UnknownLocation.ID,
		CellAccuracy:     0,
		PhotoAltitude:    0,
		PhotoLat:         0,
		PhotoLng:         0,
		PhotoCountry:     UnknownPlace.CountryCode(),
		PhotoYear:        2008,
		PhotoMonth:       1,
		PhotoDay:         1,
		PhotoIso:         0,
		PhotoExposure:    "",
		PhotoFNumber:     0,
		PhotoFocalLength: 0,
		PhotoQuality:     1,
		PhotoResolution:  2,
		Camera:           CameraFixtures.Pointer("canon-eos-6d"),
		CameraID:         CameraFixtures.Pointer("canon-eos-6d").ID,
		CameraSerial:     "",
		CameraSrc:        "",
		Lens:             LensFixtures.Pointer("lens-f-380"),
		LensID:           LensFixtures.Pointer("lens-f-380").ID,
		Details:          DetailsFixtures.Pointer("bridge", 1000019),
		Keywords:         []Keyword{},
		Albums:           []Album{},
		Files:            []File{},
		Labels:           []PhotoLabel{},
		CreatedAt:        time.Date(2009, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:        time.Date(2008, 1, 1, 0, 0, 0, 0, time.UTC),
		EditedAt:         nil,
		CheckedAt:        &checkedTime,
		DeletedAt:        nil,
		PhotoColor:       1,
		PhotoStack:       0,
		PhotoFaces:       0,
	},
	"Photo21": {
		ID:               1000021,
		PhotoUID:         "ps6sg6bexxvl0y21",
		TakenAt:          time.Date(2018, 1, 1, 0, 0, 0, 0, time.UTC),
		TakenAtLocal:     time.Time{},
		TakenSrc:         "",
		PhotoType:        "video",
		TypeSrc:          "",
		PhotoTitle:       "",
		TitleSrc:         "",
		PhotoDescription: "",
		DescriptionSrc:   "",
		PhotoPath:        "2018/01",
		PhotoName:        "20180101_130410_418COOO0",
		OriginalName:     "my-videos/IMG_88888",
		PhotoFavorite:    false,
		PhotoPrivate:     false,
		PhotoScan:        false,
		PhotoPanorama:    false,
		TimeZone:         "Europe/Berlin",
		Place:            PlaceFixtures.Pointer("Germany"),
		PlaceID:          PlaceFixtures.Pointer("Germany").ID,
		PlaceSrc:         "estimate",
		Cell:             &UnknownLocation,
		CellID:           UnknownLocation.ID,
		CellAccuracy:     0,
		PhotoAltitude:    0,
		PhotoLat:         0,
		PhotoLng:         0,
		PhotoCountry:     PlaceFixtures.Pointer("Germany").CountryCode(),
		PhotoYear:        2018,
		PhotoMonth:       1,
		PhotoDay:         1,
		PhotoIso:         0,
		PhotoExposure:    "",
		PhotoFNumber:     0,
		PhotoFocalLength: 0,
		PhotoQuality:     1,
		PhotoResolution:  2,
		Camera:           CameraFixtures.Pointer("canon-eos-6d"),
		CameraID:         CameraFixtures.Pointer("canon-eos-6d").ID,
		CameraSerial:     "",
		CameraSrc:        "",
		Lens:             LensFixtures.Pointer("lens-f-380"),
		LensID:           LensFixtures.Pointer("lens-f-380").ID,
		Details:          DetailsFixtures.Pointer("bridge", 1000019),
		Keywords:         []Keyword{},
		Albums:           []Album{},
		Files:            []File{},
		Labels:           []PhotoLabel{},
		CreatedAt:        time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:        time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		EditedAt:         nil,
		CheckedAt:        &checkedTime,
		DeletedAt:        nil,
		PhotoColor:       14,
		PhotoStack:       0,
		PhotoFaces:       0,
	},
	"Photo22": {
		ID:               1000022,
		PhotoUID:         "ps6sg6bexxvl0y22",
		TakenAt:          time.Date(2001, 1, 1, 7, 0, 0, 0, time.UTC),
		TakenAtLocal:     time.Date(2001, 1, 1, 7, 0, 0, 0, time.UTC),
		TakenSrc:         "",
		PhotoType:        "image",
		TypeSrc:          "",
		PhotoTitle:       "Lake / 2001",
		TitleSrc:         "",
		PhotoDescription: "",
		DescriptionSrc:   "",
		PhotoPath:        "Mexico-With-Family",
		PhotoName:        "Photo22",
		OriginalName:     "",
		PhotoFavorite:    false,
		PhotoPrivate:     false,
		PhotoScan:        false,
		PhotoPanorama:    false,
		TimeZone:         "",
		Place:            PlaceFixtures.Pointer("mexico"),
		PlaceID:          PlaceFixtures.Pointer("mexico").ID,
		PlaceSrc:         SrcMeta,
		Cell:             CellFixtures.Pointer("mexico"),
		CellID:           CellFixtures.Pointer("mexico").ID,
		CellAccuracy:     0,
		PhotoAltitude:    0,
		PhotoLat:         0,
		PhotoLng:         0,
		PhotoCountry:     PlaceFixtures.Pointer("mexico").CountryCode(),
		PhotoYear:        2001,
		PhotoMonth:       1,
		PhotoDay:         1,
		PhotoIso:         0,
		PhotoExposure:    "",
		PhotoFNumber:     0,
		PhotoFocalLength: 0,
		PhotoQuality:     1,
		PhotoResolution:  2,
		Camera:           CameraFixtures.Pointer("canon-eos-6d"),
		CameraID:         CameraFixtures.Pointer("canon-eos-6d").ID,
		CameraSerial:     "",
		CameraSrc:        "",
		Lens:             LensFixtures.Pointer("lens-f-380"),
		LensID:           LensFixtures.Pointer("lens-f-380").ID,
		Details:          &Details{},
		Keywords:         []Keyword{},
		Albums:           []Album{},
		Files:            []File{},
		Labels:           []PhotoLabel{},
		CreatedAt:        time.Date(2010, 1, 1, 8, 0, 0, 0, time.UTC),
		UpdatedAt:        time.Date(2010, 1, 1, 8, 0, 0, 0, time.UTC),
		EditedAt:         nil,
		CheckedAt:        &checkedTime,
		DeletedAt:        nil,
		PhotoColor:       14,
		PhotoStack:       0,
		PhotoFaces:       0,
	},
	"Photo23": {
		ID:               1000023,
		PhotoUID:         "ps6sg6be2lvl0y43",
		TakenAt:          time.Date(2020, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenAtLocal:     time.Date(2020, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenSrc:         SrcMeta,
		PhotoType:        "image",
		TypeSrc:          "",
		PhotoTitle:       "ForMerge",
		TitleSrc:         SrcManual,
		PhotoDescription: "",
		DescriptionSrc:   "",
		PhotoPath:        "2020/vacation",
		PhotoName:        "PhotoMerge",
		OriginalName:     "",
		PhotoFavorite:    true,
		PhotoPrivate:     false,
		PhotoScan:        false,
		PhotoPanorama:    false,
		TimeZone:         "America/Mexico_City",
		Place:            PlaceFixtures.Pointer("mexico"),
		PlaceID:          PlaceFixtures.Pointer("mexico").ID,
		PlaceSrc:         SrcMeta,
		Cell:             CellFixtures.Pointer("mexico"),
		CellID:           CellFixtures.Pointer("mexico").ID,
		CellAccuracy:     0,
		PhotoAltitude:    3,
		PhotoLat:         1.234,
		PhotoLng:         4.321,
		PhotoCountry:     PlaceFixtures.Pointer("mexico").CountryCode(),
		PhotoYear:        2020,
		PhotoMonth:       11,
		PhotoDay:         11,
		PhotoIso:         0,
		PhotoExposure:    "",
		PhotoFocalLength: 0,
		PhotoFNumber:     0,
		PhotoQuality:     5,
		PhotoResolution:  0,
		Camera:           CameraFixtures.Pointer("canon-eos-6d"),
		CameraID:         CameraFixtures.Pointer("canon-eos-6d").ID,
		CameraSerial:     "",
		CameraSrc:        "",
		Lens:             LensFixtures.Pointer("lens-f-380"),
		LensID:           LensFixtures.Pointer("lens-f-380").ID,
		Details:          DetailsFixtures.Pointer("lake", 1000015),
		Keywords:         []Keyword{},
		Albums:           []Album{},
		Files:            []File{},
		Labels: []PhotoLabel{
			LabelFixtures.PhotoLabel(10000018, "landscape", 20, "image"),
			LabelFixtures.PhotoLabel(10000018, "likeLabel", 20, "image")},
		CreatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		EditedAt:   nil,
		CheckedAt:  &checkedTime,
		DeletedAt:  nil,
		PhotoColor: 14,
		PhotoStack: 0,
		PhotoFaces: 0,
	},
	"Photo24": {
		ID:               1000024,
		PhotoUID:         "ps6sg6be2lvl0y44",
		TakenAt:          time.Date(2020, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenAtLocal:     time.Date(2020, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenSrc:         SrcMeta,
		PhotoType:        "raw",
		TypeSrc:          "",
		PhotoTitle:       "ForMerge2",
		TitleSrc:         SrcManual,
		PhotoDescription: "",
		DescriptionSrc:   "",
		PhotoPath:        "2020/vacation",
		PhotoName:        "PhotoMerge2",
		OriginalName:     "",
		PhotoFavorite:    true,
		PhotoPrivate:     false,
		PhotoScan:        false,
		PhotoPanorama:    false,
		TimeZone:         "America/Mexico_City",
		Place:            PlaceFixtures.Pointer("mexico"),
		PlaceID:          PlaceFixtures.Pointer("mexico").ID,
		PlaceSrc:         SrcMeta,
		Cell:             CellFixtures.Pointer("mexico"),
		CellID:           CellFixtures.Pointer("mexico").ID,
		CellAccuracy:     0,
		PhotoAltitude:    3,
		PhotoLat:         1.234,
		PhotoLng:         4.321,
		PhotoCountry:     PlaceFixtures.Pointer("mexico").CountryCode(),
		PhotoYear:        2020,
		PhotoMonth:       11,
		PhotoDay:         11,
		PhotoIso:         0,
		PhotoExposure:    "",
		PhotoFNumber:     0,
		PhotoFocalLength: 0,
		PhotoQuality:     5,
		PhotoResolution:  0,
		Camera:           CameraFixtures.Pointer("canon-eos-6d"),
		CameraID:         CameraFixtures.Pointer("canon-eos-6d").ID,
		CameraSerial:     "",
		CameraSrc:        "",
		Lens:             LensFixtures.Pointer("lens-f-380"),
		LensID:           LensFixtures.Pointer("lens-f-380").ID,
		Details:          DetailsFixtures.Pointer("lake", 1000015),
		Keywords:         []Keyword{},
		Albums:           []Album{},
		Files:            []File{},
		Labels: []PhotoLabel{
			LabelFixtures.PhotoLabel(10000018, "landscape", 20, "image"),
			LabelFixtures.PhotoLabel(10000018, "likeLabel", 20, "image")},
		CreatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		EditedAt:   nil,
		CheckedAt:  &checkedTime,
		DeletedAt:  nil,
		PhotoColor: 14,
		PhotoStack: 0,
		PhotoFaces: 0,
	},
	"Photo25": {
		ID:               1000025,
		PhotoUID:         "ps6sg6be2lvl0y45",
		TakenAt:          time.Date(2007, 1, 11, 9, 7, 18, 0, time.UTC),
		TakenAtLocal:     time.Date(2007, 1, 11, 9, 7, 18, 0, time.UTC),
		TakenSrc:         SrcMeta,
		PhotoType:        "image",
		TypeSrc:          "",
		PhotoTitle:       "photowitheditedatdate",
		TitleSrc:         SrcManual,
		PhotoDescription: "",
		DescriptionSrc:   "",
		PhotoPath:        "2007/12",
		PhotoName:        "PhotoWithEditedAt",
		OriginalName:     "",
		PhotoFavorite:    true,
		PhotoPrivate:     false,
		PhotoScan:        false,
		PhotoPanorama:    true,
		TimeZone:         "America/Mexico_City",
		Place:            PlaceFixtures.Pointer("mexico"),
		PlaceID:          PlaceFixtures.Pointer("mexico").ID,
		PlaceSrc:         SrcMeta,
		Cell:             CellFixtures.Pointer("mexico"),
		CellID:           CellFixtures.Pointer("mexico").ID,
		CellAccuracy:     0,
		PhotoAltitude:    3,
		PhotoLat:         1.234,
		PhotoLng:         4.321,
		PhotoCountry:     PlaceFixtures.Pointer("mexico").CountryCode(),
		PhotoYear:        0,
		PhotoMonth:       0,
		PhotoDay:         4,
		PhotoIso:         0,
		PhotoExposure:    "",
		PhotoFNumber:     0,
		PhotoFocalLength: 0,
		PhotoQuality:     5,
		PhotoResolution:  0,
		Camera:           CameraFixtures.Pointer("canon-eos-6d"),
		CameraID:         CameraFixtures.Pointer("canon-eos-6d").ID,
		CameraSerial:     "",
		CameraSrc:        "",
		Lens:             LensFixtures.Pointer("lens-f-380"),
		LensID:           LensFixtures.Pointer("lens-f-380").ID,
		Details:          DetailsFixtures.Pointer("lake", 1000015),
		Keywords:         []Keyword{},
		Albums:           []Album{},
		Files:            []File{},
		Labels: []PhotoLabel{
			LabelFixtures.PhotoLabel(10000018, "landscape", 20, "image"),
			LabelFixtures.PhotoLabel(10000018, "likeLabel", 20, "image")},
		CreatedAt:  time.Date(2007, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:  time.Date(2007, 3, 1, 0, 0, 0, 0, time.UTC),
		EditedAt:   &editTime,
		CheckedAt:  &checkedTime,
		DeletedAt:  nil,
		PhotoColor: 12,
		PhotoStack: IsUnstacked,
		PhotoFaces: 0,
	},
	"Photo26": {
		ID:               1000026,
		PhotoUID:         "ps6sg6be2lvl0y90",
		TakenAt:          time.Date(2007, 1, 11, 9, 7, 18, 0, time.UTC),
		TakenAtLocal:     time.Date(2007, 1, 11, 9, 7, 18, 0, time.UTC),
		TakenSrc:         SrcMeta,
		PhotoType:        "image",
		TypeSrc:          "",
		PhotoTitle:       "phototobebatchapproved",
		TitleSrc:         SrcAuto,
		PhotoDescription: "",
		DescriptionSrc:   "",
		PhotoPath:        "2007/12",
		PhotoName:        "PhotoWithEditedAt_2",
		OriginalName:     "",
		PhotoFavorite:    true,
		PhotoPrivate:     false,
		PhotoScan:        false,
		PhotoPanorama:    true,
		TimeZone:         "America/Mexico_City",
		Place:            PlaceFixtures.Pointer("mexico"),
		PlaceID:          PlaceFixtures.Pointer("mexico").ID,
		PlaceSrc:         SrcMeta,
		Cell:             CellFixtures.Pointer("mexico"),
		CellID:           CellFixtures.Pointer("mexico").ID,
		CellAccuracy:     0,
		PhotoAltitude:    3,
		PhotoLat:         1.234,
		PhotoLng:         4.321,
		PhotoCountry:     PlaceFixtures.Pointer("mexico").CountryCode(),
		PhotoYear:        2007,
		PhotoMonth:       1,
		PhotoDay:         11,
		PhotoIso:         0,
		PhotoExposure:    "",
		PhotoFNumber:     0,
		PhotoFocalLength: 0,
		PhotoQuality:     1,
		PhotoResolution:  0,
		Camera:           CameraFixtures.Pointer("canon-eos-6d"),
		CameraID:         CameraFixtures.Pointer("canon-eos-6d").ID,
		CameraSerial:     "",
		CameraSrc:        "",
		Lens:             LensFixtures.Pointer("lens-f-380"),
		LensID:           LensFixtures.Pointer("lens-f-380").ID,
		Details:          DetailsFixtures.Pointer("lake", 1000015),
		Keywords:         []Keyword{},
		Albums:           []Album{},
		Files:            []File{},
		Labels: []PhotoLabel{
			LabelFixtures.PhotoLabel(10000018, "landscape", 20, "image"),
			LabelFixtures.PhotoLabel(10000018, "likeLabel", 20, "image")},
		CreatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		EditedAt:   nil,
		CheckedAt:  &checkedTime,
		DeletedAt:  nil,
		PhotoColor: 14,
		PhotoStack: IsUnstacked,
		PhotoFaces: 0,
	},
	"Photo27": {
		ID:               1000027,
		PhotoUID:         "ps6sg6be2lvl0y50",
		TakenAt:          time.Date(2000, 12, 11, 9, 7, 18, 0, time.UTC),
		TakenAtLocal:     time.Date(2000, 12, 11, 4, 7, 18, 0, time.UTC),
		TakenSrc:         SrcMeta,
		PhotoType:        "live",
		TypeSrc:          "",
		PhotoTitle:       "phototobebatchapproved2",
		TitleSrc:         SrcName,
		PhotoDescription: "",
		DescriptionSrc:   "",
		PhotoPath:        "2000/12",
		PhotoName:        "PhotoToBeBatchApproved2",
		OriginalName:     "",
		PhotoFavorite:    true,
		PhotoPrivate:     false,
		PhotoScan:        false,
		PhotoPanorama:    false,
		TimeZone:         "America/Mexico",
		Place:            PlaceFixtures.Pointer("mexico"),
		PlaceID:          PlaceFixtures.Pointer("mexico").ID,
		PlaceSrc:         SrcMeta,
		Cell:             CellFixtures.Pointer("mexico"),
		CellID:           CellFixtures.Pointer("mexico").ID,
		CellAccuracy:     0,
		PhotoAltitude:    3,
		PhotoLat:         19.682,
		PhotoLng:         -98.84,
		PhotoCountry:     PlaceFixtures.Pointer("mexico").CountryCode(),
		PhotoYear:        2000,
		PhotoMonth:       12,
		PhotoDay:         11,
		PhotoIso:         0,
		PhotoExposure:    "",
		PhotoFNumber:     0,
		PhotoFocalLength: 0,
		PhotoQuality:     1,
		PhotoResolution:  0,
		Camera:           CameraFixtures.Pointer("canon-eos-6d"),
		CameraID:         CameraFixtures.Pointer("canon-eos-6d").ID,
		CameraSerial:     "",
		CameraSrc:        "",
		Lens:             LensFixtures.Pointer("lens-f-380"),
		LensID:           LensFixtures.Pointer("lens-f-380").ID,
		Details:          DetailsFixtures.Pointer("lake", 1000015),
		Keywords:         []Keyword{},
		Albums:           []Album{},
		Files:            []File{},
		Labels: []PhotoLabel{
			LabelFixtures.PhotoLabel(10000018, "landscape", 20, "image"),
			LabelFixtures.PhotoLabel(10000018, "likeLabel", 20, "image")},
		CreatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		EditedAt:   nil,
		CheckedAt:  &checkedTime,
		DeletedAt:  nil,
		PhotoColor: 12,
		PhotoStack: IsStackable,
		PhotoFaces: 3,
	},
	"PhotoTimeZone": {
		ID:               1000028,
		PhotoUID:         "ps6sg6b3ki00x54g",
		TakenAt:          time.Date(2015, 5, 17, 23, 2, 46, 0, time.UTC),
		TakenAtLocal:     time.Date(2015, 5, 17, 23, 2, 46, 0, time.UTC),
		TakenSrc:         SrcMeta,
		PhotoType:        "image",
		TypeSrc:          "",
		PhotoTitle:       "Estimate / 2015",
		TitleSrc:         SrcName,
		PhotoDescription: "",
		DescriptionSrc:   "",
		PhotoPath:        "2015/05",
		PhotoName:        "Estimate",
		OriginalName:     "",
		PhotoFavorite:    false,
		PhotoPrivate:     false,
		PhotoScan:        false,
		PhotoPanorama:    false,
		TimeZone:         "",
		Place:            &UnknownPlace,
		PlaceID:          UnknownPlace.ID,
		PlaceSrc:         SrcAuto,
		Cell:             nil,
		CellID:           UnknownPlace.ID,
		CellAccuracy:     0,
		PhotoAltitude:    0,
		PhotoLat:         0,
		PhotoLng:         0,
		PhotoCountry:     UnknownCountry.ID,
		PhotoYear:        2015,
		PhotoMonth:       5,
		PhotoDay:         17,
		PhotoIso:         100,
		PhotoExposure:    "1/50",
		PhotoFNumber:     2.6,
		PhotoFocalLength: 3,
		PhotoQuality:     3,
		PhotoResolution:  0,
		Camera:           CameraFixtures.Pointer("canon-eos-6d"),
		CameraID:         CameraFixtures.Pointer("canon-eos-6d").ID,
		CameraSerial:     "",
		CameraSrc:        "",
		Lens:             LensFixtures.Pointer("lens-f-380"),
		LensID:           LensFixtures.Pointer("lens-f-380").ID,
		Details: &Details{
			PhotoID:   1000028,
			CreatedAt: TimeStamp(),
			UpdatedAt: TimeStamp(),
		},
		Keywords: []Keyword{},
		Albums:   []Album{},
		Files:    []File{},
		Labels: []PhotoLabel{
			LabelFixtures.PhotoLabel(10000018, "landscape", 20, "image"),
			LabelFixtures.PhotoLabel(10000018, "likeLabel", 20, "image")},
		CreatedAt:   time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:   time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		EditedAt:    nil,
		CheckedAt:   nil,
		EstimatedAt: nil,
		DeletedAt:   nil,
		PhotoColor:  12,
		PhotoStack:  IsStackable,
		PhotoFaces:  0,
	},
	"VideoTimeZone": {
		ID:               1000029,
		PhotoUID:         "ps6sg6byk7wrbk2u",
		TakenAt:          time.Date(2015, 5, 17, 17, 48, 46, 0, time.UTC),
		TakenAtLocal:     time.Date(2015, 5, 17, 17, 48, 46, 0, time.UTC),
		TakenSrc:         SrcMeta,
		PhotoType:        "video",
		TypeSrc:          "",
		PhotoTitle:       "Estimate / 2015",
		TitleSrc:         SrcName,
		PhotoDescription: "",
		DescriptionSrc:   "",
		PhotoPath:        "2015/05",
		PhotoName:        "Estimate",
		OriginalName:     "",
		PhotoFavorite:    false,
		PhotoPrivate:     false,
		PhotoScan:        false,
		PhotoPanorama:    false,
		TimeZone:         "UTC",
		Place:            &UnknownPlace,
		PlaceID:          UnknownPlace.ID,
		PlaceSrc:         SrcAuto,
		Cell:             nil,
		CellID:           UnknownPlace.ID,
		CellAccuracy:     0,
		PhotoAltitude:    0,
		PhotoLat:         0,
		PhotoLng:         0,
		PhotoCountry:     UnknownCountry.ID,
		PhotoYear:        2015,
		PhotoMonth:       5,
		PhotoDay:         17,
		PhotoIso:         100,
		PhotoExposure:    "",
		PhotoFNumber:     2.6,
		PhotoFocalLength: 3,
		PhotoQuality:     3,
		PhotoResolution:  0,
		Camera:           CameraFixtures.Pointer("canon-eos-6d"),
		CameraID:         CameraFixtures.Pointer("canon-eos-6d").ID,
		CameraSerial:     "",
		CameraSrc:        "",
		Lens:             LensFixtures.Pointer("lens-f-380"),
		LensID:           LensFixtures.Pointer("lens-f-380").ID,
		Details: &Details{
			PhotoID:   1000029,
			CreatedAt: TimeStamp(),
			UpdatedAt: TimeStamp(),
		},
		Keywords: []Keyword{},
		Albums:   []Album{},
		Files:    []File{},
		Labels: []PhotoLabel{
			LabelFixtures.PhotoLabel(10000018, "landscape", 20, "image"),
			LabelFixtures.PhotoLabel(10000018, "likeLabel", 20, "image")},
		CreatedAt:   time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:   time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		EditedAt:    nil,
		CheckedAt:   nil,
		EstimatedAt: nil,
		DeletedAt:   nil,
		PhotoColor:  12,
		PhotoStack:  IsStackable,
		PhotoFaces:  0,
	},
	"%photo28": {
		ID:               10000029,
		PhotoUID:         "ps6sg6byk7wrbk21",
		TakenAt:          time.Date(2020, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenAtLocal:     time.Date(2020, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenSrc:         SrcMeta,
		PhotoType:        "image",
		TypeSrc:          "",
		PhotoTitle:       "%Salad",
		TitleSrc:         SrcManual,
		PhotoDescription: "",
		DescriptionSrc:   "",
		PhotoPath:        "%abc/%folderx",
		PhotoName:        "%photo28",
		OriginalName:     "",
		PhotoFavorite:    false,
		PhotoPrivate:     false,
		PhotoScan:        false,
		PhotoPanorama:    false,
		TimeZone:         "America/Mexico_City",
		Place:            CellFixtures.Pointer("caravan park").Place,
		PlaceID:          CellFixtures.Pointer("caravan park").Place.ID,
		PlaceSrc:         "meta",
		Cell:             CellFixtures.Pointer("caravan park"),
		CellID:           CellFixtures.Pointer("caravan park").ID,
		CellAccuracy:     0,
		PhotoAltitude:    3,
		PhotoLat:         48.519234,
		PhotoLng:         9.057997,
		PhotoCountry:     CellFixtures.Pointer("caravan park").Place.CountryCode(),
		PhotoYear:        2020,
		PhotoMonth:       11,
		PhotoDay:         11,
		PhotoIso:         0,
		PhotoExposure:    "",
		PhotoFocalLength: 0,
		PhotoFNumber:     0,
		PhotoQuality:     5,
		PhotoResolution:  0,
		Camera:           CameraFixtures.Pointer("canon-eos-6d"),
		CameraID:         CameraFixtures.Pointer("canon-eos-6d").ID,
		CameraSerial:     "",
		CameraSrc:        "",
		Lens:             LensFixtures.Pointer("lens-f-380"),
		LensID:           LensFixtures.Pointer("lens-f-380").ID,
		Details:          DetailsFixtures.Pointer("lake", 1000015),
		Keywords: []Keyword{
			KeywordFixtures.Get("%toss"),
		},
		Albums: []Album{},
		Files:  []File{},
		Labels: []PhotoLabel{
			LabelFixtures.PhotoLabel(10000029, "%tennis", 20, "image"),
		},
		CreatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		EditedAt:   nil,
		CheckedAt:  &checkedTime,
		DeletedAt:  nil,
		PhotoColor: 14,
		PhotoStack: 0,
		PhotoFaces: 0,
	},
	"photo29%": {
		ID:               1000030,
		PhotoUID:         "ps6sg6byk7wrbk22",
		TakenAt:          time.Date(2020, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenAtLocal:     time.Date(2020, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenSrc:         SrcMeta,
		PhotoType:        "image",
		TypeSrc:          "",
		PhotoTitle:       "cloud%",
		TitleSrc:         SrcManual,
		PhotoDescription: "",
		DescriptionSrc:   "",
		PhotoPath:        "abc%/folde%",
		PhotoName:        "photo29%",
		OriginalName:     "",
		PhotoFavorite:    false,
		PhotoPrivate:     false,
		PhotoScan:        false,
		PhotoPanorama:    false,
		TimeZone:         "America/Mexico_City",
		Place:            CellFixtures.Pointer("caravan park").Place,
		PlaceID:          CellFixtures.Pointer("caravan park").Place.ID,
		PlaceSrc:         "meta",
		Cell:             CellFixtures.Pointer("caravan park"),
		CellID:           CellFixtures.Pointer("caravan park").ID,
		CellAccuracy:     0,
		PhotoAltitude:    3,
		PhotoLat:         48.519234,
		PhotoLng:         9.057997,
		PhotoCountry:     CellFixtures.Pointer("caravan park").Place.CountryCode(),
		PhotoYear:        2020,
		PhotoMonth:       11,
		PhotoDay:         11,
		PhotoIso:         0,
		PhotoExposure:    "",
		PhotoFocalLength: 0,
		PhotoFNumber:     0,
		PhotoQuality:     5,
		PhotoResolution:  0,
		Camera:           CameraFixtures.Pointer("canon-eos-6d"),
		CameraID:         CameraFixtures.Pointer("canon-eos-6d").ID,
		CameraSerial:     "",
		CameraSrc:        "",
		Lens:             LensFixtures.Pointer("lens-f-380"),
		LensID:           LensFixtures.Pointer("lens-f-380").ID,
		Details:          DetailsFixtures.Pointer("lake", 1000015),
		Keywords: []Keyword{
			KeywordFixtures.Get("magic%"),
		},
		Albums: []Album{},
		Files:  []File{},
		Labels: []PhotoLabel{
			LabelFixtures.PhotoLabel(1000030, "cell%", 20, "image"),
		},
		CreatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		EditedAt:   nil,
		CheckedAt:  &checkedTime,
		DeletedAt:  nil,
		PhotoColor: 14,
		PhotoStack: 0,
		PhotoFaces: 0,
	},
	"photo%30": {
		ID:               1000031,
		PhotoUID:         "ps6sg6byk7wrbk23",
		TakenAt:          time.Date(2020, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenAtLocal:     time.Date(2020, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenSrc:         SrcMeta,
		PhotoType:        "image",
		TypeSrc:          "",
		PhotoTitle:       "hon%ey",
		TitleSrc:         SrcManual,
		PhotoDescription: "",
		DescriptionSrc:   "",
		PhotoPath:        "ab%c/fol%de",
		PhotoName:        "photo%30",
		OriginalName:     "",
		PhotoFavorite:    false,
		PhotoPrivate:     false,
		PhotoScan:        false,
		PhotoPanorama:    false,
		TimeZone:         "America/Mexico_City",
		Place:            CellFixtures.Pointer("caravan park").Place,
		PlaceID:          CellFixtures.Pointer("caravan park").Place.ID,
		PlaceSrc:         "meta",
		Cell:             CellFixtures.Pointer("caravan park"),
		CellID:           CellFixtures.Pointer("caravan park").ID,
		CellAccuracy:     0,
		PhotoAltitude:    3,
		PhotoLat:         48.519234,
		PhotoLng:         9.057997,
		PhotoCountry:     CellFixtures.Pointer("caravan park").Place.CountryCode(),
		PhotoYear:        2020,
		PhotoMonth:       11,
		PhotoDay:         11,
		PhotoIso:         0,
		PhotoExposure:    "",
		PhotoFocalLength: 0,
		PhotoFNumber:     0,
		PhotoQuality:     5,
		PhotoResolution:  0,
		Camera:           CameraFixtures.Pointer("canon-eos-6d"),
		CameraID:         CameraFixtures.Pointer("canon-eos-6d").ID,
		CameraSerial:     "",
		CameraSrc:        "",
		Lens:             LensFixtures.Pointer("lens-f-380"),
		LensID:           LensFixtures.Pointer("lens-f-380").ID,
		Details:          DetailsFixtures.Pointer("lake", 1000015),
		Keywords: []Keyword{
			KeywordFixtures.Get("ca%t"),
		},
		Albums: []Album{},
		Files:  []File{},
		Labels: []PhotoLabel{
			LabelFixtures.PhotoLabel(1000031, "chem%stry", 20, "image"),
		},
		CreatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		EditedAt:   nil,
		CheckedAt:  &checkedTime,
		DeletedAt:  nil,
		PhotoColor: 14,
		PhotoStack: 0,
		PhotoFaces: 0,
	},
	"&photo31": {
		ID:               1000032,
		PhotoUID:         "ps6sg6byk7wrbk24",
		TakenAt:          time.Date(2020, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenAtLocal:     time.Date(2020, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenSrc:         SrcMeta,
		PhotoType:        "image",
		TypeSrc:          "",
		PhotoTitle:       "&dad",
		TitleSrc:         SrcManual,
		PhotoDescription: "",
		DescriptionSrc:   "",
		PhotoPath:        "&abc/&folde",
		PhotoName:        "&photo31",
		OriginalName:     "",
		PhotoFavorite:    false,
		PhotoPrivate:     false,
		PhotoScan:        false,
		PhotoPanorama:    false,
		TimeZone:         "America/Mexico_City",
		Place:            CellFixtures.Pointer("caravan park").Place,
		PlaceID:          CellFixtures.Pointer("caravan park").Place.ID,
		PlaceSrc:         "meta",
		Cell:             CellFixtures.Pointer("caravan park"),
		CellID:           CellFixtures.Pointer("caravan park").ID,
		CellAccuracy:     0,
		PhotoAltitude:    3,
		PhotoLat:         48.519234,
		PhotoLng:         9.057997,
		PhotoCountry:     CellFixtures.Pointer("caravan park").Place.CountryCode(),
		PhotoYear:        2020,
		PhotoMonth:       11,
		PhotoDay:         11,
		PhotoIso:         0,
		PhotoExposure:    "",
		PhotoFocalLength: 0,
		PhotoFNumber:     0,
		PhotoQuality:     5,
		PhotoResolution:  0,
		Camera:           CameraFixtures.Pointer("canon-eos-6d"),
		CameraID:         CameraFixtures.Pointer("canon-eos-6d").ID,
		CameraSerial:     "",
		CameraSrc:        "",
		Lens:             LensFixtures.Pointer("lens-f-380"),
		LensID:           LensFixtures.Pointer("lens-f-380").ID,
		Details:          DetailsFixtures.Pointer("lake", 1000015),
		Keywords: []Keyword{
			KeywordFixtures.Get("&hogwarts"),
		},
		Albums: []Album{},
		Files:  []File{},
		Labels: []PhotoLabel{
			LabelFixtures.PhotoLabel(1000032, "&friendship", 20, "image"),
		},
		CreatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		EditedAt:   nil,
		CheckedAt:  &checkedTime,
		DeletedAt:  nil,
		PhotoColor: 14,
		PhotoStack: 0,
		PhotoFaces: 0,
	},
	"photo&32": {
		ID:               1000033,
		PhotoUID:         "ps6sg6byk7wrbk25",
		TakenAt:          time.Date(2020, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenAtLocal:     time.Date(2020, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenSrc:         SrcMeta,
		PhotoType:        "image",
		TypeSrc:          "",
		PhotoTitle:       "leader&ship",
		TitleSrc:         SrcManual,
		PhotoDescription: "",
		DescriptionSrc:   "",
		PhotoPath:        "tes&r/lo&c",
		PhotoName:        "photo&32",
		OriginalName:     "",
		PhotoFavorite:    false,
		PhotoPrivate:     false,
		PhotoScan:        false,
		PhotoPanorama:    false,
		TimeZone:         "America/Mexico_City",
		Place:            CellFixtures.Pointer("caravan park").Place,
		PlaceID:          CellFixtures.Pointer("caravan park").Place.ID,
		PlaceSrc:         "meta",
		Cell:             CellFixtures.Pointer("caravan park"),
		CellID:           CellFixtures.Pointer("caravan park").ID,
		CellAccuracy:     0,
		PhotoAltitude:    3,
		PhotoLat:         48.519234,
		PhotoLng:         9.057997,
		PhotoCountry:     CellFixtures.Pointer("caravan park").Place.CountryCode(),
		PhotoYear:        2020,
		PhotoMonth:       11,
		PhotoDay:         11,
		PhotoIso:         0,
		PhotoExposure:    "",
		PhotoFocalLength: 0,
		PhotoFNumber:     0,
		PhotoQuality:     5,
		PhotoResolution:  0,
		Camera:           CameraFixtures.Pointer("canon-eos-6d"),
		CameraID:         CameraFixtures.Pointer("canon-eos-6d").ID,
		CameraSerial:     "",
		CameraSrc:        "",
		Lens:             LensFixtures.Pointer("lens-f-380"),
		LensID:           LensFixtures.Pointer("lens-f-380").ID,
		Details:          DetailsFixtures.Pointer("lake", 1000015),
		Keywords: []Keyword{
			KeywordFixtures.Get("love&trust"),
		},
		Albums: []Album{},
		Files:  []File{},
		Labels: []PhotoLabel{
			LabelFixtures.PhotoLabel(1000032, "construction&failure", 20, "image"),
		},
		CreatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		EditedAt:   nil,
		CheckedAt:  &checkedTime,
		DeletedAt:  nil,
		PhotoColor: 14,
		PhotoStack: 0,
		PhotoFaces: 0,
	},
	"photo33&": {
		ID:               1000034,
		PhotoUID:         "ps6sg6byk7wrbk26",
		TakenAt:          time.Date(2020, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenAtLocal:     time.Date(2020, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenSrc:         SrcMeta,
		PhotoType:        "image",
		TypeSrc:          "",
		PhotoTitle:       "mom&",
		TitleSrc:         SrcManual,
		PhotoDescription: "",
		DescriptionSrc:   "",
		PhotoPath:        "2020&/vacation&",
		PhotoName:        "photo33&",
		OriginalName:     "",
		PhotoFavorite:    false,
		PhotoPrivate:     false,
		PhotoScan:        false,
		PhotoPanorama:    false,
		TimeZone:         "America/Mexico_City",
		Place:            CellFixtures.Pointer("caravan park").Place,
		PlaceID:          CellFixtures.Pointer("caravan park").Place.ID,
		PlaceSrc:         "meta",
		Cell:             CellFixtures.Pointer("caravan park"),
		CellID:           CellFixtures.Pointer("caravan park").ID,
		CellAccuracy:     0,
		PhotoAltitude:    3,
		PhotoLat:         48.519234,
		PhotoLng:         9.057997,
		PhotoCountry:     CellFixtures.Pointer("caravan park").Place.CountryCode(),
		PhotoYear:        2020,
		PhotoMonth:       11,
		PhotoDay:         11,
		PhotoIso:         0,
		PhotoExposure:    "",
		PhotoFocalLength: 0,
		PhotoFNumber:     0,
		PhotoQuality:     5,
		PhotoResolution:  0,
		Camera:           CameraFixtures.Pointer("canon-eos-6d"),
		CameraID:         CameraFixtures.Pointer("canon-eos-6d").ID,
		CameraSerial:     "",
		CameraSrc:        "",
		Lens:             LensFixtures.Pointer("lens-f-380"),
		LensID:           LensFixtures.Pointer("lens-f-380").ID,
		Details:          DetailsFixtures.Pointer("lake", 1000015),
		Keywords: []Keyword{
			KeywordFixtures.Get("countryside&"),
		},
		Albums: []Album{},
		Files:  []File{},
		Labels: []PhotoLabel{
			LabelFixtures.PhotoLabel(1000032, "goal&", 20, "image"),
		},
		CreatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		EditedAt:   nil,
		CheckedAt:  &checkedTime,
		DeletedAt:  nil,
		PhotoColor: 14,
		PhotoStack: 0,
		PhotoFaces: 0,
	},
	"'photo34": {
		ID:               1000035,
		PhotoUID:         "ps6sg6byk7wrbk27",
		TakenAt:          time.Date(2020, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenAtLocal:     time.Date(2020, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenSrc:         SrcMeta,
		PhotoType:        "image",
		TypeSrc:          "",
		PhotoTitle:       "'poetry'",
		TitleSrc:         SrcManual,
		PhotoDescription: "",
		DescriptionSrc:   "",
		PhotoPath:        "'2020/'vacation",
		PhotoName:        "'photo34",
		OriginalName:     "",
		PhotoFavorite:    false,
		PhotoPrivate:     false,
		PhotoScan:        false,
		PhotoPanorama:    false,
		TimeZone:         "America/Mexico_City",
		Place:            CellFixtures.Pointer("caravan park").Place,
		PlaceID:          CellFixtures.Pointer("caravan park").Place.ID,
		PlaceSrc:         "meta",
		Cell:             CellFixtures.Pointer("caravan park"),
		CellID:           CellFixtures.Pointer("caravan park").ID,
		CellAccuracy:     0,
		PhotoAltitude:    3,
		PhotoLat:         48.519234,
		PhotoLng:         9.057997,
		PhotoCountry:     CellFixtures.Pointer("caravan park").Place.CountryCode(),
		PhotoYear:        2020,
		PhotoMonth:       11,
		PhotoDay:         11,
		PhotoIso:         0,
		PhotoExposure:    "",
		PhotoFocalLength: 0,
		PhotoFNumber:     0,
		PhotoQuality:     5,
		PhotoResolution:  0,
		Camera:           CameraFixtures.Pointer("canon-eos-6d"),
		CameraID:         CameraFixtures.Pointer("canon-eos-6d").ID,
		CameraSerial:     "",
		CameraSrc:        "",
		Lens:             LensFixtures.Pointer("lens-f-380"),
		LensID:           LensFixtures.Pointer("lens-f-380").ID,
		Details:          DetailsFixtures.Pointer("lake", 1000015),
		Keywords: []Keyword{
			KeywordFixtures.Get("'grandfather"),
		},
		Albums: []Album{},
		Files:  []File{},
		Labels: []PhotoLabel{
			LabelFixtures.PhotoLabel(1000032, "'activity", 20, "image"),
		},
		CreatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		EditedAt:   nil,
		CheckedAt:  &checkedTime,
		DeletedAt:  nil,
		PhotoColor: 14,
		PhotoStack: 0,
		PhotoFaces: 0,
	},
	"photo'35": {
		ID:               1000036,
		PhotoUID:         "ps6sg6byk7wrbk28",
		TakenAt:          time.Date(2020, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenAtLocal:     time.Date(2020, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenSrc:         SrcMeta,
		PhotoType:        "image",
		TypeSrc:          "",
		PhotoTitle:       "amaz'ing",
		TitleSrc:         SrcManual,
		PhotoDescription: "",
		DescriptionSrc:   "",
		PhotoPath:        "20'20/vacat'ion",
		PhotoName:        "photo'35",
		OriginalName:     "",
		PhotoFavorite:    false,
		PhotoPrivate:     false,
		PhotoScan:        false,
		PhotoPanorama:    false,
		TimeZone:         "America/Mexico_City",
		Place:            CellFixtures.Pointer("caravan park").Place,
		PlaceID:          CellFixtures.Pointer("caravan park").Place.ID,
		PlaceSrc:         "meta",
		Cell:             CellFixtures.Pointer("caravan park"),
		CellID:           CellFixtures.Pointer("caravan park").ID,
		CellAccuracy:     0,
		PhotoAltitude:    3,
		PhotoLat:         48.519234,
		PhotoLng:         9.057997,
		PhotoCountry:     CellFixtures.Pointer("caravan park").Place.CountryCode(),
		PhotoYear:        2020,
		PhotoMonth:       12,
		PhotoDay:         17,
		PhotoIso:         5,
		PhotoExposure:    "",
		PhotoFocalLength: 0,
		PhotoFNumber:     0,
		PhotoQuality:     5,
		PhotoResolution:  0,
		Camera:           CameraFixtures.Pointer("apple-iphone-se"),
		CameraID:         CameraFixtures.Pointer("apple-iphone-se").ID,
		CameraSerial:     "",
		CameraSrc:        "",
		Lens:             LensFixtures.Pointer("4.15mm-f/2.2"),
		LensID:           LensFixtures.Pointer("4.15mm-f/2.2").ID,
		Details:          DetailsFixtures.Pointer("lake", 1000015),
		Keywords: []Keyword{
			KeywordFixtures.Get("grandma's"),
		},
		Albums: []Album{},
		Files:  []File{},
		Labels: []PhotoLabel{
			LabelFixtures.PhotoLabel(1000032, "funera'l", 20, "image"),
		},
		CreatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		EditedAt:   nil,
		CheckedAt:  &checkedTime,
		DeletedAt:  nil,
		PhotoColor: 14,
		PhotoStack: 0,
		PhotoFaces: 0,
	},
	"photo36'": {
		ID:               1000037,
		PhotoUID:         "ps6sg6byk7wrbk29",
		TakenAt:          time.Date(2020, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenAtLocal:     time.Date(2020, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenSrc:         SrcMeta,
		PhotoType:        "image",
		TypeSrc:          "",
		PhotoTitle:       "pollution'",
		TitleSrc:         SrcManual,
		PhotoDescription: "",
		DescriptionSrc:   "",
		PhotoPath:        "2020'/vacation'",
		PhotoName:        "photo36'",
		OriginalName:     "",
		PhotoFavorite:    false,
		PhotoPrivate:     false,
		PhotoScan:        false,
		PhotoPanorama:    false,
		TimeZone:         "America/Mexico_City",
		Place:            CellFixtures.Pointer("caravan park").Place,
		PlaceID:          CellFixtures.Pointer("caravan park").Place.ID,
		PlaceSrc:         "meta",
		Cell:             CellFixtures.Pointer("caravan park"),
		CellID:           CellFixtures.Pointer("caravan park").ID,
		CellAccuracy:     0,
		PhotoAltitude:    3,
		PhotoLat:         48.519234,
		PhotoLng:         9.057997,
		PhotoCountry:     CellFixtures.Pointer("caravan park").Place.CountryCode(),
		PhotoYear:        2020,
		PhotoMonth:       11,
		PhotoDay:         11,
		PhotoIso:         0,
		PhotoExposure:    "",
		PhotoFocalLength: 0,
		PhotoFNumber:     0,
		PhotoQuality:     5,
		PhotoResolution:  0,
		Camera:           CameraFixtures.Pointer("apple-iphone-7"),
		CameraID:         CameraFixtures.Pointer("apple-iphone-7").ID,
		CameraSerial:     "",
		CameraSrc:        "",
		Lens:             LensFixtures.Pointer("lens-f-380"),
		LensID:           LensFixtures.Pointer("lens-f-380").ID,
		Details:          DetailsFixtures.Pointer("lake", 1000015),
		Keywords: []Keyword{
			KeywordFixtures.Get("cheescake'"),
		},
		Albums: []Album{},
		Files:  []File{},
		Labels: []PhotoLabel{
			LabelFixtures.PhotoLabel(1000032, "technology'", 20, "image"),
		},
		CreatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		EditedAt:   nil,
		CheckedAt:  &checkedTime,
		DeletedAt:  nil,
		PhotoColor: 14,
		PhotoStack: 0,
		PhotoFaces: 0,
	},
	"*photo37": {
		ID:               1000038,
		PhotoUID:         "ps6sg6byk7wrbk30",
		TakenAt:          time.Date(2020, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenAtLocal:     time.Date(2020, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenSrc:         SrcMeta,
		PhotoType:        "image",
		TypeSrc:          "",
		PhotoTitle:       "*area",
		TitleSrc:         SrcManual,
		PhotoDescription: "",
		DescriptionSrc:   "",
		PhotoPath:        "*2020/*vacation",
		PhotoName:        "*photo37",
		OriginalName:     "",
		PhotoFavorite:    false,
		PhotoPrivate:     false,
		PhotoScan:        false,
		PhotoPanorama:    false,
		TimeZone:         "America/Mexico_City",
		Place:            CellFixtures.Pointer("caravan park").Place,
		PlaceID:          CellFixtures.Pointer("caravan park").Place.ID,
		PlaceSrc:         "meta",
		Cell:             CellFixtures.Pointer("caravan park"),
		CellID:           CellFixtures.Pointer("caravan park").ID,
		CellAccuracy:     0,
		PhotoAltitude:    3,
		PhotoLat:         48.519234,
		PhotoLng:         9.057997,
		PhotoCountry:     CellFixtures.Pointer("caravan park").Place.CountryCode(),
		PhotoYear:        2020,
		PhotoMonth:       11,
		PhotoDay:         11,
		PhotoIso:         0,
		PhotoExposure:    "",
		PhotoFocalLength: 0,
		PhotoFNumber:     0,
		PhotoQuality:     5,
		PhotoResolution:  0,
		Camera:           CameraFixtures.Pointer("canon-eos-6d"),
		CameraID:         CameraFixtures.Pointer("canon-eos-6d").ID,
		CameraSerial:     "",
		CameraSrc:        "",
		Lens:             LensFixtures.Pointer("lens-f-380"),
		LensID:           LensFixtures.Pointer("lens-f-380").ID,
		Details:          DetailsFixtures.Pointer("lake", 1000015),
		Keywords: []Keyword{
			KeywordFixtures.Get("*rating"),
		},
		Albums: []Album{},
		Files:  []File{},
		Labels: []PhotoLabel{
			LabelFixtures.PhotoLabel(1000032, "*tea", 20, "image"),
		},
		CreatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		EditedAt:   nil,
		CheckedAt:  &checkedTime,
		DeletedAt:  nil,
		PhotoColor: 14,
		PhotoStack: 0,
		PhotoFaces: 0,
	},
	"photo*38": {
		ID:               1000039,
		PhotoUID:         "ps6sg6byk7wrbk31",
		TakenAt:          time.Date(2020, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenAtLocal:     time.Date(2020, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenSrc:         SrcMeta,
		PhotoType:        "image",
		TypeSrc:          "",
		PhotoTitle:       "farm*animal",
		TitleSrc:         SrcManual,
		PhotoDescription: "",
		DescriptionSrc:   "",
		PhotoPath:        "202*3/vac*ation",
		PhotoName:        "photo*38",
		OriginalName:     "",
		PhotoFavorite:    false,
		PhotoPrivate:     false,
		PhotoScan:        false,
		PhotoPanorama:    false,
		TimeZone:         "America/Mexico_City",
		Place:            CellFixtures.Pointer("caravan park").Place,
		PlaceID:          CellFixtures.Pointer("caravan park").Place.ID,
		PlaceSrc:         "meta",
		Cell:             CellFixtures.Pointer("caravan park"),
		CellID:           CellFixtures.Pointer("caravan park").ID,
		CellAccuracy:     0,
		PhotoAltitude:    3,
		PhotoLat:         48.519234,
		PhotoLng:         9.057997,
		PhotoCountry:     CellFixtures.Pointer("caravan park").Place.CountryCode(),
		PhotoYear:        2020,
		PhotoMonth:       11,
		PhotoDay:         11,
		PhotoIso:         0,
		PhotoExposure:    "",
		PhotoFocalLength: 0,
		PhotoFNumber:     0,
		PhotoQuality:     5,
		PhotoResolution:  0,
		Camera:           CameraFixtures.Pointer("canon-eos-6d"),
		CameraID:         CameraFixtures.Pointer("canon-eos-6d").ID,
		CameraSerial:     "",
		CameraSrc:        "",
		Lens:             LensFixtures.Pointer("lens-f-380"),
		LensID:           LensFixtures.Pointer("lens-f-380").ID,
		Details:          DetailsFixtures.Pointer("lake", 1000015),
		Keywords: []Keyword{
			KeywordFixtures.Get("three*four"),
		},
		Albums: []Album{},
		Files:  []File{},
		Labels: []PhotoLabel{
			LabelFixtures.PhotoLabel(1000032, "soup*menu", 20, "image"),
		},
		CreatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		EditedAt:   nil,
		CheckedAt:  &checkedTime,
		DeletedAt:  nil,
		PhotoColor: 14,
		PhotoStack: 0,
		PhotoFaces: 0,
	},
	"photo39*": {
		ID:               1000040,
		PhotoUID:         "ps6sg6byk7wrbk32",
		TakenAt:          time.Date(2020, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenAtLocal:     time.Date(2020, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenSrc:         SrcMeta,
		PhotoType:        "image",
		TypeSrc:          "",
		PhotoTitle:       "engine*",
		TitleSrc:         SrcManual,
		PhotoDescription: "",
		DescriptionSrc:   "",
		PhotoPath:        "2023*/vacatio*",
		PhotoName:        "photo39*",
		OriginalName:     "",
		PhotoFavorite:    false,
		PhotoPrivate:     false,
		PhotoScan:        false,
		PhotoPanorama:    false,
		TimeZone:         "America/Mexico_City",
		Place:            CellFixtures.Pointer("caravan park").Place,
		PlaceID:          CellFixtures.Pointer("caravan park").Place.ID,
		PlaceSrc:         "meta",
		Cell:             CellFixtures.Pointer("caravan park"),
		CellID:           CellFixtures.Pointer("caravan park").ID,
		CellAccuracy:     0,
		PhotoAltitude:    3,
		PhotoLat:         48.519234,
		PhotoLng:         9.057997,
		PhotoCountry:     CellFixtures.Pointer("caravan park").Place.CountryCode(),
		PhotoYear:        2020,
		PhotoMonth:       11,
		PhotoDay:         11,
		PhotoIso:         0,
		PhotoExposure:    "",
		PhotoFocalLength: 0,
		PhotoFNumber:     0,
		PhotoQuality:     5,
		PhotoResolution:  0,
		Camera:           CameraFixtures.Pointer("canon-eos-6d"),
		CameraID:         CameraFixtures.Pointer("canon-eos-6d").ID,
		CameraSerial:     "",
		CameraSrc:        "",
		Lens:             LensFixtures.Pointer("lens-f-380"),
		LensID:           LensFixtures.Pointer("lens-f-380").ID,
		Details:          DetailsFixtures.Pointer("lake", 1000015),
		Keywords: []Keyword{
			KeywordFixtures.Get("tree*"),
		},
		Albums: []Album{},
		Files:  []File{},
		Labels: []PhotoLabel{
			LabelFixtures.PhotoLabel(1000032, "proposal*", 20, "image"),
		},
		CreatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		EditedAt:   nil,
		CheckedAt:  &checkedTime,
		DeletedAt:  nil,
		PhotoColor: 14,
		PhotoStack: 0,
		PhotoFaces: 0,
	},
	"|photo40": {
		ID:               1000041,
		PhotoUID:         "ps6sg6byk7wrbk33",
		TakenAt:          time.Date(2020, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenAtLocal:     time.Date(2020, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenSrc:         SrcMeta,
		PhotoType:        "image",
		TypeSrc:          "",
		PhotoTitle:       "|football",
		TitleSrc:         SrcManual,
		PhotoDescription: "",
		DescriptionSrc:   "",
		PhotoPath:        "|202/|vacation",
		PhotoName:        "|photo40",
		OriginalName:     "",
		PhotoFavorite:    false,
		PhotoPrivate:     false,
		PhotoScan:        false,
		PhotoPanorama:    false,
		TimeZone:         "America/Mexico_City",
		Place:            CellFixtures.Pointer("caravan park").Place,
		PlaceID:          CellFixtures.Pointer("caravan park").Place.ID,
		PlaceSrc:         "meta",
		Cell:             CellFixtures.Pointer("caravan park"),
		CellID:           CellFixtures.Pointer("caravan park").ID,
		CellAccuracy:     0,
		PhotoAltitude:    3,
		PhotoLat:         48.519234,
		PhotoLng:         9.057997,
		PhotoCountry:     CellFixtures.Pointer("caravan park").Place.CountryCode(),
		PhotoYear:        2020,
		PhotoMonth:       11,
		PhotoDay:         11,
		PhotoIso:         0,
		PhotoExposure:    "",
		PhotoFocalLength: 0,
		PhotoFNumber:     0,
		PhotoQuality:     5,
		PhotoResolution:  0,
		Camera:           CameraFixtures.Pointer("canon-eos-6d"),
		CameraID:         CameraFixtures.Pointer("canon-eos-6d").ID,
		CameraSerial:     "",
		CameraSrc:        "",
		Lens:             LensFixtures.Pointer("lens-f-380"),
		LensID:           LensFixtures.Pointer("lens-f-380").ID,
		Details:          DetailsFixtures.Pointer("lake", 1000015),
		Keywords: []Keyword{
			KeywordFixtures.Get("|mystery"),
		},
		Albums: []Album{},
		Files:  []File{},
		Labels: []PhotoLabel{
			LabelFixtures.PhotoLabel(1000032, "|college", 20, "image"),
		},
		CreatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		EditedAt:   nil,
		CheckedAt:  &checkedTime,
		DeletedAt:  nil,
		PhotoColor: 14,
		PhotoStack: 0,
		PhotoFaces: 0,
	},
	"photo|41": {
		ID:               1000042,
		PhotoUID:         "ps6sg6byk7wrbk34",
		TakenAt:          time.Date(2020, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenAtLocal:     time.Date(2020, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenSrc:         SrcMeta,
		PhotoType:        "image",
		TypeSrc:          "",
		PhotoTitle:       "pain|ting",
		TitleSrc:         SrcManual,
		PhotoDescription: "",
		DescriptionSrc:   "",
		PhotoPath:        "20|22/vacat|ion",
		PhotoName:        "photo|41",
		OriginalName:     "",
		PhotoFavorite:    false,
		PhotoPrivate:     false,
		PhotoScan:        false,
		PhotoPanorama:    false,
		TimeZone:         "America/Mexico_City",
		Place:            CellFixtures.Pointer("caravan park").Place,
		PlaceID:          CellFixtures.Pointer("caravan park").Place.ID,
		PlaceSrc:         "meta",
		Cell:             CellFixtures.Pointer("caravan park"),
		CellID:           CellFixtures.Pointer("caravan park").ID,
		CellAccuracy:     0,
		PhotoAltitude:    3,
		PhotoLat:         48.519234,
		PhotoLng:         9.057997,
		PhotoCountry:     CellFixtures.Pointer("caravan park").Place.CountryCode(),
		PhotoYear:        2020,
		PhotoMonth:       11,
		PhotoDay:         11,
		PhotoIso:         0,
		PhotoExposure:    "",
		PhotoFocalLength: 0,
		PhotoFNumber:     0,
		PhotoQuality:     5,
		PhotoResolution:  0,
		Camera:           CameraFixtures.Pointer("canon-eos-6d"),
		CameraID:         CameraFixtures.Pointer("canon-eos-6d").ID,
		CameraSerial:     "",
		CameraSrc:        "",
		Lens:             LensFixtures.Pointer("lens-f-380"),
		LensID:           LensFixtures.Pointer("lens-f-380").ID,
		Details:          DetailsFixtures.Pointer("lake", 1000015),
		Keywords: []Keyword{
			KeywordFixtures.Get("run|stay"),
		},
		Albums: []Album{},
		Files:  []File{},
		Labels: []PhotoLabel{
			LabelFixtures.PhotoLabel(1000032, "potato|couch", 20, "image"),
		},
		CreatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		EditedAt:   nil,
		CheckedAt:  &checkedTime,
		DeletedAt:  nil,
		PhotoColor: 14,
		PhotoStack: 0,
		PhotoFaces: 0,
	},
	"photo42|": {
		ID:               1000043,
		PhotoUID:         "ps6sg6byk7wrbk35",
		TakenAt:          time.Date(2020, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenAtLocal:     time.Date(2020, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenSrc:         SrcMeta,
		PhotoType:        "image",
		TypeSrc:          "",
		PhotoTitle:       "supermarket|",
		TitleSrc:         SrcManual,
		PhotoDescription: "",
		DescriptionSrc:   "",
		PhotoPath:        "2022|/vacation|",
		PhotoName:        "photo42|",
		OriginalName:     "",
		PhotoFavorite:    false,
		PhotoPrivate:     false,
		PhotoScan:        false,
		PhotoPanorama:    false,
		TimeZone:         "America/Mexico_City",
		Place:            CellFixtures.Pointer("caravan park").Place,
		PlaceID:          CellFixtures.Pointer("caravan park").Place.ID,
		PlaceSrc:         "meta",
		Cell:             CellFixtures.Pointer("caravan park"),
		CellID:           CellFixtures.Pointer("caravan park").ID,
		CellAccuracy:     0,
		PhotoAltitude:    3,
		PhotoLat:         48.519234,
		PhotoLng:         9.057997,
		PhotoCountry:     CellFixtures.Pointer("caravan park").Place.CountryCode(),
		PhotoYear:        2020,
		PhotoMonth:       11,
		PhotoDay:         11,
		PhotoIso:         0,
		PhotoExposure:    "",
		PhotoFocalLength: 0,
		PhotoFNumber:     0,
		PhotoQuality:     5,
		PhotoResolution:  0,
		Camera:           CameraFixtures.Pointer("canon-eos-6d"),
		CameraID:         CameraFixtures.Pointer("canon-eos-6d").ID,
		CameraSerial:     "",
		CameraSrc:        "",
		Lens:             LensFixtures.Pointer("lens-f-380"),
		LensID:           LensFixtures.Pointer("lens-f-380").ID,
		Details:          DetailsFixtures.Pointer("lake", 1000015),
		Keywords: []Keyword{
			KeywordFixtures.Get("pillow|"),
		},
		Albums: []Album{},
		Files:  []File{},
		Labels: []PhotoLabel{
			LabelFixtures.PhotoLabel(1000032, "mall|", 20, "image"),
		},
		CreatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		EditedAt:   nil,
		CheckedAt:  &checkedTime,
		DeletedAt:  nil,
		PhotoColor: 14,
		PhotoStack: 0,
		PhotoFaces: 0,
	},
	"43photo": {
		ID:               1000044,
		PhotoUID:         "ps6sg6byk7wrbk36",
		TakenAt:          time.Date(2020, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenAtLocal:     time.Date(2020, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenSrc:         SrcMeta,
		PhotoType:        "image",
		TypeSrc:          "",
		PhotoTitle:       "123community",
		TitleSrc:         SrcManual,
		PhotoDescription: "",
		DescriptionSrc:   "",
		PhotoPath:        "2000/holiday",
		PhotoName:        "43photo",
		OriginalName:     "",
		PhotoFavorite:    false,
		PhotoPrivate:     false,
		PhotoScan:        false,
		PhotoPanorama:    false,
		TimeZone:         "America/Mexico_City",
		Place:            CellFixtures.Pointer("caravan park").Place,
		PlaceID:          CellFixtures.Pointer("caravan park").Place.ID,
		PlaceSrc:         "meta",
		Cell:             CellFixtures.Pointer("caravan park"),
		CellID:           CellFixtures.Pointer("caravan park").ID,
		CellAccuracy:     0,
		PhotoAltitude:    3,
		PhotoLat:         48.519234,
		PhotoLng:         9.057997,
		PhotoCountry:     CellFixtures.Pointer("caravan park").Place.CountryCode(),
		PhotoYear:        2020,
		PhotoMonth:       11,
		PhotoDay:         11,
		PhotoIso:         0,
		PhotoExposure:    "",
		PhotoFocalLength: 0,
		PhotoFNumber:     0,
		PhotoQuality:     5,
		PhotoResolution:  0,
		Camera:           CameraFixtures.Pointer("canon-eos-6d"),
		CameraID:         CameraFixtures.Pointer("canon-eos-6d").ID,
		CameraSerial:     "",
		CameraSrc:        "",
		Lens:             LensFixtures.Pointer("lens-f-380"),
		LensID:           LensFixtures.Pointer("lens-f-380").ID,
		Details:          DetailsFixtures.Pointer("lake", 1000015),
		Keywords: []Keyword{
			KeywordFixtures.Get("1dish"),
		},
		Albums: []Album{},
		Files:  []File{},
		Labels: []PhotoLabel{
			LabelFixtures.PhotoLabel(1000032, "2020-world", 20, "image"),
		},
		CreatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		EditedAt:   nil,
		CheckedAt:  &checkedTime,
		DeletedAt:  nil,
		PhotoColor: 14,
		PhotoStack: 0,
		PhotoFaces: 0,
	},
	"pho44to": {
		ID:               1000045,
		PhotoUID:         "ps6sg6byk7wrbk37",
		TakenAt:          time.Date(2020, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenAtLocal:     time.Date(2020, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenSrc:         SrcMeta,
		PhotoType:        "image",
		TypeSrc:          "",
		PhotoTitle:       "cli44mate",
		TitleSrc:         SrcManual,
		PhotoDescription: "",
		DescriptionSrc:   "",
		PhotoPath:        "2000/02",
		PhotoName:        "pho44to",
		OriginalName:     "",
		PhotoFavorite:    false,
		PhotoPrivate:     false,
		PhotoScan:        false,
		PhotoPanorama:    false,
		TimeZone:         "America/Mexico_City",
		Place:            CellFixtures.Pointer("caravan park").Place,
		PlaceID:          CellFixtures.Pointer("caravan park").Place.ID,
		PlaceSrc:         "meta",
		Cell:             CellFixtures.Pointer("caravan park"),
		CellID:           CellFixtures.Pointer("caravan park").ID,
		CellAccuracy:     0,
		PhotoAltitude:    3,
		PhotoLat:         48.519234,
		PhotoLng:         9.057997,
		PhotoCountry:     CellFixtures.Pointer("caravan park").Place.CountryCode(),
		PhotoYear:        2020,
		PhotoMonth:       11,
		PhotoDay:         11,
		PhotoIso:         0,
		PhotoExposure:    "",
		PhotoFocalLength: 0,
		PhotoFNumber:     0,
		PhotoQuality:     5,
		PhotoResolution:  0,
		Camera:           CameraFixtures.Pointer("canon-eos-6d"),
		CameraID:         CameraFixtures.Pointer("canon-eos-6d").ID,
		CameraSerial:     "",
		CameraSrc:        "",
		Lens:             LensFixtures.Pointer("lens-f-380"),
		LensID:           LensFixtures.Pointer("lens-f-380").ID,
		Details:          DetailsFixtures.Pointer("lake", 1000015),
		Keywords: []Keyword{
			KeywordFixtures.Get("nothing4you"),
		},
		Albums: []Album{},
		Files:  []File{},
		Labels: []PhotoLabel{
			LabelFixtures.PhotoLabel(1000032, "sport-2021-event", 20, "image"),
		},
		CreatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		EditedAt:   nil,
		CheckedAt:  &checkedTime,
		DeletedAt:  nil,
		PhotoColor: 14,
		PhotoStack: 0,
		PhotoFaces: 0,
	},
	"photo45": {
		ID:               1000046,
		PhotoUID:         "ps6sg6byk7wrbk38",
		TakenAt:          time.Date(2020, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenAtLocal:     time.Date(2020, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenSrc:         SrcMeta,
		PhotoType:        "image",
		TypeSrc:          "",
		PhotoTitle:       "guest456",
		TitleSrc:         SrcManual,
		PhotoDescription: "",
		DescriptionSrc:   "",
		PhotoPath:        "2000/02",
		PhotoName:        "photo45",
		OriginalName:     "",
		PhotoFavorite:    false,
		PhotoPrivate:     false,
		PhotoScan:        false,
		PhotoPanorama:    false,
		TimeZone:         "America/Mexico_City",
		Place:            CellFixtures.Pointer("caravan park").Place,
		PlaceID:          CellFixtures.Pointer("caravan park").Place.ID,
		PlaceSrc:         "meta",
		Cell:             CellFixtures.Pointer("caravan park"),
		CellID:           CellFixtures.Pointer("caravan park").ID,
		CellAccuracy:     0,
		PhotoAltitude:    3,
		PhotoLat:         48.519234,
		PhotoLng:         9.057997,
		PhotoCountry:     CellFixtures.Pointer("caravan park").Place.CountryCode(),
		PhotoYear:        2020,
		PhotoMonth:       11,
		PhotoDay:         11,
		PhotoIso:         0,
		PhotoExposure:    "",
		PhotoFocalLength: 0,
		PhotoFNumber:     0,
		PhotoQuality:     5,
		PhotoResolution:  0,
		Camera:           CameraFixtures.Pointer("canon-eos-6d"),
		CameraID:         CameraFixtures.Pointer("canon-eos-6d").ID,
		CameraSerial:     "",
		CameraSrc:        "",
		Lens:             LensFixtures.Pointer("lens-f-380"),
		LensID:           LensFixtures.Pointer("lens-f-380").ID,
		Details:          DetailsFixtures.Pointer("lake", 1000015),
		Keywords: []Keyword{
			KeywordFixtures.Get("joyx2"),
		},
		Albums: []Album{},
		Files:  []File{},
		Labels: []PhotoLabel{
			LabelFixtures.PhotoLabel(1000032, "oven-3000", 20, "image"),
		},
		CreatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		EditedAt:   nil,
		CheckedAt:  &checkedTime,
		DeletedAt:  nil,
		PhotoColor: 14,
		PhotoStack: 0,
		PhotoFaces: 0,
	},
	"\"photo46": {
		ID:               1000047,
		PhotoUID:         "ps6sg6byk7wrbk39",
		TakenAt:          time.Date(2020, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenAtLocal:     time.Date(2020, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenSrc:         SrcMeta,
		PhotoType:        "image",
		TypeSrc:          "",
		PhotoTitle:       "\"member",
		TitleSrc:         SrcManual,
		PhotoDescription: "",
		DescriptionSrc:   "",
		PhotoPath:        "\"2000/\"02",
		PhotoName:        "\"photo46",
		OriginalName:     "",
		PhotoFavorite:    false,
		PhotoPrivate:     false,
		PhotoScan:        false,
		PhotoPanorama:    false,
		TimeZone:         "America/Mexico_City",
		Place:            CellFixtures.Pointer("caravan park").Place,
		PlaceID:          CellFixtures.Pointer("caravan park").Place.ID,
		PlaceSrc:         "meta",
		Cell:             CellFixtures.Pointer("caravan park"),
		CellID:           CellFixtures.Pointer("caravan park").ID,
		CellAccuracy:     0,
		PhotoAltitude:    3,
		PhotoLat:         48.519234,
		PhotoLng:         9.057997,
		PhotoCountry:     CellFixtures.Pointer("caravan park").Place.CountryCode(),
		PhotoYear:        2020,
		PhotoMonth:       11,
		PhotoDay:         11,
		PhotoIso:         0,
		PhotoExposure:    "",
		PhotoFocalLength: 0,
		PhotoFNumber:     0,
		PhotoQuality:     5,
		PhotoResolution:  0,
		Camera:           CameraFixtures.Pointer("canon-eos-6d"),
		CameraID:         CameraFixtures.Pointer("canon-eos-6d").ID,
		CameraSerial:     "",
		CameraSrc:        "",
		Lens:             LensFixtures.Pointer("lens-f-380"),
		LensID:           LensFixtures.Pointer("lens-f-380").ID,
		Details:          DetailsFixtures.Pointer("lake", 1000015),
		Keywords: []Keyword{
			KeywordFixtures.Get("\"electronics"),
		},
		Albums: []Album{},
		Files:  []File{},
		Labels: []PhotoLabel{
			LabelFixtures.PhotoLabel(1000032, "\"king", 20, "image"),
		},
		CreatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		EditedAt:   nil,
		CheckedAt:  &checkedTime,
		DeletedAt:  nil,
		PhotoColor: 14,
		PhotoStack: 0,
		PhotoFaces: 0,
	},
	"photo\"47": {
		ID:               1000048,
		PhotoUID:         "ps6sg6byk7wrbk40",
		TakenAt:          time.Date(2020, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenAtLocal:     time.Date(2020, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenSrc:         SrcMeta,
		PhotoType:        "image",
		TypeSrc:          "",
		PhotoTitle:       "sol\"ution",
		TitleSrc:         SrcManual,
		PhotoDescription: "",
		DescriptionSrc:   "",
		PhotoPath:        "20\"00/0\"2",
		PhotoName:        "photo\"47",
		OriginalName:     "",
		PhotoFavorite:    false,
		PhotoPrivate:     false,
		PhotoScan:        false,
		PhotoPanorama:    false,
		TimeZone:         "America/Mexico_City",
		Place:            CellFixtures.Pointer("caravan park").Place,
		PlaceID:          CellFixtures.Pointer("caravan park").Place.ID,
		PlaceSrc:         "meta",
		Cell:             CellFixtures.Pointer("caravan park"),
		CellID:           CellFixtures.Pointer("caravan park").ID,
		CellAccuracy:     0,
		PhotoAltitude:    3,
		PhotoLat:         48.519234,
		PhotoLng:         9.057997,
		PhotoCountry:     CellFixtures.Pointer("caravan park").Place.CountryCode(),
		PhotoYear:        2020,
		PhotoMonth:       11,
		PhotoDay:         11,
		PhotoIso:         0,
		PhotoExposure:    "",
		PhotoFocalLength: 0,
		PhotoFNumber:     0,
		PhotoQuality:     5,
		PhotoResolution:  0,
		Camera:           CameraFixtures.Pointer("canon-eos-6d"),
		CameraID:         CameraFixtures.Pointer("canon-eos-6d").ID,
		CameraSerial:     "",
		CameraSrc:        "",
		Lens:             LensFixtures.Pointer("lens-f-380"),
		LensID:           LensFixtures.Pointer("lens-f-380").ID,
		Details:          DetailsFixtures.Pointer("lake", 1000015),
		Keywords: []Keyword{
			KeywordFixtures.Get("sal\"mon"),
		},
		Albums: []Album{},
		Files:  []File{},
		Labels: []PhotoLabel{
			LabelFixtures.PhotoLabel(1000032, "town\"ship", 20, "image"),
		},
		CreatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		EditedAt:   nil,
		CheckedAt:  &checkedTime,
		DeletedAt:  nil,
		PhotoColor: 14,
		PhotoStack: 0,
		PhotoFaces: 0,
	},
	"photo48\"": {
		ID:               1000049,
		PhotoUID:         "ps6sg6byk7wrbk41",
		TakenAt:          time.Date(2020, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenAtLocal:     time.Date(2020, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenSrc:         SrcMeta,
		PhotoType:        "image",
		TypeSrc:          "",
		PhotoTitle:       "desk\"",
		TitleSrc:         SrcManual,
		PhotoDescription: "",
		DescriptionSrc:   "",
		PhotoPath:        "2000\"/02\"",
		PhotoName:        "photo48\"",
		OriginalName:     "",
		PhotoFavorite:    false,
		PhotoPrivate:     false,
		PhotoScan:        false,
		PhotoPanorama:    false,
		TimeZone:         "America/Mexico_City",
		Place:            CellFixtures.Pointer("caravan park").Place,
		PlaceID:          CellFixtures.Pointer("caravan park").Place.ID,
		PlaceSrc:         "meta",
		Cell:             CellFixtures.Pointer("caravan park"),
		CellID:           CellFixtures.Pointer("caravan park").ID,
		CellAccuracy:     0,
		PhotoAltitude:    3,
		PhotoLat:         48.519234,
		PhotoLng:         9.057997,
		PhotoCountry:     CellFixtures.Pointer("caravan park").Place.CountryCode(),
		PhotoYear:        2020,
		PhotoMonth:       11,
		PhotoDay:         11,
		PhotoIso:         0,
		PhotoExposure:    "",
		PhotoFocalLength: 0,
		PhotoFNumber:     0,
		PhotoQuality:     5,
		PhotoResolution:  0,
		Camera:           CameraFixtures.Pointer("canon-eos-6d"),
		CameraID:         CameraFixtures.Pointer("canon-eos-6d").ID,
		CameraSerial:     "",
		CameraSrc:        "",
		Lens:             LensFixtures.Pointer("lens-f-380"),
		LensID:           LensFixtures.Pointer("lens-f-380").ID,
		Details:          DetailsFixtures.Pointer("lake", 1000015),
		Keywords: []Keyword{
			KeywordFixtures.Get("fish\""),
		},
		Albums: []Album{},
		Files:  []File{},
		Labels: []PhotoLabel{
			LabelFixtures.PhotoLabel(1000032, "ladder\"", 20, "image"),
		},
		CreatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		EditedAt:   nil,
		CheckedAt:  &checkedTime,
		DeletedAt:  nil,
		PhotoColor: 14,
		PhotoStack: 0,
		PhotoFaces: 0,
	},
	" photo49": {
		ID:               1000050,
		PhotoUID:         "ps6sg6byk7wrbk42",
		TakenAt:          time.Date(2020, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenAtLocal:     time.Date(2020, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenSrc:         SrcMeta,
		PhotoType:        "image",
		TypeSrc:          "",
		PhotoTitle:       " chair",
		TitleSrc:         SrcManual,
		PhotoDescription: "",
		DescriptionSrc:   "",
		PhotoPath:        " 2000/ 02",
		PhotoName:        " photo49",
		OriginalName:     "",
		PhotoFavorite:    false,
		PhotoPrivate:     false,
		PhotoScan:        false,
		PhotoPanorama:    false,
		TimeZone:         "America/Mexico_City",
		Place:            CellFixtures.Pointer("caravan park").Place,
		PlaceID:          CellFixtures.Pointer("caravan park").Place.ID,
		PlaceSrc:         "meta",
		Cell:             CellFixtures.Pointer("caravan park"),
		CellID:           CellFixtures.Pointer("caravan park").ID,
		CellAccuracy:     0,
		PhotoAltitude:    3,
		PhotoLat:         48.519234,
		PhotoLng:         9.057997,
		PhotoCountry:     CellFixtures.Pointer("caravan park").Place.CountryCode(),
		PhotoYear:        2020,
		PhotoMonth:       11,
		PhotoDay:         11,
		PhotoIso:         0,
		PhotoExposure:    "",
		PhotoFocalLength: 0,
		PhotoFNumber:     0,
		PhotoQuality:     5,
		PhotoResolution:  0,
		Camera:           CameraFixtures.Pointer("canon-eos-6d"),
		CameraID:         CameraFixtures.Pointer("canon-eos-6d").ID,
		CameraSerial:     "",
		CameraSrc:        "",
		Lens:             LensFixtures.Pointer("lens-f-380"),
		LensID:           LensFixtures.Pointer("lens-f-380").ID,
		Details:          DetailsFixtures.Pointer("lake", 1000015),
		Keywords: []Keyword{
			KeywordFixtures.Get("fish\""),
		},
		Albums: []Album{},
		Files:  []File{},
		Labels: []PhotoLabel{
			LabelFixtures.PhotoLabel(1000032, "ladder\"", 20, "image"),
		},
		CreatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		EditedAt:   nil,
		CheckedAt:  &checkedTime,
		DeletedAt:  nil,
		PhotoColor: 14,
		PhotoStack: 0,
		PhotoFaces: 0,
	},
	"photo 50": {
		ID:               1000051,
		PhotoUID:         "ps6sg6byk7wrbk43",
		TakenAt:          time.Date(2020, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenAtLocal:     time.Date(2020, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenSrc:         SrcMeta,
		PhotoType:        "image",
		TypeSrc:          "",
		PhotoTitle:       "air craft",
		TitleSrc:         SrcManual,
		PhotoDescription: "",
		DescriptionSrc:   "",
		PhotoPath:        "20 00/ 0 2",
		PhotoName:        "photo 50",
		OriginalName:     "",
		PhotoFavorite:    false,
		PhotoPrivate:     false,
		PhotoScan:        false,
		PhotoPanorama:    false,
		TimeZone:         "America/Mexico_City",
		Place:            CellFixtures.Pointer("caravan park").Place,
		PlaceID:          CellFixtures.Pointer("caravan park").Place.ID,
		PlaceSrc:         "meta",
		Cell:             CellFixtures.Pointer("caravan park"),
		CellID:           CellFixtures.Pointer("caravan park").ID,
		CellAccuracy:     0,
		PhotoAltitude:    3,
		PhotoLat:         48.519234,
		PhotoLng:         9.057997,
		PhotoCountry:     CellFixtures.Pointer("caravan park").Place.CountryCode(),
		PhotoYear:        2020,
		PhotoMonth:       11,
		PhotoDay:         11,
		PhotoIso:         0,
		PhotoExposure:    "",
		PhotoFocalLength: 0,
		PhotoFNumber:     0,
		PhotoQuality:     5,
		PhotoResolution:  0,
		Camera:           CameraFixtures.Pointer("canon-eos-6d"),
		CameraID:         CameraFixtures.Pointer("canon-eos-6d").ID,
		CameraSerial:     "",
		CameraSrc:        "",
		Lens:             LensFixtures.Pointer("lens-f-380"),
		LensID:           LensFixtures.Pointer("lens-f-380").ID,
		Details:          DetailsFixtures.Pointer("lake", 1000015),
		Keywords: []Keyword{
			KeywordFixtures.Get("fish\""),
		},
		Albums: []Album{},
		Files:  []File{},
		Labels: []PhotoLabel{
			LabelFixtures.PhotoLabel(1000032, "ladder\"", 20, "image"),
		},
		CreatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		EditedAt:   nil,
		CheckedAt:  &checkedTime,
		DeletedAt:  nil,
		PhotoColor: 14,
		PhotoStack: 0,
		PhotoFaces: 0,
	},
	"photo51 ": {
		ID:               1000052,
		PhotoUID:         "ps6sg6byk7wrbk44",
		TakenAt:          time.Date(2020, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenAtLocal:     time.Date(2020, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenSrc:         SrcMeta,
		PhotoType:        "image",
		TypeSrc:          "",
		PhotoTitle:       "love ",
		TitleSrc:         SrcManual,
		PhotoDescription: "",
		DescriptionSrc:   "",
		PhotoPath:        "2000 /02 ",
		PhotoName:        "photo51 ",
		OriginalName:     "",
		PhotoFavorite:    false,
		PhotoPrivate:     false,
		PhotoScan:        false,
		PhotoPanorama:    false,
		TimeZone:         "America/Mexico_City",
		Place:            CellFixtures.Pointer("caravan park").Place,
		PlaceID:          CellFixtures.Pointer("caravan park").Place.ID,
		PlaceSrc:         "meta",
		Cell:             CellFixtures.Pointer("caravan park"),
		CellID:           CellFixtures.Pointer("caravan park").ID,
		CellAccuracy:     0,
		PhotoAltitude:    3,
		PhotoLat:         48.519234,
		PhotoLng:         9.057997,
		PhotoCountry:     CellFixtures.Pointer("caravan park").Place.CountryCode(),
		PhotoYear:        2020,
		PhotoMonth:       11,
		PhotoDay:         11,
		PhotoIso:         0,
		PhotoExposure:    "",
		PhotoFocalLength: 0,
		PhotoFNumber:     0,
		PhotoQuality:     5,
		PhotoResolution:  0,
		Camera:           CameraFixtures.Pointer("canon-eos-6d"),
		CameraID:         CameraFixtures.Pointer("canon-eos-6d").ID,
		CameraSerial:     "",
		CameraSrc:        "",
		Lens:             LensFixtures.Pointer("lens-f-380"),
		LensID:           LensFixtures.Pointer("lens-f-380").ID,
		Details:          DetailsFixtures.Pointer("lake", 1000015),
		Keywords: []Keyword{
			KeywordFixtures.Get("fish\""),
		},
		Albums: []Album{},
		Files:  []File{},
		Labels: []PhotoLabel{
			LabelFixtures.PhotoLabel(1000032, "ladder\"", 20, "image"),
		},
		CreatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:  time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		EditedAt:   nil,
		CheckedAt:  &checkedTime,
		DeletedAt:  nil,
		PhotoColor: 14,
		PhotoStack: 0,
		PhotoFaces: 0,
	},
	"photo52": {
		ID:               1000053,
		PhotoUID:         "ps6sg6byk7wrbk45",
		TakenAt:          time.Date(2020, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenAtLocal:     time.Date(2020, 11, 11, 9, 7, 18, 0, time.UTC),
		TakenSrc:         SrcMeta,
		PhotoType:        "animated",
		TypeSrc:          "",
		PhotoTitle:       "My pretty animated GIF",
		TitleSrc:         SrcManual,
		PhotoDescription: "",
		DescriptionSrc:   "",
		PhotoPath:        "2020/GIF",
		PhotoName:        "photo52",
		OriginalName:     "",
		PhotoFavorite:    false,
		PhotoPrivate:     false,
		PhotoScan:        false,
		PhotoPanorama:    false,
		TimeZone:         "America/Mexico_City",
		Place:            CellFixtures.Pointer("caravan park").Place,
		PlaceID:          CellFixtures.Pointer("caravan park").Place.ID,
		PlaceSrc:         "meta",
		Cell:             CellFixtures.Pointer("caravan park"),
		CellID:           CellFixtures.Pointer("caravan park").ID,
		CellAccuracy:     0,
		PhotoAltitude:    3,
		PhotoLat:         48.519234,
		PhotoLng:         9.057997,
		PhotoCountry:     CellFixtures.Pointer("caravan park").Place.CountryCode(),
		PhotoYear:        2020,
		PhotoMonth:       11,
		PhotoDay:         11,
		PhotoIso:         0,
		PhotoExposure:    "",
		PhotoFocalLength: 0,
		PhotoFNumber:     0,
		PhotoQuality:     5,
		PhotoResolution:  0,
		Camera:           CameraFixtures.Pointer("canon-eos-6d"),
		CameraID:         CameraFixtures.Pointer("canon-eos-6d").ID,
		CameraSerial:     "",
		CameraSrc:        "",
		Lens:             LensFixtures.Pointer("lens-f-380"),
		LensID:           LensFixtures.Pointer("lens-f-380").ID,
		Details:          DetailsFixtures.Pointer("lake", 1000015),
		Keywords:         []Keyword{},
		Albums:           []Album{},
		Files:            []File{},
		Labels:           []PhotoLabel{},
		CreatedAt:        time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		UpdatedAt:        time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC),
		EditedAt:         nil,
		CheckedAt:        &checkedTime,
		DeletedAt:        nil,
		PhotoColor:       14,
		PhotoStack:       0,
		PhotoFaces:       0,
	},
}
View Source
var PhotoKeywordFixtures = PhotoKeywordMap{
	"1": {
		PhotoID:   1000004,
		KeywordID: 1000000,
	},
	"2": {
		PhotoID:   1000001,
		KeywordID: 1000001,
	},
	"3": {
		PhotoID:   1000000,
		KeywordID: 1000000,
	},
	"4": {
		PhotoID:   1000003,
		KeywordID: 1000000,
	},
	"5": {
		PhotoID:   1000003,
		KeywordID: 1000003,
	},
	"6": {
		PhotoID:   1000023,
		KeywordID: 1000003,
	},
	"7": {
		PhotoID:   1000027,
		KeywordID: 1000004,
	},
	"8": {
		PhotoID:   1000030,
		KeywordID: 1000007,
	},
	"9": {
		PhotoID:   10000029,
		KeywordID: 10000005,
	},
	"10": {
		PhotoID:   1000031,
		KeywordID: 10000006,
	},
	"11": {
		PhotoID:   1000032,
		KeywordID: 10000008,
	},
	"12": {
		PhotoID:   1000033,
		KeywordID: 10000009,
	},
	"13": {
		PhotoID:   1000034,
		KeywordID: 10000010,
	},
	"14": {
		PhotoID:   1000035,
		KeywordID: 10000011,
	},
	"15": {
		PhotoID:   1000036,
		KeywordID: 10000012,
	},
	"16": {
		PhotoID:   1000037,
		KeywordID: 10000013,
	},
	"17": {
		PhotoID:   1000038,
		KeywordID: 10000014,
	},
	"18": {
		PhotoID:   1000039,
		KeywordID: 10000015,
	},
	"19": {
		PhotoID:   1000040,
		KeywordID: 10000016,
	},
	"20": {
		PhotoID:   1000041,
		KeywordID: 10000017,
	},
	"21": {
		PhotoID:   1000042,
		KeywordID: 10000018,
	},
	"22": {
		PhotoID:   1000043,
		KeywordID: 10000019,
	},
	"23": {
		PhotoID:   1000044,
		KeywordID: 10000020,
	},
	"24": {
		PhotoID:   1000045,
		KeywordID: 10000021,
	},
	"25": {
		PhotoID:   1000046,
		KeywordID: 10000022,
	},
	"26": {
		PhotoID:   1000047,
		KeywordID: 10000023,
	},
	"27": {
		PhotoID:   1000048,
		KeywordID: 10000024,
	},
	"28": {
		PhotoID:   1000049,
		KeywordID: 10000025,
	},
	"29": {
		PhotoID:   1000045,
		KeywordID: 10000018,
	},
	"30": {
		PhotoID:   1000045,
		KeywordID: 10000018,
	},
	"31": {
		PhotoID:   1000036,
		KeywordID: 10000015,
	},
	"32": {
		PhotoID:   1000036,
		KeywordID: 1000001,
	},
}
View Source
var PlaceFixtures = PlacesMap{
	"mexico": {
		ID:            "mx:VvfNBpFegSCr",
		PlaceLabel:    "Teotihuacán, State of Mexico, Mexico",
		PlaceCity:     "Teotihuacán",
		PlaceState:    "State of Mexico",
		PlaceCountry:  "mx",
		PlaceKeywords: "ancient, pyramid",
		PlaceFavorite: false,
		PhotoCount:    1,
		CreatedAt:     TimeStamp(),
		UpdatedAt:     TimeStamp(),
	},
	"zinkwazi": {
		ID:            "za:Rc1K7dTWRzBD",
		PlaceLabel:    "KwaDukuza, KwaZulu-Natal, South Africa",
		PlaceCity:     "KwaDukuza",
		PlaceState:    "KwaZulu-Natal",
		PlaceCountry:  "za",
		PlaceKeywords: "",
		PlaceFavorite: true,
		PhotoCount:    2,
		CreatedAt:     TimeStamp(),
		UpdatedAt:     TimeStamp(),
	},
	"holidaypark": {
		ID:            "de:HFqPHxa2Hsol",
		PlaceLabel:    "Neustadt an der Weinstraße, Rheinland-Pfalz, Germany",
		PlaceDistrict: "Hambach an der Weinstraße",
		PlaceCity:     "Neustadt an der Weinstraße",
		PlaceState:    "Rheinland-Pfalz",
		PlaceCountry:  "de",
		PlaceKeywords: "",
		PlaceFavorite: true,
		PhotoCount:    2,
		CreatedAt:     TimeStamp(),
		UpdatedAt:     TimeStamp(),
	},
	"emptyNameLongCity": {
		ID:            s2.TokenPrefix + "1ef744d1e281",
		PlaceLabel:    "labelEmptyNameLongCity",
		PlaceCity:     "longlonglonglonglongcity",
		PlaceState:    "Rheinland-Pfalz",
		PlaceCountry:  "de",
		PlaceKeywords: "",
		PlaceFavorite: true,
		PhotoCount:    2,
		CreatedAt:     TimeStamp(),
		UpdatedAt:     TimeStamp(),
	},
	"emptyNameShortCity": {
		ID:            s2.TokenPrefix + "1ef744d1e282",
		PlaceLabel:    "labelEmptyNameShortCity",
		PlaceCity:     "shortcity",
		PlaceState:    "Rheinland-Pfalz",
		PlaceCountry:  "de",
		PlaceKeywords: "",
		PlaceFavorite: true,
		PhotoCount:    2,
		CreatedAt:     TimeStamp(),
		UpdatedAt:     TimeStamp(),
	},
	"veryLongLocName": {
		ID:            s2.TokenPrefix + "1ef744d1e283",
		PlaceLabel:    "labelVeryLongLocName",
		PlaceCity:     "Mainz",
		PlaceState:    "Rheinland-Pfalz",
		PlaceCountry:  "de",
		PlaceKeywords: "",
		PlaceFavorite: true,
		PhotoCount:    2,
		CreatedAt:     TimeStamp(),
		UpdatedAt:     TimeStamp(),
	},
	"mediumLongLocName": {
		ID:            s2.TokenPrefix + "1ef744d1e284",
		PlaceLabel:    "labelMediumLongLocName",
		PlaceCity:     "New york",
		PlaceState:    "New york",
		PlaceCountry:  "us",
		PlaceKeywords: "",
		PlaceFavorite: true,
		PhotoCount:    2,
		CreatedAt:     TimeStamp(),
		UpdatedAt:     TimeStamp(),
	},
	"Germany": {
		ID:            s2.TokenPrefix + "1ef744d1e285",
		PlaceLabel:    "Germany",
		PlaceCity:     "",
		PlaceState:    "",
		PlaceCountry:  "de",
		PlaceKeywords: "",
		PlaceFavorite: false,
		PhotoCount:    1,
		CreatedAt:     TimeStamp(),
		UpdatedAt:     TimeStamp(),
	},
}
View Source
var PreviewToken = NewStringMap(Strings{})
View Source
var QualityBlacklist = map[string]bool{
	"screenshot":  true,
	"screenshots": true,
	"info":        true,
}
View Source
var ReactionFixtures = ReactionMap{
	"SubjectJohnLike": Reaction{
		UID:       SubjectFixtures.Get("john-doe").SubjUID,
		UserUID:   UserFixtures.Get("alice").UserUID,
		Reaction:  react.Like.String(),
		Reacted:   1,
		ReactedAt: TimePointer(),
	},
	"PhotoAliceLove": Reaction{
		UID:       PhotoFixtures.Get("Photo01").PhotoUID,
		UserUID:   UserFixtures.Pointer("alice").UserUID,
		Reaction:  react.Love.String(),
		Reacted:   3,
		ReactedAt: TimePointer(),
	},
	"PhotoBobLove": Reaction{
		UID:       PhotoFixtures.Get("Photo01").PhotoUID,
		UserUID:   UserFixtures.Pointer("bob").UserUID,
		Reaction:  react.Love.String(),
		Reacted:   1,
		ReactedAt: TimePointer(),
	},
}
View Source
var ServiceFixtureWebdavDummy = ServiceFixtures["dummy-webdav"]
View Source
var ServiceFixtureWebdavDummy2 = ServiceFixtures["dummy-webdav2"]
View Source
var ServiceFixtures = ServiceMap{
	"dummy-webdav": {
		ID:            1000000,
		AccName:       "Test Account",
		AccOwner:      "",
		AccURL:        "http://dummy-webdav/",
		AccType:       "webdav",
		AccKey:        "",
		AccUser:       "admin",
		AccPass:       "photoprism",
		AccError:      "",
		AccErrors:     0,
		AccShare:      true,
		AccSync:       true,
		RetryLimit:    3,
		SharePath:     "/Photos",
		ShareSize:     "",
		ShareExpires:  1,
		SyncPath:      "/Photos",
		SyncStatus:    "refresh",
		SyncInterval:  3600,
		SyncDate:      sql.NullTime{Time: TimeStamp()},
		SyncUpload:    true,
		SyncDownload:  true,
		SyncFilenames: true,
		SyncRaw:       true,
		CreatedAt:     TimeStamp(),
		UpdatedAt:     TimeStamp(),
		DeletedAt:     nil,
	},
	"dummy-webdav2": {
		ID:            1000001,
		AccName:       "Test Account2",
		AccOwner:      "",
		AccURL:        "http://dummy-webdav/",
		AccType:       "webdav",
		AccKey:        "",
		AccUser:       "admin",
		AccPass:       "photoprism",
		AccError:      "",
		AccErrors:     0,
		AccShare:      false,
		AccSync:       false,
		RetryLimit:    3,
		SharePath:     "/Photos",
		ShareSize:     "",
		ShareExpires:  0,
		SyncPath:      "/Photos",
		SyncStatus:    "refresh",
		SyncInterval:  3600,
		SyncDate:      sql.NullTime{Time: TimeStamp()},
		SyncUpload:    true,
		SyncDownload:  true,
		SyncFilenames: true,
		SyncRaw:       true,
		CreatedAt:     TimeStamp(),
		UpdatedAt:     TimeStamp(),
		DeletedAt:     nil,
	},
}
View Source
var SessionCacheDuration = 15 * time.Minute

SessionCacheDuration specifies how long sessions are cached.

View Source
var SessionFixtures = SessionMap{
	"alice": {

		ID:          rnd.SessionID("69be27ac5ca305b394046a83f6fda18167ca3d3f2dbe7ac0"),
		RefID:       "sessxkkcabcd",
		SessTimeout: unix.Day * 3,
		SessExpires: unix.Now() + unix.Week,
		GrantType:   authn.GrantPassword.String(),

		UserUID:  UserFixtures.Pointer("alice").UserUID,
		UserName: UserFixtures.Pointer("alice").UserName,
		// contains filtered or unexported fields
	},
	"alice_token": {

		ID:           rnd.SessionID("bb8658e779403ae524a188712470060f050054324a8b104e"),
		RefID:        "sess34q3hael",
		SessTimeout:  -1,
		SessExpires:  unix.Now() + unix.Day,
		AuthScope:    clean.Scope("*"),
		AuthProvider: authn.ProviderAccessToken.String(),
		AuthMethod:   authn.MethodDefault.String(),
		GrantType:    authn.GrantCLI.String(),
		ClientName:   "alice_token",
		LastActive:   -1,

		UserUID:  UserFixtures.Pointer("alice").UserUID,
		UserName: UserFixtures.Pointer("alice").UserName,
		// contains filtered or unexported fields
	},
	"alice_token_personal": {

		ID:           rnd.SessionID("DIbS8T-uyGMe1-R3fmTv-vVaR35"),
		RefID:        "sess6ey1ykya",
		SessTimeout:  -1,
		SessExpires:  unix.Now() + unix.Day,
		AuthScope:    clean.Scope("*"),
		AuthProvider: authn.ProviderAccessToken.String(),
		AuthMethod:   authn.MethodDefault.String(),
		GrantType:    authn.GrantPassword.String(),
		ClientName:   "alice_token_personal",
		LastActive:   -1,

		UserUID:  UserFixtures.Pointer("alice").UserUID,
		UserName: UserFixtures.Pointer("alice").UserName,
		// contains filtered or unexported fields
	},
	"alice_token_webdav": {

		ID:           rnd.SessionID("5d0rGx-EvsDnV-DcKtYY-HT1aWL"),
		RefID:        "sesshjtgx8qt",
		SessTimeout:  -1,
		SessExpires:  unix.Now() + unix.Day,
		AuthScope:    clean.Scope("webdav"),
		AuthProvider: authn.ProviderAccessToken.String(),
		AuthMethod:   authn.MethodDefault.String(),
		GrantType:    authn.GrantPassword.String(),
		ClientName:   "alice_token_webdav",
		LastActive:   -1,

		UserUID:  UserFixtures.Pointer("alice").UserUID,
		UserName: UserFixtures.Pointer("alice").UserName,
		// contains filtered or unexported fields
	},
	"alice_token_scope": {

		ID:           rnd.SessionID("778f0f7d80579a072836c65b786145d6e0127505194cc51e"),
		RefID:        "sessjr0ge18d",
		SessTimeout:  0,
		SessExpires:  unix.Now() + unix.Day,
		AuthScope:    clean.Scope("metrics photos albums videos"),
		AuthProvider: authn.ProviderAccessToken.String(),
		AuthMethod:   authn.MethodDefault.String(),
		GrantType:    authn.GrantPassword.String(),
		ClientName:   "alice_token_scope",

		UserUID:       UserFixtures.Pointer("alice").UserUID,
		UserName:      UserFixtures.Pointer("alice").UserName,
		PreviewToken:  "cdd3r0lr",
		DownloadToken: "64ydcbom",
		// contains filtered or unexported fields
	},
	"bob": {

		ID:          rnd.SessionID("69be27ac5ca305b394046a83f6fda18167ca3d3f2dbe7ac1"),
		RefID:       "sessxkkcabce",
		SessTimeout: unix.Day * 3,
		SessExpires: unix.Now() + unix.Week,
		GrantType:   authn.GrantPassword.String(),

		UserUID:  UserFixtures.Pointer("bob").UserUID,
		UserName: UserFixtures.Pointer("bob").UserName,
		// contains filtered or unexported fields
	},
	"unauthorized": {

		ID:          rnd.SessionID("69be27ac5ca305b394046a83f6fda18167ca3d3f2dbe7ac2"),
		RefID:       "sessxkkcabcf",
		SessTimeout: unix.Day * 3,
		SessExpires: unix.Now() + unix.Week,
		GrantType:   authn.GrantImplicit.String(),

		UserUID:  UserFixtures.Pointer("unauthorized").UserUID,
		UserName: UserFixtures.Pointer("unauthorized").UserName,
		// contains filtered or unexported fields
	},
	"visitor": {

		ID:          rnd.SessionID("69be27ac5ca305b394046a83f6fda18167ca3d3f2dbe7ac3"),
		RefID:       "sessxkkcabcg",
		SessTimeout: unix.Day * 3,
		SessExpires: unix.Now() + unix.Week,

		UserUID:   Visitor.UserUID,
		UserName:  Visitor.UserName,
		GrantType: authn.GrantShareToken.String(),
		DataJSON:  []byte(`{"tokens":["1jxf3jfn2k"],"shares":["as6sg6bxpogaaba8"]}`),
		// contains filtered or unexported fields
	},
	"visitor_token_metrics": {

		ID:           rnd.SessionID("4ebe1048a7384e1e6af2930b5b6f29795ffab691df47a488"),
		RefID:        "sessaae5cxun",
		SessTimeout:  0,
		SessExpires:  unix.Now() + unix.Week,
		AuthScope:    clean.Scope("metrics"),
		AuthProvider: authn.ProviderAccessToken.String(),
		AuthMethod:   authn.MethodDefault.String(),
		GrantType:    authn.GrantShareToken.String(),
		ClientName:   "visitor_token_metrics",

		UserUID:  Visitor.UserUID,
		UserName: Visitor.UserName,
		// contains filtered or unexported fields
	},
	"friend": {

		ID:          rnd.SessionID("69be27ac5ca305b394046a83f6fda18167ca3d3f2dbe7ac4"),
		RefID:       "sessxkkcabch",
		SessTimeout: unix.Day * 3,
		SessExpires: unix.Now() + unix.Week,

		UserUID:  UserFixtures.Pointer("friend").UserUID,
		UserName: UserFixtures.Pointer("friend").UserName,
		// contains filtered or unexported fields
	},
	"client_metrics": {

		ID:           rnd.SessionID("9d8b8801ffa23eb52e08ca7766283799ddfd8dd368212345"),
		RefID:        "sessgh612345",
		SessTimeout:  0,
		SessExpires:  unix.Now() + unix.Week,
		AuthScope:    clean.Scope("metrics"),
		AuthProvider: authn.ProviderClient.String(),
		AuthMethod:   authn.MethodOAuth2.String(),
		GrantType:    authn.GrantClientCredentials.String(),
		ClientUID:    ClientFixtures.Get("metrics").ClientUID,
		ClientName:   ClientFixtures.Get("metrics").ClientName,

		UserUID:       "",
		UserName:      "",
		PreviewToken:  "py212345",
		DownloadToken: "vgl12345",
		// contains filtered or unexported fields
	},
	"token_metrics": {

		ID:           rnd.SessionID("9d8b8801ffa23eb52e08ca7766283799ddfd8dd368208a9b"),
		RefID:        "sessgh6gjuo1",
		SessTimeout:  0,
		SessExpires:  unix.Now() + unix.Week,
		AuthScope:    clean.Scope("metrics"),
		AuthProvider: authn.ProviderAccessToken.String(),
		AuthMethod:   authn.MethodDefault.String(),
		GrantType:    authn.GrantCLI.String(),
		ClientName:   "token_metrics",

		UserUID:       "",
		UserName:      "",
		PreviewToken:  "py2xrgr3",
		DownloadToken: "vgln2ffb",
		// contains filtered or unexported fields
	},
	"token_settings": {

		ID:           rnd.SessionID("3f9684f7d3dd3d5b84edd43289c7fb5ca32ee73bd0233237"),
		RefID:        "sessyugn54so",
		SessTimeout:  0,
		SessExpires:  unix.Now() + unix.Week,
		AuthScope:    clean.Scope("settings"),
		AuthProvider: authn.ProviderAccessToken.String(),
		AuthMethod:   authn.MethodDefault.String(),
		GrantType:    authn.GrantCLI.String(),
		ClientName:   "token_settings",

		UserUID:       "",
		UserName:      "",
		PreviewToken:  "py2xrgr3",
		DownloadToken: "vgln2ffb",
		// contains filtered or unexported fields
	},
	"client_analytics": {

		ID:           rnd.SessionID("9d8b8801ffa23eb52e08ca7766283799ddfd8dd368212123"),
		RefID:        "sessgh6123yt",
		SessTimeout:  0,
		SessExpires:  unix.Now() + unix.Week,
		AuthScope:    clean.Scope("statistics"),
		AuthProvider: authn.ProviderClient.String(),
		AuthMethod:   authn.MethodOAuth2.String(),
		GrantType:    authn.GrantCLI.String(),
		ClientUID:    ClientFixtures.Get("analytics").ClientUID,
		ClientName:   ClientFixtures.Get("analytics").ClientName,

		UserUID:       "",
		UserName:      "",
		PreviewToken:  "py2123yt",
		DownloadToken: "vgl123yt",
		// contains filtered or unexported fields
	},
}
View Source
var SrcPriority = Priorities{
	SrcAuto:     1,
	SrcDefault:  1,
	SrcEstimate: 2,
	SrcName:     4,
	SrcYaml:     8,
	SrcLDAP:     8,
	SrcLocation: 8,
	SrcMarker:   8,
	SrcImage:    8,
	SrcKeyword:  16,
	SrcMeta:     16,
	SrcXmp:      32,
	SrcManual:   64,
	SrcAdmin:    128,
}

SrcPriority maps source priorities.

View Source
var SubjNames = NewStringMap(nil)

SubjNames is a uid/name (reverse) lookup map

View Source
var SubjectFixtures = SubjectMap{
	"john-doe": Subject{
		SubjUID:      "js6sg6b1qekk9jx8",
		SubjSlug:     "john-doe",
		SubjName:     "John Doe",
		SubjType:     SubjPerson,
		SubjSrc:      SrcManual,
		SubjFavorite: true,
		SubjPrivate:  false,
		SubjExcluded: false,
		SubjBio:      "Subject Description",
		SubjNotes:    "Short Note",
		FileCount:    1,
		PhotoCount:   1,
		CreatedAt:    TimeStamp(),
		UpdatedAt:    TimeStamp(),
		DeletedAt:    nil,
	},
	"joe-biden": Subject{
		SubjUID:      "js6sg6b2h8njw0sx",
		SubjSlug:     "joe-biden",
		SubjName:     "Joe Biden",
		SubjType:     SubjPerson,
		SubjSrc:      SrcMarker,
		SubjFavorite: false,
		SubjPrivate:  false,
		SubjExcluded: false,
		SubjBio:      "",
		SubjNotes:    "",
		FileCount:    1,
		PhotoCount:   1,
		CreatedAt:    TimeStamp(),
		UpdatedAt:    TimeStamp(),
		DeletedAt:    nil,
	},
	"dangling": Subject{
		SubjUID:      "js6sg6b1h1njaaaa",
		SubjSlug:     "dangling-subject",
		SubjName:     "Dangling Subject",
		SubjAlias:    "Powell",
		SubjType:     SubjPerson,
		SubjSrc:      SrcMarker,
		SubjFavorite: false,
		SubjPrivate:  false,
		SubjExcluded: false,
		SubjBio:      "",
		SubjNotes:    "",
		Thumb:        "2cad9168fa6acc5c5c2965ddf6ec465ca42fd818",
		FileCount:    0,
		PhotoCount:   0,
		CreatedAt:    TimeStamp(),
		UpdatedAt:    TimeStamp(),
		DeletedAt:    nil,
	},
	"jane-doe": Subject{
		SubjUID:      "js6sg6b1h1njaaab",
		SubjSlug:     "jane-doe",
		SubjName:     "Jane Doe",
		SubjType:     SubjPerson,
		SubjSrc:      SrcMarker,
		SubjFavorite: false,
		SubjPrivate:  false,
		SubjExcluded: false,
		SubjBio:      "",
		SubjNotes:    "",
		FileCount:    3,
		PhotoCount:   2,
		CreatedAt:    TimeStamp().AddDate(0, 0, 1),
		UpdatedAt:    TimeStamp(),
		DeletedAt:    nil,
	},
	"actress-1": Subject{
		SubjUID:      "js6sg6b1h1njaaac",
		SubjSlug:     "actress-a",
		SubjName:     "Actress A",
		SubjType:     SubjPerson,
		SubjSrc:      SrcMarker,
		SubjFavorite: false,
		SubjPrivate:  false,
		SubjNotes:    "",
		CreatedAt:    TimeStamp(),
		UpdatedAt:    TimeStamp(),
		DeletedAt:    nil,
	},
	"actor-1": Subject{
		SubjUID:      "js6sg6b1h1njaaad",
		SubjSlug:     "actor-a",
		SubjName:     "Actor A",
		SubjType:     SubjPerson,
		SubjSrc:      SrcMarker,
		SubjFavorite: false,
		SubjPrivate:  false,
		SubjNotes:    "",
		CreatedAt:    TimeStamp(),
		UpdatedAt:    TimeStamp(),
		DeletedAt:    nil,
	},
}
View Source
var UnknownCamera = Camera{
	CameraSlug:  UnknownID,
	CameraName:  "Unknown",
	CameraMake:  "",
	CameraModel: "Unknown",
}
View Source
var UnknownCountry = Country{
	ID:          UnknownID,
	CountryName: maps.CountryNames[UnknownID],
	CountrySlug: UnknownID,
}

UnknownCountry is defined here to use it as a default

View Source
var UnknownFace = Face{
	ID:            UnknownID,
	FaceSrc:       SrcDefault,
	MatchedAt:     TimePointer(),
	SubjUID:       "",
	EmbeddingJSON: []byte{},
}

UnknownFace can be used as a placeholder for unknown faces.

View Source
var UnknownLens = Lens{
	LensSlug:  UnknownID,
	LensName:  "Unknown",
	LensMake:  "",
	LensModel: "Unknown",
}
View Source
var UnknownLocation = Cell{
	ID:           UnknownID,
	Place:        &UnknownPlace,
	PlaceID:      UnknownID,
	CellName:     "",
	CellStreet:   "",
	CellPostcode: "",
	CellCategory: "",
}

UnknownLocation is PhotoPrism's default location.

View Source
var UnknownMarker = NewMarker(File{FileUID: "-", FileHash: "-"}, crop.Area{}, "", SrcDefault, MarkerUnknown, 0, 0)

UnknownMarker can be used as a default for unknown markers.

View Source
var UnknownPlace = Place{
	ID:            UnknownID,
	PlaceLabel:    "Unknown",
	PlaceDistrict: "Unknown",
	PlaceCity:     "Unknown",
	PlaceState:    "Unknown",
	PlaceCountry:  UnknownID,
	PlaceKeywords: "",
	PlaceFavorite: false,
	PhotoCount:    -1,
}

UnknownPlace is PhotoPrism's default place.

View Source
var UnknownUser = User{
	ID:            -1,
	UserUID:       "u000000000000001",
	UserName:      "",
	AuthProvider:  authn.ProviderNone.String(),
	UserRole:      acl.RoleNone.String(),
	CanLogin:      false,
	WebDAV:        false,
	CanInvite:     false,
	DisplayName:   UnknownDisplayName,
	InviteToken:   "",
	PreviewToken:  "",
	DownloadToken: "",
}

UnknownUser is an anonymous, public user without own account.

View Source
var UpdateFaces = atomic.Bool{}
View Source
var UserFixtures = UserMap{
	"alice": {
		ID:           5,
		UserUID:      "uqxetse3cy5eo9z2",
		UserName:     "alice",
		DisplayName:  "Alice",
		UserEmail:    "alice@example.com",
		UserRole:     acl.RoleAdmin.String(),
		AuthProvider: authn.ProviderLocal.String(),
		AuthMethod:   authn.MethodUndefined.String(),
		SuperAdmin:   true,
		CanLogin:     true,
		WebDAV:       true,
		CanInvite:    true,
		InviteToken:  GenerateToken(),
		UserSettings: &UserSettings{
			UITheme:     "",
			MapsStyle:   "",
			MapsAnimate: -1,
			UILanguage:  "",
			UITimeZone:  "",
		},
		UserDetails: &UserDetails{
			NickName:   "Lys",
			UserGender: GenderFemale,
		},
	},
	"bob": {
		ID:           7,
		UserUID:      "uqxc08w3d0ej2283",
		UserName:     "bob",
		DisplayName:  "Robert Rich",
		UserEmail:    "bob@example.com",
		UserRole:     acl.RoleAdmin.String(),
		AuthProvider: authn.ProviderLocal.String(),
		AuthMethod:   authn.MethodDefault.String(),
		SuperAdmin:   false,
		CanLogin:     true,
		WebDAV:       true,
		CanInvite:    false,
		UserSettings: &UserSettings{
			UITheme:     "grayscale",
			MapsStyle:   "topographique",
			MapsAnimate: 6250,
			UILanguage:  "pt_BR",
			UITimeZone:  "",
		},
		UserDetails: &UserDetails{
			NickName:   "Bob",
			UserGender: GenderMale,
			BirthDay:   22,
			BirthMonth: 1,
			BirthYear:  1981,
		},
	},
	"friend": {
		ID:           8,
		UserUID:      "uqxqg7i1kperxvu7",
		UserName:     "friend",
		UserEmail:    "friend@example.com",
		UserRole:     acl.RoleAdmin.String(),
		AuthProvider: authn.ProviderLocal.String(),
		AuthMethod:   authn.MethodDefault.String(),
		SuperAdmin:   false,
		DisplayName:  "Guy Friend",
		CanLogin:     true,
		WebDAV:       false,
		CanInvite:    false,
		UserSettings: &UserSettings{
			UITheme:     "gemstone",
			MapsStyle:   "hybrid",
			MapsAnimate: 0,
			UILanguage:  "es_US",
			UITimeZone:  "America/Los_Angeles",
		},
		UserDetails: &UserDetails{
			UserGender: GenderOther,
		},
	},
	"deleted": {
		ID:           10000008,
		UserUID:      "uqxqg7i1kperxvu8",
		UserName:     "deleted",
		UserEmail:    "",
		DisplayName:  "Deleted User",
		SuperAdmin:   false,
		UserRole:     acl.RoleVisitor.String(),
		AuthProvider: authn.ProviderLocal.String(),
		AuthMethod:   authn.MethodDefault.String(),
		CanLogin:     false,
		WebDAV:       true,
		CanInvite:    false,
		DeletedAt:    TimePointer(),
		UserSettings: &UserSettings{
			UITheme:     "",
			MapsStyle:   "",
			MapsAnimate: 0,
			UILanguage:  "de",
			UITimeZone:  "",
		},
	},
	"unauthorized": {
		ID:           10000009,
		UserUID:      "uriku0138hqql4bz",
		UserName:     "jens.mander",
		UserEmail:    "jens.mander@microsoft.com",
		UserRole:     acl.RoleNone.String(),
		AuthProvider: authn.ProviderNone.String(),
		AuthMethod:   authn.MethodUndefined.String(),
		SuperAdmin:   false,
		DisplayName:  "Jens Mander",
		CanLogin:     true,
		WebDAV:       true,
		CanInvite:    false,
		UserSettings: &UserSettings{
			UITheme:     "",
			MapsStyle:   "",
			MapsAnimate: 0,
			UILanguage:  "de",
			UITimeZone:  "",
		},
		UserDetails: &UserDetails{
			UserGender: GenderMale,
		},
	},
	"fowler": {
		ID:           10000023,
		UserUID:      "urinotv3d6jedvlm",
		UserName:     "fowler",
		DisplayName:  "Martin Fowler",
		UserEmail:    "martin@fowler.org",
		UserRole:     acl.RoleAdmin.String(),
		AuthProvider: authn.ProviderLocal.String(),
		AuthMethod:   authn.MethodDefault.String(),
		SuperAdmin:   false,
		CanLogin:     true,
		WebDAV:       true,
		CanInvite:    true,
		InviteToken:  GenerateToken(),
		UserSettings: &UserSettings{
			UITheme:     "custom",
			MapsStyle:   "invalid",
			MapsAnimate: -1,
			UILanguage:  "en",
			UITimeZone:  "UTC",
		},
	},
	"jane": {
		ID:           10000024,
		UserUID:      "usamyuogp49vd4lh",
		UserName:     "jane",
		DisplayName:  "Jane Dow",
		UserEmail:    "qa@example.com",
		UserRole:     acl.RoleAdmin.String(),
		AuthProvider: authn.ProviderLocal.String(),
		AuthMethod:   authn.Method2FA.String(),
		SuperAdmin:   false,
		CanLogin:     true,
		WebDAV:       true,
		CanInvite:    true,
		InviteToken:  GenerateToken(),
		UserSettings: &UserSettings{
			UITheme:     "default",
			MapsStyle:   "hybrid",
			MapsAnimate: 6250,
			UILanguage:  "en",
			UITimeZone:  "UTC",
		},
		UserDetails: &UserDetails{
			NickName:   "Jane",
			UserGender: GenderFemale,
			BirthDay:   23,
			BirthMonth: 5,
			BirthYear:  2001,
		},
	},
}

UserFixtures specifies user fixtures for use in tests.

View Source
var UserShareFixtures = UserShareMap{
	"AliceAlbum": {
		UserUID:   "uqxetse3cy5eo9z2",
		ShareUID:  "as6sg6bxpogaaba9",
		ExpiresAt: nil,
		Comment:   "The quick brown fox jumps over the lazy dog.",
		Perm:      PermShare,
		RefID:     rnd.RefID(SharePrefix),
		CreatedAt: TimeStamp(),
		UpdatedAt: TimeStamp(),
	},
}

UserShareFixtures specifies fixtures for use in tests.

View Source
var UsernameLength = UsernameLengthDefault

UsernameLength specifies the minimum length of the username in characters.

View Source
var UsersPath = "users"

UsersPath is the relative path for user assets.

View Source
var ValidateTokens = true
View Source
var Visitor = User{
	ID:            -2,
	UserUID:       "u000000000000002",
	UserName:      "",
	AuthProvider:  authn.ProviderLink.String(),
	UserRole:      acl.RoleVisitor.String(),
	DisplayName:   VisitorDisplayName,
	CanLogin:      false,
	WebDAV:        false,
	CanInvite:     false,
	InviteToken:   "",
	PreviewToken:  "",
	DownloadToken: "",
}

Visitor is a user without own account e.g. for link sharing.

Functions

func AddDuplicate

func AddDuplicate(fileName, fileRoot, fileHash string, fileSize, modTime int64) error

AddDuplicate adds a duplicate.

func AddPhotoToAlbums

func AddPhotoToAlbums(uid string, albums []string) (err error)

AddPhotoToAlbums adds a photo UID to multiple albums and automatically creates them if needed.

func AddPhotoToUserAlbums

func AddPhotoToUserAlbums(photoUid string, albums []string, userUid string) (err error)

AddPhotoToUserAlbums adds a photo UID to multiple albums and automatically creates them as a user if needed.

func AddUser

func AddUser(frm form.User) error

AddUser creates a new user record and sets the password in a single transaction.

func AuthLocal

func AuthLocal(user *User, f form.Login, s *Session, c *gin.Context) (provider authn.ProviderType, method authn.MethodType, err error)

AuthLocal authenticates against the local user database with the specified username and password.

func AuthSession

func AuthSession(f form.Login, c *gin.Context) (sess *Session, user *User, err error)

AuthSession returns the client session that belongs to the auth token provided, or returns nil if it was not found.

func CacheSession

func CacheSession(s *Session, d time.Duration)

CacheSession adds a session to the cache if its ID is valid.

func Clip

func Clip(s string, maxLen int) string

Clip shortens a string to the given number of characters, and removes all leading and trailing white space.

func Count

func Count(m interface{}, keys []string, values []interface{}) int

Count returns the number of records for a given a model and key values.

func CreateAlbumFixtures

func CreateAlbumFixtures()

CreateAlbumFixtures inserts known entities into the database for testing.

func CreateCameraFixtures

func CreateCameraFixtures()

CreateCameraFixtures inserts known entities into the database for testing.

func CreateCategoryFixtures

func CreateCategoryFixtures()

CreateCategoryFixtures inserts known entities into the database for testing.

func CreateCellFixtures

func CreateCellFixtures()

CreateCellFixtures inserts known entities into the database for testing.

func CreateClientFixtures

func CreateClientFixtures()

CreateClientFixtures inserts known entities into the database for testing.

func CreateCountryFixtures

func CreateCountryFixtures()

CreateCountryFixtures inserts known entities into the database for testing.

func CreateDefaultFixtures

func CreateDefaultFixtures()

CreateDefaultFixtures inserts default fixtures for test and production.

func CreateDefaultUsers

func CreateDefaultUsers()

CreateDefaultUsers initializes the database with default user accounts.

func CreateFaceFixtures

func CreateFaceFixtures()

CreateFaceFixtures inserts known entities into the database for testing.

func CreateFileFixtures

func CreateFileFixtures()

CreateFileFixtures inserts known entities into the database for testing.

func CreateFileShareFixtures

func CreateFileShareFixtures()

CreateFileShareFixtures inserts known entities into the database for testing.

func CreateFileSyncFixtures

func CreateFileSyncFixtures()

CreateFileSyncFixtures inserts known entities into the database for testing.

func CreateFolderFixtures

func CreateFolderFixtures()

CreateFolderFixtures inserts known entities into the database for testing.

func CreateKeywordFixtures

func CreateKeywordFixtures()

CreateKeywordFixtures inserts known entities into the database for testing.

func CreateLabelFixtures

func CreateLabelFixtures()

CreateLabelFixtures inserts known entities into the database for testing.

func CreateLensFixtures

func CreateLensFixtures()

CreateLensFixtures inserts known entities into the database for testing.

func CreateLinkFixtures

func CreateLinkFixtures()

CreateLinkFixtures inserts known entities into the database for testing.

func CreateMarkerFixtures

func CreateMarkerFixtures()

CreateMarkerFixtures inserts known entities into the database for testing.

func CreatePasscodeFixtures

func CreatePasscodeFixtures()

CreatePasscodeFixtures inserts known entities into the database for testing.

func CreatePasswordFixtures

func CreatePasswordFixtures()

CreatePasswordFixtures inserts known entities into the database for testing.

func CreatePhotoAlbumFixtures

func CreatePhotoAlbumFixtures()

CreatePhotoAlbumFixtures inserts known entities into the database for testing.

func CreatePhotoFixtures

func CreatePhotoFixtures()

CreatePhotoFixtures inserts known entities into the database for testing.

func CreatePhotoKeywordFixtures

func CreatePhotoKeywordFixtures()

CreatePhotoKeywordFixtures inserts known entities into the database for testing.

func CreatePlaceFixtures

func CreatePlaceFixtures()

CreatePlaceFixtures inserts known entities into the database for testing.

func CreateReactionFixtures

func CreateReactionFixtures()

CreateReactionFixtures inserts known entities into the database for testing.

func CreateServiceFixtures

func CreateServiceFixtures()

CreateServiceFixtures inserts known entities into the database for testing.

func CreateSessionFixtures

func CreateSessionFixtures()

CreateSessionFixtures inserts known entities into the database for testing.

func CreateSubjectFixtures

func CreateSubjectFixtures()

CreateSubjectFixtures inserts known entities into the database for testing.

func CreateTestFixtures

func CreateTestFixtures()

CreateTestFixtures inserts all known entities into the database for testing.

func CreateUnknownCamera

func CreateUnknownCamera()

CreateUnknownCamera initializes the database with an unknown camera if not exists

func CreateUnknownCountry

func CreateUnknownCountry()

CreateUnknownCountry is used to initialize the database with the default country

func CreateUnknownLens

func CreateUnknownLens()

CreateUnknownLens initializes the database with an unknown lens if not exists

func CreateUnknownLocation

func CreateUnknownLocation()

CreateUnknownLocation creates the default location if not exists.

func CreateUnknownPlace

func CreateUnknownPlace()

CreateUnknownPlace creates the default place if not exists.

func CreateUserDetails

func CreateUserDetails(user *User) error

CreateUserDetails creates new user details or returns nil on error.

func CreateUserFixtures

func CreateUserFixtures()

CreateUserFixtures creates the user fixtures specified above

func CreateUserSettings

func CreateUserSettings(user *User) error

CreateUserSettings creates new user settings or returns nil on error.

func CreateUserShareFixtures

func CreateUserShareFixtures()

CreateUserShareFixtures creates the fixtures specified above.

func Db

func Db() *gorm.DB

Db returns the default *gorm.DB connection.

func DbDialect

func DbDialect() string

DbDialect returns the sql dialect name.

func DeleteChildSessions

func DeleteChildSessions(s *Session) (deleted int)

DeleteChildSessions deletes any other sessions that were authenticated with the specified session.

func DeleteClientSessions

func DeleteClientSessions(client *Client, authMethod authn.MethodType, limit int64) (deleted int)

DeleteClientSessions deletes client sessions above the specified limit.

func DeleteExpiredSessions

func DeleteExpiredSessions() (deleted int)

DeleteExpiredSessions deletes all expired sessions.

func DeleteFromSessionCache

func DeleteFromSessionCache(id string)

DeleteFromSessionCache deletes a session from the cache.

func DeleteOrphanFaces

func DeleteOrphanFaces() (count int, err error)

DeleteOrphanFaces finds and (soft) deletes all unused face clusters.

func DeleteOrphanPeople

func DeleteOrphanPeople() (count int, err error)

DeleteOrphanPeople finds and (soft) deletes all unused people.

func DeleteSession

func DeleteSession(s *Session) error

DeleteSession permanently deletes a session.

func DeleteShareLinks(shareUid string) error

DeleteShareLinks removes all links that match the shared UID.

func FindLegacyUser

func FindLegacyUser(find User) *legacy.User

FindLegacyUser returns the matching legacy user or nil if it was not found.

func FindLegacyUsers

func FindLegacyUsers(search string) legacy.Users

FindLegacyUsers finds registered legacy users.

func FlushAlbumCache

func FlushAlbumCache()

FlushAlbumCache resets the album cache.

func FlushCameraCache

func FlushCameraCache()

func FlushCountryCache

func FlushCountryCache()

func FlushLensCache

func FlushLensCache()

func FlushSessionCache

func FlushSessionCache()

FlushSessionCache resets the session cache.

func GenerateToken

func GenerateToken() string

GenerateToken returns a random string token.

func HasDbProvider

func HasDbProvider() bool

HasDbProvider returns true if a db provider exists.

func InitDb

func InitDb(opt migrate.Options)

InitDb creates database tables and inserts default fixtures as needed.

func InvalidDownloadToken

func InvalidDownloadToken(t string) bool

InvalidDownloadToken checks if the token is unknown.

func InvalidPreviewToken

func InvalidPreviewToken(t string) bool

InvalidPreviewToken checks if the preview token is unknown.

func IsDialect

func IsDialect(name string) bool

IsDialect returns true if the given sql dialect is used.

func Log

func Log(model, action string, err error)

Log logs the error if any and keeps quiet otherwise.

func MapKey

func MapKey(takenAt time.Time, cellId string) string

MapKey returns a key referencing time and location for indexing.

func PurgeDuplicate

func PurgeDuplicate(fileName, fileRoot string) error

PurgeDuplicate deletes a duplicate.

func ResetTestFixtures

func ResetTestFixtures()

ResetTestFixtures recreates database tables and test fixtures.

func SanitizeStringType

func SanitizeStringType(s string) string

SanitizeStringType omits invalid runes, ensures a maximum length of 32 characters, and returns the result.

func SanitizeStringTypeLower

func SanitizeStringTypeLower(s string) string

SanitizeStringTypeLower converts a type string to lowercase, omits invalid runes, and shortens it if needed.

func Save

func Save(m interface{}, keyNames ...string) (err error)

Save updates the record in the database or inserts a new record if it does not already exist.

func SavePhotoForm

func SavePhotoForm(model Photo, form form.Photo) error

SavePhotoForm saves a model in the database using form data.

func Seconds

func Seconds(s int) time.Duration

Seconds converts an int to a duration in seconds.

func SetDbProvider

func SetDbProvider(conn Gorm)

SetDbProvider sets the Gorm database connection provider.

func SrcString

func SrcString(src string) string

SrcString returns a source string for logging.

func TimePointer

func TimePointer() *time.Time

TimePointer returns a pointer to the current timestamp.

func TimeStamp

func TimeStamp() time.Time

TimeStamp returns the current timestamp in UTC rounded to seconds.

func ToASCII

func ToASCII(s string) string

ToASCII removes all non-ascii characters from a string and returns it.

func TypeString

func TypeString(entityType string) string

TypeString returns an entity type string for logging.

func UTC

func UTC() time.Time

UTC returns the current Coordinated Universal Time (UTC).

func UnscopedDb

func UnscopedDb() *gorm.DB

UnscopedDb returns an unscoped *gorm.DB connection that returns all records including deleted records.

func Update

func Update(m interface{}, keyNames ...string) (err error)

Update updates an existing record in the database.

func UpdateAlbum

func UpdateAlbum(albumUID string, values interface{}) (err error)

UpdateAlbum updates album attributes in the database.

func UpdateCounts

func UpdateCounts() (err error)

UpdateCounts updates precalculated photo and file counts.

func UpdateLabelCounts

func UpdateLabelCounts() (err error)

UpdateLabelCounts updates the label photo counts.

func UpdatePlacesCounts

func UpdatePlacesCounts() (err error)

UpdatePlacesCounts updates the places photo counts.

func UpdateSubjectCounts

func UpdateSubjectCounts() (err error)

UpdateSubjectCounts updates the subject file counts.

func ValidFaceCount

func ValidFaceCount(fileUid string) (c int)

ValidFaceCount counts the number of valid face markers for a file uid.

func Yesterday

func Yesterday() time.Time

Yesterday returns the time 24 hours ago.

Types

type Album

type Album struct {
	ID               uint        `gorm:"primary_key" json:"ID" yaml:"-"`
	AlbumUID         string      `gorm:"type:VARBINARY(42);unique_index;" json:"UID" yaml:"UID"`
	ParentUID        string      `gorm:"type:VARBINARY(42);default:'';" json:"ParentUID,omitempty" yaml:"ParentUID,omitempty"`
	AlbumSlug        string      `gorm:"type:VARBINARY(160);index;" json:"Slug" yaml:"Slug"`
	AlbumPath        string      `gorm:"type:VARCHAR(1024);index;" json:"Path,omitempty" yaml:"Path,omitempty"`
	AlbumType        string      `gorm:"type:VARBINARY(8);default:'album';" json:"Type" yaml:"Type,omitempty"`
	AlbumTitle       string      `gorm:"type:VARCHAR(160);index;" json:"Title" yaml:"Title"`
	AlbumLocation    string      `gorm:"type:VARCHAR(160);" json:"Location" yaml:"Location,omitempty"`
	AlbumCategory    string      `gorm:"type:VARCHAR(100);index;" json:"Category" yaml:"Category,omitempty"`
	AlbumCaption     string      `gorm:"type:VARCHAR(1024);" json:"Caption" yaml:"Caption,omitempty"`
	AlbumDescription string      `gorm:"type:VARCHAR(2048);" json:"Description" yaml:"Description,omitempty"`
	AlbumNotes       string      `gorm:"type:VARCHAR(1024);" json:"Notes" yaml:"Notes,omitempty"`
	AlbumFilter      string      `gorm:"type:VARBINARY(2048);" json:"Filter" yaml:"Filter,omitempty"`
	AlbumOrder       string      `gorm:"type:VARBINARY(32);" json:"Order" yaml:"Order,omitempty"`
	AlbumTemplate    string      `gorm:"type:VARBINARY(255);" json:"Template" yaml:"Template,omitempty"`
	AlbumState       string      `gorm:"type:VARCHAR(100);index;" json:"State" yaml:"State,omitempty"`
	AlbumCountry     string      `gorm:"type:VARBINARY(2);index:idx_albums_country_year_month;default:'zz';" json:"Country" yaml:"Country,omitempty"`
	AlbumYear        int         `gorm:"index:idx_albums_ymd;index:idx_albums_country_year_month;" json:"Year" yaml:"Year,omitempty"`
	AlbumMonth       int         `gorm:"index:idx_albums_ymd;index:idx_albums_country_year_month;" json:"Month" yaml:"Month,omitempty"`
	AlbumDay         int         `gorm:"index:idx_albums_ymd;" json:"Day" yaml:"Day,omitempty"`
	AlbumFavorite    bool        `json:"Favorite" yaml:"Favorite,omitempty"`
	AlbumPrivate     bool        `json:"Private" yaml:"Private,omitempty"`
	Thumb            string      `gorm:"type:VARBINARY(128);index;default:'';" json:"Thumb" yaml:"Thumb,omitempty"`
	ThumbSrc         string      `gorm:"type:VARBINARY(8);default:'';" json:"ThumbSrc,omitempty" yaml:"ThumbSrc,omitempty"`
	CreatedBy        string      `gorm:"type:VARBINARY(42);index" json:"CreatedBy,omitempty" yaml:"CreatedBy,omitempty"`
	CreatedAt        time.Time   `json:"CreatedAt" yaml:"CreatedAt,omitempty"`
	UpdatedAt        time.Time   `json:"UpdatedAt" yaml:"UpdatedAt,omitempty"`
	PublishedAt      *time.Time  `sql:"index" json:"PublishedAt,omitempty" yaml:"PublishedAt,omitempty"`
	DeletedAt        *time.Time  `sql:"index" json:"DeletedAt" yaml:"DeletedAt,omitempty"`
	Photos           PhotoAlbums `gorm:"foreignkey:AlbumUID;association_foreignkey:AlbumUID;" json:"-" yaml:"Photos,omitempty"`
}

Album represents a photo album

func CachedAlbumByUID

func CachedAlbumByUID(uid string) (m Album, err error)

CachedAlbumByUID returns an existing album or nil if not found.

func FindAlbum

func FindAlbum(find Album) *Album

FindAlbum retrieves the matching record from the database and updates the entity.

func FindAlbumByAttr

func FindAlbumByAttr(slugs, filters []string, albumType string) *Album

FindAlbumByAttr finds an album by filters and slugs, or returns nil.

func FindAlbumBySlug

func FindAlbumBySlug(albumSlug, albumType string) *Album

FindAlbumBySlug finds a matching album or returns nil.

func FindFolderAlbum

func FindFolderAlbum(albumPath string) *Album

FindFolderAlbum finds a matching folder album or returns nil.

func FindMonthAlbum

func FindMonthAlbum(year, month int) *Album

FindMonthAlbum finds a matching month album or returns nil.

func NewAlbum

func NewAlbum(albumTitle, albumType string) *Album

NewAlbum creates a new album of the given type.

func NewFolderAlbum

func NewFolderAlbum(albumTitle, albumPath, albumFilter string) *Album

NewFolderAlbum creates a new folder album.

func NewMomentsAlbum

func NewMomentsAlbum(albumTitle, albumSlug, albumFilter string) *Album

NewMomentsAlbum creates a new moment.

func NewMonthAlbum

func NewMonthAlbum(albumTitle, albumSlug string, year, month int) *Album

NewMonthAlbum creates a new month album.

func NewStateAlbum

func NewStateAlbum(albumTitle, albumSlug, albumFilter string) *Album

NewStateAlbum creates a new moment.

func NewUserAlbum

func NewUserAlbum(albumTitle, albumType, userUid string) *Album

NewUserAlbum creates a new album owned by a user.

func (*Album) AddPhotos

func (m *Album) AddPhotos(UIDs []string) (added PhotoAlbums)

AddPhotos adds photos to an existing album.

func (*Album) AfterDelete

func (m *Album) AfterDelete(tx *gorm.DB) (err error)

AfterDelete flushes the album cache.

func (*Album) AfterUpdate

func (m *Album) AfterUpdate(tx *gorm.DB) (err error)

AfterUpdate flushes the album cache.

func (*Album) BeforeCreate

func (m *Album) BeforeCreate(scope *gorm.Scope) error

BeforeCreate creates a random UID if needed before inserting a new row to the database.

func (*Album) Create

func (m *Album) Create() error

Create inserts a new row to the database.

func (*Album) Delete

func (m *Album) Delete() error

Delete marks the entity as deleted in the database.

func (*Album) DeletePermanently

func (m *Album) DeletePermanently() error

DeletePermanently permanently removes an album from the index.

func (*Album) Deleted

func (m *Album) Deleted() bool

Deleted tests if the entity is deleted.

func (*Album) Find

func (m *Album) Find() *Album

Find retrieves the matching record from the database and updates the entity.

func (*Album) HasID

func (m *Album) HasID() bool

HasID tests if the album has a valid id and uid.

func (*Album) IsDefault

func (m *Album) IsDefault() bool

IsDefault tests if the album is a regular album.

func (*Album) IsMoment

func (m *Album) IsMoment() bool

IsMoment tests if the album is of type moment.

func (*Album) IsState

func (m *Album) IsState() bool

IsState tests if the album is of type state.

func (m *Album) Links() Links

Links returns all share links for this entity.

func (*Album) LoadFromYaml

func (m *Album) LoadFromYaml(fileName string) error

LoadFromYaml photo data from a YAML file.

func (*Album) PublishCountChange

func (m *Album) PublishCountChange(n int)

PublishCountChange publishes an event with the added or removed number of albums.

func (*Album) RemovePhotos

func (m *Album) RemovePhotos(UIDs []string) (removed PhotoAlbums)

RemovePhotos removes photos from an album.

func (*Album) Restore

func (m *Album) Restore() error

Restore restores the entity in the database.

func (*Album) Save

func (m *Album) Save() error

Save updates the record in the database or inserts a new record if it does not already exist.

func (*Album) SaveAsYaml

func (m *Album) SaveAsYaml(fileName string) error

SaveAsYaml saves album data as YAML file.

func (*Album) SaveForm

func (m *Album) SaveForm(f form.Album) error

SaveForm updates the entity using form data and stores it in the database.

func (*Album) SetLocation

func (m *Album) SetLocation(location, state, country string) *Album

SetLocation sets a new album location.

func (*Album) SetTitle

func (m *Album) SetTitle(title string) *Album

SetTitle changes the album name.

func (*Album) String

func (m *Album) String() string

String returns the id or name as string.

func (Album) TableName

func (Album) TableName() string

TableName returns the entity table name.

func (*Album) Title

func (m *Album) Title() string

Title returns the album title.

func (*Album) Update

func (m *Album) Update(attr string, value interface{}) error

Update sets a new value for a database column.

func (*Album) UpdateFolder

func (m *Album) UpdateFolder(albumPath, albumFilter string) error

UpdateFolder updates the path, filter and slug for a folder album.

func (*Album) UpdateTitleAndLocation

func (m *Album) UpdateTitleAndLocation(title, location, state, country, slug string) error

UpdateTitleAndLocation updates title, location, and slug of generated albums if needed.

func (*Album) UpdateTitleAndState

func (m *Album) UpdateTitleAndState(title, slug, stateName, countryCode string) error

UpdateTitleAndState updates the album location.

func (*Album) Updates

func (m *Album) Updates(values interface{}) error

Updates multiple columns in the database.

func (*Album) Yaml

func (m *Album) Yaml() (out []byte, err error)

Yaml returns album data as YAML string.

func (*Album) YamlFileName

func (m *Album) YamlFileName(albumsPath string) string

YamlFileName returns the YAML file name.

func (*Album) ZipName

func (m *Album) ZipName() string

ZipName returns the zip download filename.

type AlbumMap

type AlbumMap map[string]Album

func (AlbumMap) Get

func (m AlbumMap) Get(name string) Album

func (AlbumMap) Pointer

func (m AlbumMap) Pointer(name string) *Album

type AlbumUser

type AlbumUser struct {
	UID     string `gorm:"type:VARBINARY(42);primary_key;auto_increment:false" json:"UID" yaml:"UID"`
	UserUID string `gorm:"type:VARBINARY(42);primary_key;auto_increment:false;index" json:"UserUID,omitempty" yaml:"UserUID,omitempty"`
	TeamUID string `gorm:"type:VARBINARY(42);index" json:"TeamUID,omitempty" yaml:"TeamUID,omitempty"`
	Perm    uint   `json:"Perm,omitempty" yaml:"Perm,omitempty"`
}

AlbumUser represents the user and group ownership of an Album and the corresponding permissions.

func FirstOrCreateAlbumUser

func FirstOrCreateAlbumUser(m *AlbumUser) *AlbumUser

FirstOrCreateAlbumUser returns the existing record or inserts a new record if it does not already exist.

func NewAlbumUser

func NewAlbumUser(uid, userUid, teamUid string, perm uint) *AlbumUser

NewAlbumUser creates a new entity model.

func (*AlbumUser) Create

func (m *AlbumUser) Create() error

Create inserts a new record into the database.

func (*AlbumUser) Save

func (m *AlbumUser) Save() error

Save updates the record in the database or inserts a new record if it does not already exist.

func (AlbumUser) TableName

func (AlbumUser) TableName() string

TableName returns the database table name.

type Albums

type Albums []Album

type Camera

type Camera struct {
	ID                uint       `gorm:"primary_key" json:"ID" yaml:"ID"`
	CameraSlug        string     `gorm:"type:VARBINARY(160);unique_index;" json:"Slug" yaml:"-"`
	CameraName        string     `gorm:"type:VARCHAR(160);" json:"Name" yaml:"Name"`
	CameraMake        string     `gorm:"type:VARCHAR(160);" json:"Make" yaml:"Make,omitempty"`
	CameraModel       string     `gorm:"type:VARCHAR(160);" json:"Model" yaml:"Model,omitempty"`
	CameraType        string     `gorm:"type:VARCHAR(100);" json:"Type,omitempty" yaml:"Type,omitempty"`
	CameraDescription string     `gorm:"type:VARCHAR(2048);" json:"Description,omitempty" yaml:"Description,omitempty"`
	CameraNotes       string     `gorm:"type:VARCHAR(1024);" json:"Notes,omitempty" yaml:"Notes,omitempty"`
	CreatedAt         time.Time  `json:"-" yaml:"-"`
	UpdatedAt         time.Time  `json:"-" yaml:"-"`
	DeletedAt         *time.Time `sql:"index" json:"-" yaml:"-"`
}

Camera model and make (as extracted from UpdateExif metadata)

func FirstOrCreateCamera

func FirstOrCreateCamera(m *Camera) *Camera

FirstOrCreateCamera returns the existing row, inserts a new row or nil in case of errors.

func NewCamera

func NewCamera(makeName string, modelName string) *Camera

NewCamera creates a new camera entity from make and model names.

func (*Camera) Create

func (m *Camera) Create() error

Create inserts a new row to the database.

func (*Camera) Scanner

func (m *Camera) Scanner() bool

Scanner checks whether the model appears to be a scanner.

func (*Camera) String

func (m *Camera) String() string

String returns an identifier that can be used in logs.

func (Camera) TableName

func (Camera) TableName() string

TableName returns the entity table name.

func (*Camera) Unknown

func (m *Camera) Unknown() bool

Unknown returns true if the camera is not a known make or model.

type CameraMap

type CameraMap map[string]Camera

func (CameraMap) Get

func (m CameraMap) Get(name string) Camera

func (CameraMap) Pointer

func (m CameraMap) Pointer(name string) *Camera

type Cameras

type Cameras []Camera

Cameras represents a list of cameras.

type Category

type Category struct {
	LabelID    uint `gorm:"primary_key;auto_increment:false"`
	CategoryID uint `gorm:"primary_key;auto_increment:false"`
	Label      *Label
	Category   *Label
}

Category of labels regroups labels with the same or a similar meaning using a main/root label

func (Category) TableName

func (Category) TableName() string

TableName returns the entity table name.

type Cell

type Cell struct {
	ID           string    `gorm:"type:VARBINARY(42);primary_key;auto_increment:false;" json:"ID" yaml:"ID"`
	CellName     string    `gorm:"type:VARCHAR(200);" json:"Name" yaml:"Name,omitempty"`
	CellStreet   string    `gorm:"type:VARCHAR(100);" json:"Street" yaml:"Street,omitempty"`
	CellPostcode string    `gorm:"type:VARCHAR(50);" json:"Postcode" yaml:"Postcode,omitempty"`
	CellCategory string    `gorm:"type:VARCHAR(50);" json:"Category" yaml:"Category,omitempty"`
	PlaceID      string    `gorm:"type:VARBINARY(42);default:'zz'" json:"-" yaml:"PlaceID"`
	Place        *Place    `gorm:"PRELOAD:true" json:"Place" yaml:"-"`
	CreatedAt    time.Time `json:"CreatedAt" yaml:"-"`
	UpdatedAt    time.Time `json:"UpdatedAt" yaml:"-"`
}

Cell represents an S2 cell with metadata and reference to a place.

func FirstOrCreateCell

func FirstOrCreateCell(m *Cell) *Cell

FirstOrCreateCell fetches an existing row, inserts a new row or nil in case of errors.

func NewCell

func NewCell(lat, lng float32) *Cell

NewCell creates a location using a token extracted from coordinate

func (*Cell) Category

func (m *Cell) Category() string

Category returns the location category

func (*Cell) City

func (m *Cell) City() string

City returns the location city name if any.

func (*Cell) CityContains

func (m *Cell) CityContains(text string) bool

CityContains checks if the location city contains the text string

func (*Cell) CountryCode

func (m *Cell) CountryCode() string

CountryCode returns the location place country code

func (*Cell) CountryName

func (m *Cell) CountryName() string

CountryName returns the location place country name

func (*Cell) Create

func (m *Cell) Create() error

Create inserts a new row to the database.

func (*Cell) Delete

func (m *Cell) Delete() (err error)

Delete removes the entity from the index.

func (*Cell) District

func (m *Cell) District() string

District returns the district name if any.

func (*Cell) Find

func (m *Cell) Find(api string) error

Find retrieves location data from the database or an external api if not known already.

func (*Cell) Keywords

func (m *Cell) Keywords() (result []string)

Keywords returns search keywords for a location.

func (*Cell) Label

func (m *Cell) Label() string

Label returns the location place label

func (*Cell) LongCity

func (m *Cell) LongCity() bool

LongCity checks if the city name is more than 16 char

func (*Cell) Name

func (m *Cell) Name() string

Name returns name of location

func (*Cell) NoCategory

func (m *Cell) NoCategory() bool

NoCategory checks id the location has no category

func (*Cell) NoCity

func (m *Cell) NoCity() bool

NoCity checks if the location has no city

func (*Cell) NoName

func (m *Cell) NoName() bool

NoName checks if the location has no name

func (*Cell) NoPostcode

func (m *Cell) NoPostcode() bool

NoPostcode checks if the location has a postcode.

func (*Cell) NoState

func (m *Cell) NoState() bool

NoState checks if the location place has no state

func (*Cell) NoStreet

func (m *Cell) NoStreet() bool

NoStreet checks if the location has a street.

func (*Cell) Postcode

func (m *Cell) Postcode() string

Postcode returns the postcode if any.

func (*Cell) Refresh

func (m *Cell) Refresh(api string) (err error)

Refresh updates the index by retrieving the latest data from an external API.

func (*Cell) Save

func (m *Cell) Save() error

Save updates the record in the database or inserts a new record if it does not already exist.

func (*Cell) State

func (m *Cell) State() string

State returns the location place state

func (*Cell) Street

func (m *Cell) Street() string

Street returns the street name if any.

func (Cell) TableName

func (Cell) TableName() string

TableName returns the entity table name.

func (*Cell) Unknown

func (m *Cell) Unknown() bool

Unknown checks if the location has no id

type CellMap

type CellMap map[string]Cell

func (CellMap) Get

func (m CellMap) Get(name string) Cell

func (CellMap) Pointer

func (m CellMap) Pointer(name string) *Cell

type Client

type Client struct {
	ClientUID string `gorm:"type:VARBINARY(42);primary_key;auto_increment:false;" json:"-" yaml:"ClientUID"`
	UserUID   string `gorm:"type:VARBINARY(42);index;default:'';" json:"UserUID" yaml:"UserUID,omitempty"`
	UserName  string `gorm:"size:200;index;" json:"UserName" yaml:"UserName,omitempty"`

	ClientName   string    `gorm:"size:200;" json:"ClientName" yaml:"ClientName,omitempty"`
	ClientRole   string    `gorm:"size:64;default:'';" json:"ClientRole" yaml:"ClientRole,omitempty"`
	ClientType   string    `gorm:"type:VARBINARY(16)" json:"ClientType" yaml:"ClientType,omitempty"`
	ClientURL    string    `gorm:"type:VARBINARY(255);default:'';column:client_url;" json:"ClientURL" yaml:"ClientURL,omitempty"`
	CallbackURL  string    `gorm:"type:VARBINARY(255);default:'';column:callback_url;" json:"CallbackURL" yaml:"CallbackURL,omitempty"`
	AuthProvider string    `gorm:"type:VARBINARY(128);default:'';" json:"AuthProvider" yaml:"AuthProvider,omitempty"`
	AuthMethod   string    `gorm:"type:VARBINARY(128);default:'';" json:"AuthMethod" yaml:"AuthMethod,omitempty"`
	AuthScope    string    `gorm:"size:1024;default:'';" json:"AuthScope" yaml:"AuthScope,omitempty"`
	AuthExpires  int64     `json:"AuthExpires" yaml:"AuthExpires,omitempty"`
	AuthTokens   int64     `json:"AuthTokens" yaml:"AuthTokens,omitempty"`
	AuthEnabled  bool      `json:"AuthEnabled" yaml:"AuthEnabled,omitempty"`
	LastActive   int64     `json:"LastActive" yaml:"LastActive,omitempty"`
	CreatedAt    time.Time `json:"CreatedAt" yaml:"-"`
	UpdatedAt    time.Time `json:"UpdatedAt" yaml:"-"`
	// contains filtered or unexported fields
}

Client represents a client application.

func AddClient

func AddClient(frm form.Client) (client *Client, err error)

AddClient creates a new client and returns it if successful.

func FindClientByUID

func FindClientByUID(uid string) *Client

FindClientByUID returns the matching client or nil if it was not found.

func NewClient

func NewClient() *Client

NewClient returns a new client application instance.

func (*Client) AclRole

func (m *Client) AclRole() acl.Role

AclRole returns the client role for ACL permission checks.

func (*Client) AuthInfo

func (m *Client) AuthInfo() string

AuthInfo reports the authentication configured for this client.

func (*Client) BeforeCreate

func (m *Client) BeforeCreate(scope *gorm.Scope) error

BeforeCreate creates a random UID if needed before inserting a new row to the database.

func (*Client) Create

func (m *Client) Create() error

Create new entity in the database.

func (*Client) Delete

func (m *Client) Delete() (err error)

Delete marks the entity as deleted.

func (*Client) DeleteSessions

func (m *Client) DeleteSessions() (deleted int, err error)

DeleteSessions deletes all sessions that belong to this client.

func (*Client) Deleted

func (m *Client) Deleted() bool

Deleted checks if the client has been deleted.

func (*Client) Disabled

func (m *Client) Disabled() bool

Disabled checks if the client authentication has been disabled.

func (*Client) EnforceAuthTokenLimit

func (m *Client) EnforceAuthTokenLimit() (deleted int)

EnforceAuthTokenLimit deletes client sessions above the configured limit and returns the number of deleted sessions.

func (*Client) Expires

func (m *Client) Expires() time.Duration

Expires returns the auth expiration duration.

func (*Client) HasName

func (m *Client) HasName() bool

HasName tests if the client has a name.

func (*Client) HasRole

func (m *Client) HasRole(role acl.Role) bool

HasRole checks the client role specified as string.

func (*Client) HasUID

func (m *Client) HasUID() bool

HasUID tests if the client has a valid uid.

func (*Client) HasUser

func (m *Client) HasUser() bool

HasUser checks the client belongs to a user.

func (*Client) InvalidSecret

func (m *Client) InvalidSecret(s string) bool

InvalidSecret checks if the given client secret is invalid.

func (*Client) Method

func (m *Client) Method() authn.MethodType

Method returns the client authentication method.

func (*Client) Name

func (m *Client) Name() string

Name returns the client name string.

func (*Client) NewSecret

func (m *Client) NewSecret() (secret string, err error)

NewSecret sets a random client secret and returns it if successful.

func (*Client) NewSession

func (m *Client) NewSession(c *gin.Context, t authn.GrantType) *Session

NewSession creates a new client session.

func (*Client) NoName

func (m *Client) NoName() bool

NoName tests if the client does not have a name.

func (*Client) NoUID

func (m *Client) NoUID() bool

NoUID tests if the client does not have a valid uid.

func (*Client) Provider

func (m *Client) Provider() authn.ProviderType

Provider returns the client authentication provider.

func (*Client) Report

func (m *Client) Report(skipEmpty bool) (rows [][]string, cols []string)

Report returns the entity values as rows.

func (*Client) Save

func (m *Client) Save() error

Save updates the record in the database or inserts a new record if it does not already exist.

func (*Client) Scope

func (m *Client) Scope() string

Scope returns the client authorization scope.

func (*Client) SetExpires

func (m *Client) SetExpires(i int64) *Client

SetExpires sets a custom auth expiration time in seconds.

func (*Client) SetFormValues

func (m *Client) SetFormValues(frm form.Client) *Client

SetFormValues sets the values specified in the form.

func (*Client) SetMethod

func (m *Client) SetMethod(method authn.MethodType) *Client

SetMethod sets a custom client authentication method.

func (*Client) SetName

func (m *Client) SetName(s string) *Client

SetName sets a custom client name.

func (*Client) SetProvider

func (m *Client) SetProvider(provider authn.ProviderType) *Client

SetProvider sets a custom client authentication provider.

func (*Client) SetRole

func (m *Client) SetRole(role string) *Client

SetRole sets the client role specified as string.

func (*Client) SetScope

func (m *Client) SetScope(s string) *Client

SetScope sets a custom client authorization scope.

func (*Client) SetSecret

func (m *Client) SetSecret(secret string) (err error)

SetSecret updates the current client secret or returns an error otherwise.

func (*Client) SetTokens

func (m *Client) SetTokens(i int64) *Client

SetTokens sets a custom access token limit for this client.

func (*Client) SetUser

func (m *Client) SetUser(u *User) *Client

SetUser sets the user to which the client belongs.

func (*Client) String

func (m *Client) String() string

String returns the client id or name for use in logs and reports.

func (Client) TableName

func (Client) TableName() string

TableName returns the entity table name.

func (*Client) Tokens

func (m *Client) Tokens() int64

Tokens returns maximum number of access tokens this client can create.

func (*Client) UID

func (m *Client) UID() string

UID returns the client uid string.

func (*Client) UpdateLastActive

func (m *Client) UpdateLastActive(save bool) *Client

UpdateLastActive sets the time of last activity to now and optionally also updates the auth_clients table.

func (*Client) Updates

func (m *Client) Updates(values interface{}) error

Updates multiple properties in the database.

func (*Client) User

func (m *Client) User() *User

User returns the user who owns the client, if any.

func (*Client) UserInfo

func (m *Client) UserInfo() string

UserInfo reports the user that is assigned to this client.

func (*Client) Validate

func (m *Client) Validate() (err error)

Validate checks the client application properties before saving them.

func (*Client) VerifySecret

func (m *Client) VerifySecret(s string) bool

VerifySecret checks if the given client secret is correct.

type ClientMap

type ClientMap map[string]Client

func (ClientMap) Get

func (m ClientMap) Get(name string) Client

func (ClientMap) Pointer

func (m ClientMap) Pointer(name string) *Client

type Clients

type Clients []Client

Clients represents a list of client applications.

type Countries

type Countries []Country

Countries represents a list of countries.

type Country

type Country struct {
	ID                 string `gorm:"type:VARBINARY(2);primary_key" json:"ID" yaml:"ID"`
	CountrySlug        string `gorm:"type:VARBINARY(160);unique_index;" json:"Slug" yaml:"-"`
	CountryName        string `gorm:"type:VARCHAR(160);" json:"Name" yaml:"Name,omitempty"`
	CountryDescription string `gorm:"type:VARCHAR(2048);" json:"Description,omitempty" yaml:"Description,omitempty"`
	CountryNotes       string `gorm:"type:VARCHAR(1024);" json:"Notes,omitempty" yaml:"Notes,omitempty"`
	CountryPhoto       *Photo `json:"-" yaml:"-"`
	CountryPhotoID     uint   `json:"-" yaml:"-"`
	New                bool   `gorm:"-" json:"-" yaml:"-"`
}

Country represents a country location, used for labeling photos.

func FirstOrCreateCountry

func FirstOrCreateCountry(m *Country) *Country

FirstOrCreateCountry returns the existing row, inserts a new row or nil in case of errors.

func NewCountry

func NewCountry(countryCode string, countryName string) *Country

NewCountry creates a new country, with default country code if not provided

func (*Country) AfterCreate

func (m *Country) AfterCreate(scope *gorm.Scope) error

AfterCreate sets the New column used for database callback

func (*Country) Code

func (m *Country) Code() string

Code returns country code

func (*Country) Create

func (m *Country) Create() error

Create inserts a new row to the database.

func (*Country) Name

func (m *Country) Name() string

Name returns country name

func (Country) TableName

func (Country) TableName() string

TableName returns the entity table name.

func (*Country) Unknown

func (m *Country) Unknown() bool

Unknown returns true if the country is not a known country.

type CountryMap

type CountryMap map[string]Country

type DbConn

type DbConn struct {
	Driver string
	Dsn    string
	// contains filtered or unexported fields
}

DbConn is a gorm.DB connection provider.

func InitTestDb

func InitTestDb(driver, dsn string) *DbConn

InitTestDb connects to and completely initializes the test database incl fixtures.

func (*DbConn) Close

func (g *DbConn) Close()

Close closes the gorm db connection.

func (*DbConn) Db

func (g *DbConn) Db() *gorm.DB

Db returns the gorm db connection.

func (*DbConn) Open

func (g *DbConn) Open()

Open creates a new gorm db connection.

type Deprecated

type Deprecated []string

Deprecated represents a list of deprecated database tables.

func (Deprecated) Drop

func (list Deprecated) Drop(db *gorm.DB)

Drop drops all deprecated tables.

type Details

type Details struct {
	PhotoID      uint      `gorm:"primary_key;auto_increment:false" yaml:"-"`
	Keywords     string    `gorm:"type:VARCHAR(2048);" json:"Keywords" yaml:"Keywords"`
	KeywordsSrc  string    `gorm:"type:VARBINARY(8);" json:"KeywordsSrc" yaml:"KeywordsSrc,omitempty"`
	Notes        string    `gorm:"type:VARCHAR(2048);" json:"Notes" yaml:"Notes,omitempty"`
	NotesSrc     string    `gorm:"type:VARBINARY(8);" json:"NotesSrc" yaml:"NotesSrc,omitempty"`
	Subject      string    `gorm:"type:VARCHAR(1024);" json:"Subject" yaml:"Subject,omitempty"`
	SubjectSrc   string    `gorm:"type:VARBINARY(8);" json:"SubjectSrc" yaml:"SubjectSrc,omitempty"`
	Artist       string    `gorm:"type:VARCHAR(1024);" json:"Artist" yaml:"Artist,omitempty"`
	ArtistSrc    string    `gorm:"type:VARBINARY(8);" json:"ArtistSrc" yaml:"ArtistSrc,omitempty"`
	Copyright    string    `gorm:"type:VARCHAR(1024);" json:"Copyright" yaml:"Copyright,omitempty"`
	CopyrightSrc string    `gorm:"type:VARBINARY(8);" json:"CopyrightSrc" yaml:"CopyrightSrc,omitempty"`
	License      string    `gorm:"type:VARCHAR(1024);" json:"License" yaml:"License,omitempty"`
	LicenseSrc   string    `gorm:"type:VARBINARY(8);" json:"LicenseSrc" yaml:"LicenseSrc,omitempty"`
	Software     string    `gorm:"type:VARCHAR(1024);" json:"Software" yaml:"Software,omitempty"`
	SoftwareSrc  string    `gorm:"type:VARBINARY(8);" json:"SoftwareSrc" yaml:"SoftwareSrc,omitempty"`
	CreatedAt    time.Time `yaml:"-"`
	UpdatedAt    time.Time `yaml:"-"`
}

Details stores additional metadata fields for each photo to improve search performance.

func FirstOrCreateDetails

func FirstOrCreateDetails(m *Details) *Details

FirstOrCreateDetails returns the existing row, inserts a new row or nil in case of errors.

func NewDetails

func NewDetails(photo Photo) Details

NewDetails creates new photo details.

func (*Details) Create

func (m *Details) Create() error

Create inserts a new row to the database.

func (*Details) HasArtist

func (m *Details) HasArtist() bool

HasArtist tests if the photo has an Artist.

func (*Details) HasCopyright

func (m *Details) HasCopyright() bool

HasCopyright tests if the photo has a Copyright

func (*Details) HasKeywords

func (m *Details) HasKeywords() bool

HasKeywords tests if the photo has a Keywords.

func (*Details) HasLicense

func (m *Details) HasLicense() bool

HasLicense tests if the photo has a License.

func (*Details) HasNotes

func (m *Details) HasNotes() bool

HasNotes tests if the photo has a Notes.

func (*Details) HasSoftware

func (m *Details) HasSoftware() bool

HasSoftware tests if the photo has a Software.

func (*Details) HasSubject

func (m *Details) HasSubject() bool

HasSubject tests if the photo has a Subject.

func (*Details) NoArtist

func (m *Details) NoArtist() bool

NoArtist tests if the photo has no Artist.

func (*Details) NoCopyright

func (m *Details) NoCopyright() bool

NoCopyright tests if the photo has no Copyright.

func (*Details) NoKeywords

func (m *Details) NoKeywords() bool

NoKeywords tests if the photo has no Keywords.

func (*Details) NoLicense

func (m *Details) NoLicense() bool

NoLicense tests if the photo has no License.

func (*Details) NoNotes

func (m *Details) NoNotes() bool

NoNotes tests if the photo has no Notes.

func (*Details) NoSoftware

func (m *Details) NoSoftware() bool

NoSoftware tests if the photo has no Software.

func (*Details) NoSubject

func (m *Details) NoSubject() bool

NoSubject tests if the photo has no Subject.

func (*Details) Save

func (m *Details) Save() error

Save updates the record in the database or inserts a new record if it does not already exist.

func (*Details) SetArtist

func (m *Details) SetArtist(data, src string)

SetArtist updates the photo details field.

func (*Details) SetCopyright

func (m *Details) SetCopyright(data, src string)

SetCopyright updates the photo details field.

func (*Details) SetKeywords

func (m *Details) SetKeywords(data, src string)

SetKeywords updates the photo details field.

func (*Details) SetLicense

func (m *Details) SetLicense(data, src string)

SetLicense updates the photo details field.

func (*Details) SetNotes

func (m *Details) SetNotes(data, src string)

SetNotes updates the photo details field.

func (*Details) SetSoftware

func (m *Details) SetSoftware(data, src string)

SetSoftware updates the photo details field.

func (*Details) SetSubject

func (m *Details) SetSubject(data, src string)

SetSubject updates the photo details field.

func (Details) TableName

func (Details) TableName() string

TableName returns the entity table name.

type DetailsMap

type DetailsMap map[string]Details

func (DetailsMap) Get

func (m DetailsMap) Get(name string, photoId uint) Details

func (DetailsMap) Pointer

func (m DetailsMap) Pointer(name string, photoId uint) *Details

type Duplicate

type Duplicate struct {
	FileName string `gorm:"type:VARBINARY(755);primary_key;" json:"Name" yaml:"Name"`
	FileRoot string `gorm:"type:VARBINARY(16);primary_key;default:'/';" json:"Root" yaml:"Root,omitempty"`
	FileHash string `gorm:"type:VARBINARY(128);default:'';index" json:"Hash" yaml:"Hash,omitempty"`
	FileSize int64  `json:"Size" yaml:"Size,omitempty"`
	ModTime  int64  `json:"ModTime" yaml:"-"`
}

Duplicate represents an exact file duplicate.

func (*Duplicate) Create

func (m *Duplicate) Create() error

Create inserts a new row to the database.

func (*Duplicate) Find

func (m *Duplicate) Find() error

Find returns a duplicate from the database.

func (*Duplicate) Purge

func (m *Duplicate) Purge() error

Purge deletes a duplicate.

func (*Duplicate) Save

func (m *Duplicate) Save() error

Saves the duplicates in the database.

func (Duplicate) TableName

func (Duplicate) TableName() string

TableName returns the entity table name.

type Duplicates

type Duplicates []Duplicate

type DuplicatesMap

type DuplicatesMap map[string]Duplicate

type Error

type Error struct {
	ID           uint      `gorm:"primary_key" json:"ID" yaml:"ID"`
	ErrorTime    time.Time `sql:"index" json:"Time" yaml:"Time"`
	ErrorLevel   string    `gorm:"type:VARBINARY(32)" json:"Level" yaml:"Level"`
	ErrorMessage string    `gorm:"type:VARBINARY(2048)" json:"Message" yaml:"Message"`
}

Error represents an error message log.

func (Error) LogEvents

func (Error) LogEvents()

LogEvents logs published error events.

func (Error) TableName

func (Error) TableName() string

TableName returns the entity table name.

type Errors

type Errors []Error

Errors represents a list of error log messages.

type Face

type Face struct {
	ID              string          `gorm:"type:VARBINARY(64);primary_key;auto_increment:false;" json:"ID" yaml:"ID"`
	FaceSrc         string          `gorm:"type:VARBINARY(8);" json:"Src" yaml:"Src,omitempty"`
	FaceKind        int             `json:"Kind" yaml:"Kind,omitempty"`
	FaceHidden      bool            `json:"Hidden" yaml:"Hidden,omitempty"`
	SubjUID         string          `gorm:"type:VARBINARY(42);index;default:'';" json:"SubjUID" yaml:"SubjUID,omitempty"`
	Samples         int             `json:"Samples" yaml:"Samples,omitempty"`
	SampleRadius    float64         `json:"SampleRadius" yaml:"SampleRadius,omitempty"`
	Collisions      int             `json:"Collisions" yaml:"Collisions,omitempty"`
	CollisionRadius float64         `json:"CollisionRadius" yaml:"CollisionRadius,omitempty"`
	EmbeddingJSON   json.RawMessage `gorm:"type:MEDIUMBLOB;" json:"-" yaml:"EmbeddingJSON,omitempty"`

	MatchedAt *time.Time `json:"MatchedAt" yaml:"MatchedAt,omitempty"`
	CreatedAt time.Time  `json:"CreatedAt" yaml:"CreatedAt,omitempty"`
	UpdatedAt time.Time  `json:"UpdatedAt" yaml:"UpdatedAt,omitempty"`
	// contains filtered or unexported fields
}

Face represents the face of a Subject.

func FindFace

func FindFace(id string) *Face

FindFace returns an existing entity if exists.

func FirstOrCreateFace

func FirstOrCreateFace(m *Face) *Face

FirstOrCreateFace returns the existing entity, inserts a new entity or nil in case of errors.

func NewFace

func NewFace(subjUID, faceSrc string, embeddings face.Embeddings) *Face

NewFace returns a new face.

func (*Face) Create

func (m *Face) Create() error

Create inserts the face to the database.

func (*Face) Delete

func (m *Face) Delete() error

Delete removes the face from the database.

func (*Face) Embedding

func (m *Face) Embedding() face.Embedding

Embedding returns parsed face embedding.

func (*Face) Hide

func (m *Face) Hide() (err error)

Hide hides the face by default.

func (*Face) Match

func (m *Face) Match(embeddings face.Embeddings) (match bool, dist float64)

Match tests if embeddings match this face.

func (*Face) MatchId

func (m *Face) MatchId(f Face) string

MatchId returns a compound id for matching.

func (*Face) MatchMarkers

func (m *Face) MatchMarkers(faceIds []string) error

MatchMarkers finds and references matching markers.

func (*Face) Matched

func (m *Face) Matched() error

Matched updates the match timestamp.

func (*Face) RefreshPhotos

func (m *Face) RefreshPhotos() error

RefreshPhotos flags related photos for metadata maintenance.

func (*Face) ResolveCollision

func (m *Face) ResolveCollision(embeddings face.Embeddings) (resolved bool, err error)

ResolveCollision resolves a collision with a different subject's face.

func (*Face) ReviseMatches

func (m *Face) ReviseMatches() (revised Markers, err error)

ReviseMatches updates marker matches after face parameters have been changed.

func (*Face) SetEmbeddings

func (m *Face) SetEmbeddings(embeddings face.Embeddings) (err error)

SetEmbeddings assigns face embeddings.

func (*Face) SetSubjectUID

func (m *Face) SetSubjectUID(subjUid string) (err error)

SetSubjectUID updates the face's subject uid and related markers.

func (*Face) Show

func (m *Face) Show() (err error)

Show shows the face by default.

func (*Face) SkipMatching

func (m *Face) SkipMatching() bool

SkipMatching checks whether the face should be skipped when matching.

func (Face) TableName

func (Face) TableName() string

TableName returns the entity table name.

func (*Face) Update

func (m *Face) Update(attr string, value interface{}) error

Update a face property in the database.

func (*Face) Updates

func (m *Face) Updates(values interface{}) error

Updates face properties in the database.

type FaceMap

type FaceMap map[string]Face

func (FaceMap) Get

func (m FaceMap) Get(name string) Face

func (FaceMap) Pointer

func (m FaceMap) Pointer(name string) *Face

type Faces

type Faces []Face

Faces represents a Face slice.

func OrphanFaces

func OrphanFaces() (Faces, error)

OrphanFaces returns unused faces.

func (Faces) Delete

func (f Faces) Delete() error

Delete (soft) deletes all subjects.

func (Faces) Embeddings

func (f Faces) Embeddings() (embeddings face.Embeddings)

Embeddings returns all face embeddings in this slice.

func (Faces) IDs

func (f Faces) IDs() (ids []string)

IDs returns all face IDs in this slice.

type File

type File struct {
	ID                 uint          `gorm:"primary_key" json:"-" yaml:"-"`
	Photo              *Photo        `json:"-" yaml:"-"`
	PhotoID            uint          `gorm:"index:idx_files_photo_id;" json:"-" yaml:"-"`
	PhotoUID           string        `gorm:"type:VARBINARY(42);index;" json:"PhotoUID" yaml:"PhotoUID"`
	PhotoTakenAt       time.Time     `gorm:"type:DATETIME;index;" json:"TakenAt" yaml:"TakenAt"`
	TimeIndex          *string       `gorm:"type:VARBINARY(64);" json:"TimeIndex" yaml:"TimeIndex"`
	MediaID            *string       `gorm:"type:VARBINARY(32);" json:"MediaID" yaml:"MediaID"`
	MediaUTC           int64         `gorm:"column:media_utc;index;"  json:"MediaUTC" yaml:"MediaUTC,omitempty"`
	InstanceID         string        `gorm:"type:VARBINARY(64);index;" json:"InstanceID,omitempty" yaml:"InstanceID,omitempty"`
	FileUID            string        `gorm:"type:VARBINARY(42);unique_index;" json:"UID" yaml:"UID"`
	FileName           string        `gorm:"type:VARBINARY(1024);unique_index:idx_files_name_root;" json:"Name" yaml:"Name"`
	FileRoot           string        `gorm:"type:VARBINARY(16);default:'/';unique_index:idx_files_name_root;" json:"Root" yaml:"Root,omitempty"`
	OriginalName       string        `gorm:"type:VARBINARY(755);" json:"OriginalName" yaml:"OriginalName,omitempty"`
	FileHash           string        `gorm:"type:VARBINARY(128);index" json:"Hash" yaml:"Hash,omitempty"`
	FileSize           int64         `json:"Size" yaml:"Size,omitempty"`
	FileCodec          string        `gorm:"type:VARBINARY(32)" json:"Codec" yaml:"Codec,omitempty"`
	FileType           string        `gorm:"type:VARBINARY(16)" json:"FileType" yaml:"FileType,omitempty"`
	MediaType          string        `gorm:"type:VARBINARY(16)" json:"MediaType" yaml:"MediaType,omitempty"`
	FileMime           string        `gorm:"type:VARBINARY(64)" json:"Mime" yaml:"Mime,omitempty"`
	FilePrimary        bool          `gorm:"index:idx_files_photo_id;" json:"Primary" yaml:"Primary,omitempty"`
	FileSidecar        bool          `json:"Sidecar" yaml:"Sidecar,omitempty"`
	FileMissing        bool          `json:"Missing" yaml:"Missing,omitempty"`
	FilePortrait       bool          `json:"Portrait" yaml:"Portrait,omitempty"`
	FileVideo          bool          `json:"Video" yaml:"Video,omitempty"`
	FileDuration       time.Duration `json:"Duration" yaml:"Duration,omitempty"`
	FileFPS            float64       `gorm:"column:file_fps;" json:"FPS" yaml:"FPS,omitempty"`
	FileFrames         int           `gorm:"column:file_frames;" json:"Frames" yaml:"Frames,omitempty"`
	FileWidth          int           `gorm:"column:file_width;" json:"Width" yaml:"Width,omitempty"`
	FileHeight         int           `gorm:"column:file_height;" json:"Height" yaml:"Height,omitempty"`
	FileOrientation    int           `gorm:"column:file_orientation;" json:"Orientation" yaml:"Orientation,omitempty"`
	FileOrientationSrc string        `gorm:"column:file_orientation_src;type:VARBINARY(8);default:'';" json:"OrientationSrc" yaml:"OrientationSrc,omitempty"`
	FileProjection     string        `gorm:"column:file_projection;type:VARBINARY(64);" json:"Projection,omitempty" yaml:"Projection,omitempty"`
	FileAspectRatio    float32       `gorm:"column:file_aspect_ratio;type:FLOAT;" json:"AspectRatio" yaml:"AspectRatio,omitempty"`
	FileHDR            bool          `gorm:"column:file_hdr;"  json:"HDR" yaml:"HDR,omitempty"`
	FileWatermark      bool          `gorm:"column:file_watermark;"  json:"Watermark" yaml:"Watermark,omitempty"`
	FileColorProfile   string        `gorm:"type:VARBINARY(64);" json:"ColorProfile,omitempty" yaml:"ColorProfile,omitempty"`
	FileMainColor      string        `gorm:"type:VARBINARY(16);" json:"MainColor" yaml:"MainColor,omitempty"`
	FileColors         string        `gorm:"type:VARBINARY(18);" json:"Colors" yaml:"Colors,omitempty"`
	FileLuminance      string        `gorm:"type:VARBINARY(18);" json:"Luminance" yaml:"Luminance,omitempty"`
	FileDiff           int           `json:"Diff" yaml:"Diff,omitempty"`
	FileChroma         int16         `json:"Chroma" yaml:"Chroma,omitempty"`
	FileSoftware       string        `gorm:"type:VARCHAR(64)" json:"Software" yaml:"Software,omitempty"`
	FileError          string        `gorm:"type:VARBINARY(512);index;" json:"Error" yaml:"Error,omitempty"`
	ModTime            int64         `json:"ModTime" yaml:"-"`
	CreatedAt          time.Time     `json:"CreatedAt" yaml:"-"`
	CreatedIn          int64         `json:"CreatedIn" yaml:"-"`
	UpdatedAt          time.Time     `json:"UpdatedAt" yaml:"-"`
	UpdatedIn          int64         `json:"UpdatedIn" yaml:"-"`
	PublishedAt        *time.Time    `sql:"index" json:"PublishedAt,omitempty" yaml:"PublishedAt,omitempty"`
	DeletedAt          *time.Time    `sql:"index" json:"DeletedAt,omitempty" yaml:"-"`
	Share              []FileShare   `json:"-" yaml:"-"`
	Sync               []FileSync    `json:"-" yaml:"-"`
	// contains filtered or unexported fields
}

File represents an image or sidecar file that belongs to a photo.

func FirstFileByHash

func FirstFileByHash(fileHash string) (File, error)

FirstFileByHash gets a file in db from its hash

func PrimaryFile

func PrimaryFile(photoUid string) (*File, error)

PrimaryFile returns the primary file for a photo uid.

func (*File) AddFace

func (m *File) AddFace(f face.Face, subjUid string)

AddFace adds a face marker to the file.

func (*File) AddFaces

func (m *File) AddFaces(faces face.Faces)

AddFaces adds face markers to the file.

func (*File) AllFilesMissing

func (m *File) AllFilesMissing() bool

AllFilesMissing returns true, if all files for the photo of this file are missing.

func (*File) Base

func (m *File) Base(seq int) string

Base returns the file name without path.

func (*File) BeforeCreate

func (m *File) BeforeCreate(scope *gorm.Scope) error

BeforeCreate creates a random UID if needed before inserting a new row to the database.

func (*File) Bitrate

func (m *File) Bitrate() float64

Bitrate returns the average bitrate in MBit/s if the file has a duration.

func (*File) Bounds

func (m *File) Bounds() image.Rectangle

Bounds returns the file dimensions as image.Rectangle.

func (File) Changed

func (m File) Changed(fileSize int64, modTime time.Time) bool

Changed returns true if new and old file size or modified time are different.

func (*File) ColorProfile

func (m *File) ColorProfile() string

ColorProfile returns the ICC color profile name if any.

func (*File) Create

func (m *File) Create() error

Create inserts a new row to the database.

func (*File) Delete

func (m *File) Delete(permanently bool) error

Delete deletes the entity from the database.

func (*File) DeletePermanently

func (m *File) DeletePermanently() error

DeletePermanently permanently removes a file from the index.

func (*File) DownloadName

func (m *File) DownloadName(n customize.DownloadName, seq int) string

DownloadName returns the download file name.

func (*File) Found

func (m *File) Found() error

Found restores a previously purged file.

func (*File) HasColorProfile

func (m *File) HasColorProfile(profile colors.Profile) bool

HasColorProfile tests if the file has a matching color profile.

func (*File) HasWatermark

func (m *File) HasWatermark() bool

HasWatermark returns true if the file has a watermark.

func (*File) IsAnimated

func (m *File) IsAnimated() bool

IsAnimated returns true if the file has animated image frames.

func (*File) IsHDR

func (m *File) IsHDR() bool

IsHDR returns true if it is a high dynamic range file.

func (m *File) Links() Links

Links returns all share links for this entity.

func (*File) Markers

func (m *File) Markers() *Markers

Markers finds and returns existing file markers.

func (*File) MarshalJSON

func (m *File) MarshalJSON() ([]byte, error)

MarshalJSON returns the JSON encoding.

func (File) Missing

func (m File) Missing() bool

Missing returns true if this file is current missing or marked as deleted.

func (*File) NoJPEG

func (m *File) NoJPEG() bool

NoJPEG returns true if the file is not a JPEG image.

func (*File) NoPNG

func (m *File) NoPNG() bool

NoPNG returns true if the file is not a PNG image.

func (*File) Orientation

func (m *File) Orientation() int

Orientation returns the file's Exif orientation value.

func (*File) OriginalBase

func (m *File) OriginalBase(seq int) string

OriginalBase returns the original file name without path.

func (*File) Panorama

func (m *File) Panorama() bool

Panorama checks if the file appears to be a panoramic image.

func (*File) Projection

func (m *File) Projection() projection.Type

Projection returns the panorama projection name if any.

func (*File) Purge

func (m *File) Purge() error

Purge removes a file from the index by marking it as missing.

func (File) RegenerateIndex

func (m File) RegenerateIndex()

RegenerateIndex updates the search index columns.

func (*File) RelatedPhoto

func (m *File) RelatedPhoto() *Photo

RelatedPhoto returns the related photo entity.

func (*File) Rename

func (m *File) Rename(fileName, rootName, filePath, fileBase string) error

Rename updates the name and path of this file.

func (*File) ReplaceHash

func (m *File) ReplaceHash(newHash string) error

ReplaceHash updates file hash references.

func (*File) ResetColorProfile

func (m *File) ResetColorProfile()

ResetColorProfile removes the ICC color profile name.

func (*File) ResetHDR

func (m *File) ResetHDR()

ResetHDR removes the high dynamic range flag.

func (*File) ResolvePrimary

func (m *File) ResolvePrimary() (err error)

ResolvePrimary ensures there is only one primary file for a photo.

func (*File) Save

func (m *File) Save() error

Save updates the record in the database or inserts a new record if it does not already exist.

func (*File) SaveMarkers

func (m *File) SaveMarkers() (count int, err error)

SaveMarkers updates markers in the index.

func (*File) SetColorProfile

func (m *File) SetColorProfile(name string)

SetColorProfile sets the ICC color profile name such as "Display P3".

func (*File) SetDuration

func (m *File) SetDuration(d time.Duration)

SetDuration sets the video/animation duration.

func (*File) SetFPS

func (m *File) SetFPS(frameRate float64)

SetFPS sets the average number of frames per second.

func (*File) SetFrames

func (m *File) SetFrames(n int)

SetFrames sets the number of video/animation frames.

func (*File) SetHDR

func (m *File) SetHDR(isHdr bool)

SetHDR sets the high dynamic range flag.

func (*File) SetMediaUTC

func (m *File) SetMediaUTC(taken time.Time)

SetMediaUTC sets the media creation date from metadata as unix time in ms.

func (*File) SetOrientation

func (m *File) SetOrientation(val int, src string) *File

SetOrientation sets the file's Exif orientation value.

func (*File) SetProjection

func (m *File) SetProjection(s string)

SetProjection sets the panorama projection name.

func (*File) SetSoftware

func (m *File) SetSoftware(name string)

SetSoftware sets the software name.

func (*File) ShareBase

func (m *File) ShareBase(seq int) string

ShareBase returns a meaningful file name for sharing.

func (*File) SubjectNames

func (m *File) SubjectNames() []string

SubjectNames returns all known subject names.

func (File) TableName

func (File) TableName() string

TableName returns the entity table name.

func (*File) Type

func (m *File) Type() fs.Type

Type returns the file type.

func (*File) Undelete

func (m *File) Undelete() error

Undelete removes the missing flag from this file.

func (*File) UnsavedMarkers

func (m *File) UnsavedMarkers() bool

UnsavedMarkers tests if any marker hasn't been saved yet.

func (*File) Update

func (m *File) Update(attr string, value interface{}) error

Update updates a column in the database.

func (*File) UpdatePhotoFaceCount

func (m *File) UpdatePhotoFaceCount() (c int, err error)

UpdatePhotoFaceCount updates the faces count in the index and returns it if the file is primary.

func (*File) UpdateVideoInfos

func (m *File) UpdateVideoInfos() error

UpdateVideoInfos updated related video files so they are properly grouped with the primary image in search results. see https://github.com/photoprism/photoprism/pull/3588#issuecomment-1683429455

func (*File) Updates

func (m *File) Updates(values interface{}) error

Updates multiple columns in the database.

func (*File) ValidFaceCount

func (m *File) ValidFaceCount() (c int)

ValidFaceCount returns the number of valid face markers.

type FileAppearance

type FileAppearance struct {
	FileMainColor string
	FileColors    string
	FileLuminance string
	FileDiff      int
	FileChroma    int16
}

FileAppearance represents file metadata related to colors, luminance and perception. see File.UpdateVideoInfos()

type FileDimensions

type FileDimensions struct {
	FileWidth       int
	FileHeight      int
	FileOrientation int
	FileAspectRatio float32
}

FileDimensions represents metadata related to the size and orientation of a file. see File.UpdateVideoInfos()

type FileMap

type FileMap map[string]File

func (FileMap) Get

func (m FileMap) Get(name string) File

func (FileMap) Pointer

func (m FileMap) Pointer(name string) *File

type FileShare

type FileShare struct {
	FileID     uint   `gorm:"primary_key;auto_increment:false"`
	ServiceID  uint   `gorm:"primary_key;auto_increment:false"`
	RemoteName string `gorm:"primary_key;auto_increment:false;type:VARBINARY(255)"`
	Status     string `gorm:"type:VARBINARY(16);"`
	Error      string `gorm:"type:VARBINARY(512);"`
	Errors     int
	File       *File
	Account    *Service
	CreatedAt  time.Time
	UpdatedAt  time.Time
}

FileShare represents a one-to-many relation between File and Account for pushing files to remote services.

func FirstOrCreateFileShare

func FirstOrCreateFileShare(m *FileShare) *FileShare

FirstOrCreateFileShare returns the existing row, inserts a new row or nil in case of errors.

func NewFileShare

func NewFileShare(fileID, accountID uint, remoteName string) *FileShare

NewFileShare creates a new entity.

func (*FileShare) Create

func (m *FileShare) Create() error

Create inserts a new row to the database.

func (*FileShare) Save

func (m *FileShare) Save() error

Save updates the record in the database or inserts a new record if it does not already exist.

func (FileShare) TableName

func (FileShare) TableName() string

TableName returns the entity table name.

func (*FileShare) Update

func (m *FileShare) Update(attr string, value interface{}) error

Update updates a column value in the database.

func (*FileShare) Updates

func (m *FileShare) Updates(values interface{}) error

Updates multiple columns in the database.

type FileShareMap

type FileShareMap map[string]FileShare

func (FileShareMap) Get

func (m FileShareMap) Get(name string, fileID, accountID uint, remoteName string) FileShare

func (FileShareMap) Pointer

func (m FileShareMap) Pointer(name string, fileID, accountID uint, remoteName string) *FileShare

type FileSync

type FileSync struct {
	RemoteName string `gorm:"primary_key;auto_increment:false;type:VARBINARY(255)"`
	ServiceID  uint   `gorm:"primary_key;auto_increment:false"`
	FileID     uint   `gorm:"index;"`
	RemoteDate time.Time
	RemoteSize int64
	Status     string `gorm:"type:VARBINARY(16);"`
	Error      string `gorm:"type:VARBINARY(512);"`
	Errors     int
	File       *File
	Account    *Service
	CreatedAt  time.Time
	UpdatedAt  time.Time
}

FileSync represents a one-to-many relation between File and Account for syncing with remote services.

func FirstOrCreateFileSync

func FirstOrCreateFileSync(m *FileSync) *FileSync

FirstOrCreateFileSync returns the existing row, inserts a new row or nil in case of errors.

func NewFileSync

func NewFileSync(accountID uint, remoteName string) *FileSync

NewFileSync creates a new entity.

func (*FileSync) Create

func (m *FileSync) Create() error

Create inserts a new row to the database.

func (*FileSync) Save

func (m *FileSync) Save() error

Save updates the record in the database or inserts a new record if it does not already exist.

func (FileSync) TableName

func (FileSync) TableName() string

TableName returns the entity table name.

func (*FileSync) Update

func (m *FileSync) Update(attr string, value interface{}) error

Update a column in the database.

func (*FileSync) Updates

func (m *FileSync) Updates(values interface{}) error

Updates multiple columns in the database.

type FileSyncMap

type FileSyncMap map[string]FileSync

func (FileSyncMap) Get

func (m FileSyncMap) Get(name string, accountID uint, remoteName string) FileSync

func (FileSyncMap) Pointer

func (m FileSyncMap) Pointer(name string, accountID uint, remoteName string) *FileSync

type Files

type Files []File

Files represents a file result set.

type Folder

type Folder struct {
	Path              string     `gorm:"type:VARBINARY(1024);unique_index:idx_folders_path_root;" json:"Path" yaml:"Path"`
	Root              string     `gorm:"type:VARBINARY(16);default:'';unique_index:idx_folders_path_root;" json:"Root" yaml:"Root,omitempty"`
	FolderUID         string     `gorm:"type:VARBINARY(42);primary_key;" json:"UID,omitempty" yaml:"UID,omitempty"`
	FolderType        string     `gorm:"type:VARBINARY(16);" json:"Type" yaml:"Type,omitempty"`
	FolderTitle       string     `gorm:"type:VARCHAR(200);" json:"Title" yaml:"Title,omitempty"`
	FolderCategory    string     `gorm:"type:VARCHAR(100);index;" json:"Category" yaml:"Category,omitempty"`
	FolderDescription string     `gorm:"type:VARCHAR(2048);" json:"Description,omitempty" yaml:"Description,omitempty"`
	FolderOrder       string     `gorm:"type:VARBINARY(32);" json:"Order" yaml:"Order,omitempty"`
	FolderCountry     string     `gorm:"type:VARBINARY(2);index:idx_folders_country_year_month;default:'zz'" json:"Country" yaml:"Country,omitempty"`
	FolderYear        int        `gorm:"index:idx_folders_country_year_month;" json:"Year" yaml:"Year,omitempty"`
	FolderMonth       int        `gorm:"index:idx_folders_country_year_month;" json:"Month" yaml:"Month,omitempty"`
	FolderDay         int        `json:"Day" yaml:"Day,omitempty"`
	FolderFavorite    bool       `json:"Favorite" yaml:"Favorite,omitempty"`
	FolderPrivate     bool       `json:"Private" yaml:"Private,omitempty"`
	FolderIgnore      bool       `json:"Ignore" yaml:"Ignore,omitempty"`
	FolderWatch       bool       `json:"Watch" yaml:"Watch,omitempty"`
	FileCount         int        `gorm:"-" json:"FileCount" yaml:"-"`
	CreatedAt         time.Time  `json:"-" yaml:"-"`
	UpdatedAt         time.Time  `json:"-" yaml:"-"`
	ModifiedAt        time.Time  `json:"ModifiedAt,omitempty" yaml:"-"`
	PublishedAt       *time.Time `sql:"index" json:"PublishedAt,omitempty" yaml:"PublishedAt,omitempty"`
	DeletedAt         *time.Time `sql:"index" json:"-"`
}

Folder represents a file system directory.

func FindFolder

func FindFolder(root, pathName string) *Folder

FindFolder returns an existing row if exists.

func FirstOrCreateFolder

func FirstOrCreateFolder(m *Folder) *Folder

FirstOrCreateFolder returns the existing row, inserts a new row or nil in case of errors.

func NewFolder

func NewFolder(root, pathName string, modTime time.Time) Folder

NewFolder creates a new file system directory entity.

func (*Folder) BeforeCreate

func (m *Folder) BeforeCreate(scope *gorm.Scope) error

BeforeCreate creates a random UID if needed before inserting a new row to the database.

func (*Folder) Create

func (m *Folder) Create() error

Create inserts the entity to the index.

func (*Folder) RootPath

func (m *Folder) RootPath() string

RootPath returns the full folder path including root.

func (*Folder) SetForm

func (m *Folder) SetForm(f form.Folder) error

SetForm updates the entity properties based on form values.

func (*Folder) SetValuesFromPath

func (m *Folder) SetValuesFromPath()

SetValuesFromPath updates the title and other values based on the path name.

func (*Folder) Slug

func (m *Folder) Slug() string

Slug returns a slug based on the folder title.

func (Folder) TableName

func (Folder) TableName() string

TableName returns the entity table name.

func (*Folder) Title

func (m *Folder) Title() string

Title returns the human-readable folder title.

func (*Folder) Updates

func (m *Folder) Updates(values interface{}) error

Updates selected properties in the database.

type Folders

type Folders []Folder

type Gorm

type Gorm interface {
	Db() *gorm.DB
}

Gorm is a gorm.DB connection provider interface.

type KeyValue

type KeyValue struct {
	K string `json:"value"`
	V string `json:"text"`
}

KeyValue represents a string key/value pair.

type KeyValues

type KeyValues []KeyValue

KeyValues represents a list of string key/value pairs.

func (KeyValues) Strings

func (v KeyValues) Strings() Strings

Strings returns the list as a lookup map.

type Keyword

type Keyword struct {
	ID      uint   `gorm:"primary_key"`
	Keyword string `gorm:"type:VARCHAR(64);index;"`
	Skip    bool
}

Keyword used for full text search

func FirstOrCreateKeyword

func FirstOrCreateKeyword(m *Keyword) *Keyword

FirstOrCreateKeyword returns the existing row, inserts a new row or nil in case of errors.

func NewKeyword

func NewKeyword(keyword string) *Keyword

NewKeyword registers a new keyword in database

func (*Keyword) Create

func (m *Keyword) Create() error

Create inserts a new row to the database.

func (*Keyword) Save

func (m *Keyword) Save() error

Save updates the record in the database or inserts a new record if it does not already exist.

func (Keyword) TableName

func (Keyword) TableName() string

TableName returns the entity table name.

func (*Keyword) Update

func (m *Keyword) Update(attr string, value interface{}) error

Update a column in the database.

func (*Keyword) Updates

func (m *Keyword) Updates(values interface{}) error

Updates multiple columns in the database.

type KeywordMap

type KeywordMap map[string]Keyword

func (KeywordMap) Get

func (m KeywordMap) Get(name string) Keyword

func (KeywordMap) Pointer

func (m KeywordMap) Pointer(name string) *Keyword

type Label

type Label struct {
	ID               uint       `gorm:"primary_key" json:"ID" yaml:"-"`
	LabelUID         string     `gorm:"type:VARBINARY(42);unique_index;" json:"UID" yaml:"UID"`
	LabelSlug        string     `gorm:"type:VARBINARY(160);unique_index;" json:"Slug" yaml:"-"`
	CustomSlug       string     `gorm:"type:VARBINARY(160);index;" json:"CustomSlug" yaml:"-"`
	LabelName        string     `gorm:"type:VARCHAR(160);" json:"Name" yaml:"Name"`
	LabelPriority    int        `json:"Priority" yaml:"Priority,omitempty"`
	LabelFavorite    bool       `json:"Favorite" yaml:"Favorite,omitempty"`
	LabelDescription string     `gorm:"type:VARCHAR(2048);" json:"Description" yaml:"Description,omitempty"`
	LabelNotes       string     `gorm:"type:VARCHAR(1024);" json:"Notes" yaml:"Notes,omitempty"`
	LabelCategories  []*Label   `gorm:"many2many:categories;association_jointable_foreignkey:category_id" json:"-" yaml:"-"`
	PhotoCount       int        `gorm:"default:1" json:"PhotoCount" yaml:"-"`
	Thumb            string     `gorm:"type:VARBINARY(128);index;default:''" json:"Thumb" yaml:"Thumb,omitempty"`
	ThumbSrc         string     `gorm:"type:VARBINARY(8);default:''" json:"ThumbSrc,omitempty" yaml:"ThumbSrc,omitempty"`
	CreatedAt        time.Time  `json:"CreatedAt" yaml:"-"`
	UpdatedAt        time.Time  `json:"UpdatedAt" yaml:"-"`
	PublishedAt      *time.Time `sql:"index" json:"PublishedAt,omitempty" yaml:"PublishedAt,omitempty"`
	DeletedAt        *time.Time `sql:"index" json:"DeletedAt,omitempty" yaml:"-"`
	New              bool       `gorm:"-" json:"-" yaml:"-"`
}

Label is used for photo, album and location categorization

func FindLabel

func FindLabel(s string) *Label

FindLabel returns an existing row if exists.

func FirstOrCreateLabel

func FirstOrCreateLabel(m *Label) *Label

FirstOrCreateLabel returns the existing label, inserts a new label or nil in case of errors.

func NewLabel

func NewLabel(name string, priority int) *Label

NewLabel returns a new label.

func (*Label) AfterCreate

func (m *Label) AfterCreate(scope *gorm.Scope) error

AfterCreate sets the New column used for database callback

func (*Label) BeforeCreate

func (m *Label) BeforeCreate(scope *gorm.Scope) error

BeforeCreate creates a random UID if needed before inserting a new row to the database.

func (*Label) Create

func (m *Label) Create() error

Create inserts the label to the database.

func (*Label) Delete

func (m *Label) Delete() error

Delete removes the label from the database.

func (*Label) Deleted

func (m *Label) Deleted() bool

Deleted returns true if the label is deleted.

func (m *Label) Links() Links

Links returns all share links for this entity.

func (*Label) Restore

func (m *Label) Restore() error

Restore restores the label in the database.

func (*Label) Save

func (m *Label) Save() error

Save updates the record in the database or inserts a new record if it does not already exist.

func (*Label) SetName

func (m *Label) SetName(name string)

SetName changes the label name.

func (Label) TableName

func (Label) TableName() string

TableName returns the entity table name.

func (*Label) Update

func (m *Label) Update(attr string, value interface{}) error

Update a label property in the database.

func (*Label) UpdateClassify

func (m *Label) UpdateClassify(label classify.Label) error

UpdateClassify updates a label if necessary

type LabelMap

type LabelMap map[string]Label

func (LabelMap) Get

func (m LabelMap) Get(name string) Label

func (LabelMap) PhotoLabel

func (m LabelMap) PhotoLabel(photoId uint, labelName string, uncertainty int, source string) PhotoLabel

func (LabelMap) Pointer

func (m LabelMap) Pointer(name string) *Label

type LabelPhotoCount

type LabelPhotoCount struct {
	LabelID    int
	PhotoCount int
}

type LabelPhotoCounts

type LabelPhotoCounts []LabelPhotoCount

func LabelCounts

func LabelCounts() LabelPhotoCounts

LabelCounts returns the number of photos for each label ID.

type Labels

type Labels []Label

type Lens

type Lens struct {
	ID              uint       `gorm:"primary_key" json:"ID" yaml:"ID"`
	LensSlug        string     `gorm:"type:VARBINARY(160);unique_index;" json:"Slug" yaml:"Slug,omitempty"`
	LensName        string     `gorm:"type:VARCHAR(160);" json:"Name" yaml:"Name"`
	LensMake        string     `gorm:"type:VARCHAR(160);" json:"Make" yaml:"Make,omitempty"`
	LensModel       string     `gorm:"type:VARCHAR(160);" json:"Model" yaml:"Model,omitempty"`
	LensType        string     `gorm:"type:VARCHAR(100);" json:"Type" yaml:"Type,omitempty"`
	LensDescription string     `gorm:"type:VARCHAR(2048);" json:"Description,omitempty" yaml:"Description,omitempty"`
	LensNotes       string     `gorm:"type:VARCHAR(1024);" json:"Notes,omitempty" yaml:"Notes,omitempty"`
	CreatedAt       time.Time  `json:"-" yaml:"-"`
	UpdatedAt       time.Time  `json:"-" yaml:"-"`
	DeletedAt       *time.Time `sql:"index" json:"-" yaml:"-"`
}

Lens represents camera lens (as extracted from UpdateExif metadata)

func FirstOrCreateLens

func FirstOrCreateLens(m *Lens) *Lens

FirstOrCreateLens returns the existing row, inserts a new row or nil in case of errors.

func NewLens

func NewLens(makeName string, modelName string) *Lens

NewLens creates a new camera lens entity from make and model names.

func (*Lens) Create

func (m *Lens) Create() error

Create inserts a new row to the database.

func (*Lens) String

func (m *Lens) String() string

String returns an identifier that can be used in logs.

func (Lens) TableName

func (Lens) TableName() string

TableName returns the entity table name.

func (*Lens) Unknown

func (m *Lens) Unknown() bool

Unknown returns true if the lens is not a known make or model.

type LensMap

type LensMap map[string]Lens

func (LensMap) Get

func (m LensMap) Get(name string) Lens

func (LensMap) Pointer

func (m LensMap) Pointer(name string) *Lens

type Lenses

type Lenses []Lens

Lenses represents a list of lenses.

type Link struct {
	LinkUID     string    `gorm:"type:VARBINARY(42);primary_key;" json:"UID,omitempty" yaml:"UID,omitempty"`
	ShareUID    string    `gorm:"type:VARBINARY(42);unique_index:idx_links_uid_token;" json:"ShareUID" yaml:"ShareUID"`
	ShareSlug   string    `gorm:"type:VARBINARY(160);index;" json:"Slug" yaml:"Slug,omitempty"`
	LinkToken   string    `gorm:"type:VARBINARY(160);unique_index:idx_links_uid_token;" json:"Token" yaml:"Token,omitempty"`
	LinkExpires int       `json:"Expires" yaml:"Expires,omitempty"`
	LinkViews   uint      `json:"Views" yaml:"-"`
	MaxViews    uint      `json:"MaxViews" yaml:"-"`
	HasPassword bool      `json:"VerifyPassword" yaml:"VerifyPassword,omitempty"`
	Comment     string    `gorm:"size:512;" json:"Comment,omitempty" yaml:"Comment,omitempty"`
	Perm        uint      `json:"Perm,omitempty" yaml:"Perm,omitempty"`
	RefID       string    `gorm:"type:VARBINARY(16);" json:"-" yaml:"-"`
	CreatedBy   string    `gorm:"type:VARBINARY(42);index" json:"CreatedBy,omitempty" yaml:"CreatedBy,omitempty"`
	CreatedAt   time.Time `deepcopier:"skip" json:"CreatedAt" yaml:"CreatedAt"`
	ModifiedAt  time.Time `deepcopier:"skip" json:"ModifiedAt" yaml:"ModifiedAt"`
}

Link represents a link to share content.

func FindLink(linkUid string) *Link

FindLink finds the link with the specified UID or nil if it is not found.

func NewLink(shareUid string, canComment, canEdit bool) Link

NewLink creates a sharing link.

func NewUserLink(shareUid, userUid string) Link

NewUserLink creates a sharing link owned by a user.

func (*Link) BeforeCreate

func (m *Link) BeforeCreate(scope *gorm.Scope) error

BeforeCreate creates a random UID if needed before inserting a new row to the database.

func (*Link) Delete

func (m *Link) Delete() error

Delete permanently deletes the link.

func (*Link) Expired

func (m *Link) Expired() bool

Expired checks if the share link has expired.

func (*Link) ExpiresAt

func (m *Link) ExpiresAt() *time.Time

ExpiresAt returns the time when the share link expires or nil if it never expires.

func (*Link) InvalidPassword

func (m *Link) InvalidPassword(password string) bool

InvalidPassword checks if the password provided to use the share link is invalid.

func (*Link) Redeem

func (m *Link) Redeem() *Link

Redeem increases the number of link visitors by one.

func (*Link) Save

func (m *Link) Save() error

Save updates the record in the database or inserts a new record if it does not already exist.

func (*Link) SetPassword

func (m *Link) SetPassword(password string) error

SetPassword sets the password required to use the share link.

func (*Link) SetSlug

func (m *Link) SetSlug(s string)

SetSlug sets the URL slug of the link.

func (*Link) String

func (m *Link) String() string

String returns a human-readable identifier for use in logs.

func (Link) TableName

func (Link) TableName() string

TableName returns the entity table name.

type LinkMap

type LinkMap map[string]Link
type Links []Link
func FindLinks(token, shared string) (found Links)

FindLinks returns a slice of links for a token and a share UID (at least one must be specified).

func FindValidLinks(token, shared string) (found Links)

FindValidLinks returns a slice of non-expired links for a token and share UID (at least one must be provided).

type Map

type Map map[string]interface{}

Map is an alias for map[string]interface{}.

func ModelValues

func ModelValues(m interface{}, omit ...string) (result Map, omitted []interface{}, err error)

ModelValues extracts Values from an entity model.

type Marker

type Marker struct {
	MarkerUID     string `gorm:"type:VARBINARY(42);primary_key;auto_increment:false;" json:"UID" yaml:"UID"`
	FileUID       string `gorm:"type:VARBINARY(42);index;default:'';" json:"FileUID" yaml:"FileUID"`
	MarkerType    string `gorm:"type:VARBINARY(8);default:'';" json:"Type" yaml:"Type"`
	MarkerSrc     string `gorm:"type:VARBINARY(8);default:'';" json:"Src" yaml:"Src,omitempty"`
	MarkerName    string `gorm:"type:VARCHAR(160);" json:"Name" yaml:"Name,omitempty"`
	MarkerReview  bool   `json:"Review" yaml:"Review,omitempty"`
	MarkerInvalid bool   `json:"Invalid" yaml:"Invalid,omitempty"`
	SubjUID       string `gorm:"type:VARBINARY(42);index:idx_markers_subj_uid_src;" json:"SubjUID" yaml:"SubjUID,omitempty"`
	SubjSrc       string `gorm:"type:VARBINARY(8);index:idx_markers_subj_uid_src;default:'';" json:"SubjSrc" yaml:"SubjSrc,omitempty"`

	FaceID   string  `gorm:"type:VARBINARY(64);index;" json:"FaceID" yaml:"FaceID,omitempty"`
	FaceDist float64 `gorm:"default:-1;" json:"FaceDist" yaml:"FaceDist,omitempty"`

	EmbeddingsJSON json.RawMessage `gorm:"type:MEDIUMBLOB;" json:"-" yaml:"EmbeddingsJSON,omitempty"`

	LandmarksJSON json.RawMessage `gorm:"type:MEDIUMBLOB;" json:"-" yaml:"LandmarksJSON,omitempty"`
	X             float32         `gorm:"type:FLOAT;" json:"X" yaml:"X,omitempty"`
	Y             float32         `gorm:"type:FLOAT;" json:"Y" yaml:"Y,omitempty"`
	W             float32         `gorm:"type:FLOAT;" json:"W" yaml:"W,omitempty"`
	H             float32         `gorm:"type:FLOAT;" json:"H" yaml:"H,omitempty"`
	Q             int             `json:"Q" yaml:"Q,omitempty"`
	Size          int             `gorm:"default:-1;" json:"Size" yaml:"Size,omitempty"`
	Score         int             `gorm:"type:SMALLINT;" json:"Score" yaml:"Score,omitempty"`
	Thumb         string          `gorm:"type:VARBINARY(128);index;default:'';" json:"Thumb" yaml:"Thumb,omitempty"`
	MatchedAt     *time.Time      `sql:"index" json:"MatchedAt" yaml:"MatchedAt,omitempty"`
	CreatedAt     time.Time
	UpdatedAt     time.Time
	// contains filtered or unexported fields
}

Marker represents an image marker point.

func CreateMarkerIfNotExists

func CreateMarkerIfNotExists(m *Marker) (*Marker, error)

CreateMarkerIfNotExists updates a marker in the database or creates a new one if needed.

func FindMarker

func FindMarker(markerUid string) *Marker

FindMarker returns an existing row if exists.

func NewFaceMarker

func NewFaceMarker(f face.Face, file File, subjUid string) *Marker

NewFaceMarker creates a new entity.

func NewMarker

func NewMarker(file File, area crop.Area, subjUID, markerSrc, markerType string, size, score int) *Marker

NewMarker creates a new entity.

func (*Marker) BeforeCreate

func (m *Marker) BeforeCreate(scope *gorm.Scope) error

BeforeCreate creates a random UID if needed before inserting a new row to the database.

func (*Marker) Bottom

func (m *Marker) Bottom() float64

Bottom returns the bottom Y coordinate as float64.

func (*Marker) ClearFace

func (m *Marker) ClearFace() (updated bool, err error)

ClearFace removes an existing face association.

func (*Marker) ClearSubject

func (m *Marker) ClearSubject(src string) error

ClearSubject removes an existing subject association, and reports a collision.

func (*Marker) Create

func (m *Marker) Create() error

Create inserts a new row to the database.

func (*Marker) DetectedFace

func (m *Marker) DetectedFace() bool

DetectedFace tests if the marker is an automatically detected face.

func (*Marker) Embeddings

func (m *Marker) Embeddings() face.Embeddings

Embeddings returns parsed marker embeddings.

func (*Marker) Face

func (m *Marker) Face() (f *Face)

Face returns a matching face entity if possible.

func (*Marker) HasFace

func (m *Marker) HasFace(f *Face, dist float64) bool

HasFace tests if the marker already has the best matching face.

func (*Marker) InvalidArea

func (m *Marker) InvalidArea() error

InvalidArea tests if the marker area is invalid or out of range.

func (*Marker) Left

func (m *Marker) Left() float64

Left returns the left X coordinate as float64.

func (*Marker) MarshalJSON

func (m *Marker) MarshalJSON() ([]byte, error)

MarshalJSON returns the JSON encoding.

func (*Marker) Matched

func (m *Marker) Matched() error

Matched updates the match timestamp.

func (*Marker) Overlap

func (m *Marker) Overlap(marker Marker) (x, y float64)

Overlap calculates the overlap of two markers.

func (*Marker) OverlapArea

func (m *Marker) OverlapArea(marker Marker) (area float64)

OverlapArea calculates the overlap area of two markers.

func (*Marker) OverlapPercent

func (m *Marker) OverlapPercent(marker Marker) int

OverlapPercent calculates the overlap ratio of two markers in percent.

func (*Marker) RefreshPhotos

func (m *Marker) RefreshPhotos() error

RefreshPhotos flags related photos for metadata maintenance.

func (*Marker) Right

func (m *Marker) Right() float64

Right returns the right X coordinate as float64.

func (*Marker) Save

func (m *Marker) Save() error

Save updates the record in the database or inserts a new record if it does not already exist.

func (*Marker) SaveForm

func (m *Marker) SaveForm(f form.Marker) (changed bool, err error)

SaveForm updates the entity using form data and stores it in the database.

func (*Marker) SetEmbeddings

func (m *Marker) SetEmbeddings(e face.Embeddings)

SetEmbeddings assigns new face emebddings to the marker.

func (*Marker) SetFace

func (m *Marker) SetFace(f *Face, dist float64) (updated bool, err error)

SetFace sets a new face for this marker.

func (*Marker) SetName

func (m *Marker) SetName(name, src string) (changed bool, err error)

SetName changes the marker name.

func (*Marker) Subject

func (m *Marker) Subject() (subj *Subject)

Subject returns the matching subject or nil.

func (*Marker) SubjectName

func (m *Marker) SubjectName() string

SubjectName returns the matching subject's name.

func (*Marker) Surface

func (m *Marker) Surface() float64

Surface returns the surface area.

func (*Marker) SurfaceRatio

func (m *Marker) SurfaceRatio(area float64) float64

SurfaceRatio returns the surface ratio.

func (*Marker) SyncSubject

func (m *Marker) SyncSubject(updateRelated bool) (err error)

SyncSubject maintains the marker subject relationship.

func (Marker) TableName

func (Marker) TableName() string

TableName returns the entity table name.

func (*Marker) Top

func (m *Marker) Top() float64

Top returns the top Y coordinate as float64.

func (*Marker) Uncertainty

func (m *Marker) Uncertainty() int

Uncertainty returns the detection uncertainty based on the score in percent.

func (*Marker) Unsaved

func (m *Marker) Unsaved() bool

Unsaved tests if the marker hasn't been saved yet.

func (*Marker) Update

func (m *Marker) Update(attr string, value interface{}) error

Update updates a column in the database.

func (*Marker) UpdateFile

func (m *Marker) UpdateFile(file *File) (updated bool)

UpdateFile sets the file uid and thumb and updates the index if the marker already exists.

func (*Marker) Updates

func (m *Marker) Updates(values interface{}) error

Updates multiple columns in the database.

func (*Marker) ValidFace

func (m *Marker) ValidFace() bool

ValidFace tests if the marker is a valid face.

type MarkerMap

type MarkerMap map[string]Marker

func (MarkerMap) Get

func (m MarkerMap) Get(name string) Marker

func (MarkerMap) Pointer

func (m MarkerMap) Pointer(name string) *Marker

type Markers

type Markers []Marker

Markers represents a list of markers.

func FindMarkers

func FindMarkers(fileUid string) (Markers, error)

FindMarkers returns up to 1000 markers for a given file uid.

func (*Markers) Append

func (m *Markers) Append(marker Marker)

Append adds a marker.

func (*Markers) AppendWithEmbedding

func (m *Markers) AppendWithEmbedding(marker Marker)

AppendWithEmbedding adds a marker with face embedding.

func (Markers) Contains

func (m Markers) Contains(other Marker) bool

Contains returns true if a marker at the same position already exists.

func (Markers) DetectedFaceCount

func (m Markers) DetectedFaceCount() (count int)

DetectedFaceCount returns the number of automatically detected face markers.

func (Markers) Labels

func (m Markers) Labels() (result classify.Labels)

Labels returns matching labels.

func (Markers) Save

func (m Markers) Save(file *File) (count int, err error)

Save stores the markers in the database.

func (Markers) SubjectNames

func (m Markers) SubjectNames() (names []string)

SubjectNames returns known subject names.

func (Markers) Unsaved

func (m Markers) Unsaved() bool

Unsaved tests if any marker hasn't been saved yet.

func (Markers) ValidFaceCount

func (m Markers) ValidFaceCount() (count int)

ValidFaceCount returns the number of valid face markers.

type MultiStrings

type MultiStrings map[string][]string

type Passcode

type Passcode struct {
	UID     string `gorm:"type:VARBINARY(255);primary_key;" json:"UID"`
	KeyType string `gorm:"size:64;default:'';primary_key;" json:"Type" yaml:"Type"`
	KeyURL  string `gorm:"size:2048;default:'';column:key_url;" json:"-" yaml:"-"`

	RecoveryCode string     `gorm:"size:255;default:'';" json:"-" yaml:"-"`
	VerifiedAt   *time.Time `json:"VerifiedAt" yaml:"-"`
	ActivatedAt  *time.Time `json:"ActivatedAt" yaml:"-"`
	CreatedAt    time.Time  `json:"CreatedAt" yaml:"-"`
	UpdatedAt    time.Time  `json:"UpdatedAt" yaml:"-"`
	// contains filtered or unexported fields
}

Passcode represents a two-factor authentication key.

func FindPasscode

func FindPasscode(find Passcode) *Passcode

FindPasscode returns the matching key or nil if it was not found.

func NewPasscode

func NewPasscode(uid string, keyUrl, recoveryCode string) (*Passcode, error)

NewPasscode returns a new two-factor authentication key or nil if no valid entity UID was provided.

func (*Passcode) Activate

func (m *Passcode) Activate() (err error)

Activate activates the passcode.

func (*Passcode) Create

func (m *Passcode) Create() (err error)

Create new entity in the database.

func (*Passcode) Delete

func (m *Passcode) Delete() (err error)

Delete deletes the entity record.

func (*Passcode) GenerateCode

func (m *Passcode) GenerateCode() (code string, err error)

GenerateCode returns a valid passcode for testing.

func (*Passcode) Image

func (m *Passcode) Image(size int) (image.Image, error)

Image returns an image with a QR Code that can be used to initialize compatible authenticator apps.

func (*Passcode) InvalidUID

func (m *Passcode) InvalidUID() bool

InvalidUID checks if the entity UID is invalid.

func (*Passcode) Key

func (m *Passcode) Key() *otp.Key

Key returns the parsed two-factor authentication key or nil if the KeyURL is invalid.

func (*Passcode) MarshalJSON

func (m *Passcode) MarshalJSON() ([]byte, error)

MarshalJSON returns the JSON encoding.

func (*Passcode) PNG

func (m *Passcode) PNG(size int) *bytes.Buffer

PNG returns a PNG image buffer with a QR Code that can be used to initialize compatible authenticator apps.

func (*Passcode) Save

func (m *Passcode) Save() (err error)

Save updates the record in the database or inserts a new record if it does not exist yet.

func (*Passcode) Secret

func (m *Passcode) Secret() string

Secret returns the key secret or an empty string if none is set.

func (*Passcode) SetKey

func (m *Passcode) SetKey(key *otp.Key) error

SetKey sets a new two-factor authentication key.

func (*Passcode) SetKeyURL

func (m *Passcode) SetKeyURL(keyUrl string) error

SetKeyURL sets a new two-factor authentication key based on the URL provided.

func (*Passcode) SetUID

func (m *Passcode) SetUID(uid string) *Passcode

SetUID assigns a valid entity UID.

func (Passcode) TableName

func (Passcode) TableName() string

TableName returns the entity table name.

func (*Passcode) Type

func (m *Passcode) Type() authn.KeyType

Type returns the normalized key type.

func (*Passcode) Updates

func (m *Passcode) Updates(values interface{}) error

Updates multiple properties in the database.

func (*Passcode) Valid

func (m *Passcode) Valid(code string) (valid bool, recovery bool, err error)

Valid checks if the passcode provided is valid.

type PasscodeMap

type PasscodeMap map[string]Passcode

func (PasscodeMap) Get

func (m PasscodeMap) Get(name string) Passcode

func (PasscodeMap) Pointer

func (m PasscodeMap) Pointer(name string) *Passcode

type Password

type Password struct {
	UID       string    `gorm:"type:VARBINARY(255);primary_key;" json:"UID"`
	Hash      string    `deepcopier:"skip" gorm:"type:VARBINARY(255);" json:"Hash"`
	CreatedAt time.Time `deepcopier:"skip" json:"CreatedAt"`
	UpdatedAt time.Time `deepcopier:"skip" json:"UpdatedAt"`
}

Password represents a password hash.

func FindPassword

func FindPassword(uid string) *Password

FindPassword returns an entity pointer if exists.

func NewPassword

func NewPassword(uid, pw string, allowHash bool) Password

NewPassword creates a new password instance.

func (*Password) Cost

func (m *Password) Cost() (int, error)

Cost returns the hashing cost of the currently set password.

func (*Password) Create

func (m *Password) Create() error

Create inserts a new row to the database.

func (*Password) Empty

func (m *Password) Empty() bool

Empty checks if a password has not been set yet.

func (*Password) Invalid

func (m *Password) Invalid(s string) bool

Invalid checks if the specified password is incorrect.

func (*Password) Save

func (m *Password) Save() error

Save updates the record in the database or inserts a new record if it does not already exist.

func (*Password) SetPassword

func (m *Password) SetPassword(pw string, allowHash bool) error

SetPassword sets a new password stored as hash.

func (*Password) String

func (m *Password) String() string

String returns the BCrypt Password Hash.

func (Password) TableName

func (Password) TableName() string

TableName returns the entity table name.

func (*Password) Valid

func (m *Password) Valid(s string) bool

Valid checks if the password is correct.

type PasswordMap

type PasswordMap map[string]Password

func (PasswordMap) Get

func (m PasswordMap) Get(name string) Password

func (PasswordMap) Pointer

func (m PasswordMap) Pointer(name string) *Password

type People

type People []Person

People represents a list of people.

type Person

type Person struct {
	SubjUID      string `json:"UID"`
	SubjName     string `json:"Name"`
	SubjAlias    string `json:"Alias"`
	SubjFavorite bool   `json:"Favorite"`
	SubjHidden   bool   `json:"Hidden"`
}

Person represents a subject with type person.

func NewPerson

func NewPerson(subj Subject) *Person

NewPerson returns a new entity.

func (*Person) AfterFind

func (m *Person) AfterFind() (err error)

AfterFind is a hook that updates the name cache after querying.

func (*Person) MarshalJSON

func (m *Person) MarshalJSON() ([]byte, error)

MarshalJSON returns the JSON encoding.

type Photo

type Photo struct {
	ID               uint          `gorm:"primary_key" yaml:"-"`
	UUID             string        `gorm:"type:VARBINARY(64);index;" json:"DocumentID,omitempty" yaml:"DocumentID,omitempty"`
	TakenAt          time.Time     `gorm:"type:DATETIME;index:idx_photos_taken_uid;" json:"TakenAt" yaml:"TakenAt"`
	TakenAtLocal     time.Time     `gorm:"type:DATETIME;" json:"TakenAtLocal" yaml:"TakenAtLocal"`
	TakenSrc         string        `gorm:"type:VARBINARY(8);" json:"TakenSrc" yaml:"TakenSrc,omitempty"`
	PhotoUID         string        `gorm:"type:VARBINARY(42);unique_index;index:idx_photos_taken_uid;" json:"UID" yaml:"UID"`
	PhotoType        string        `gorm:"type:VARBINARY(8);default:'image';" json:"Type" yaml:"Type"`
	TypeSrc          string        `gorm:"type:VARBINARY(8);" json:"TypeSrc" yaml:"TypeSrc,omitempty"`
	PhotoTitle       string        `gorm:"type:VARCHAR(200);" json:"Title" yaml:"Title"`
	TitleSrc         string        `gorm:"type:VARBINARY(8);" json:"TitleSrc" yaml:"TitleSrc,omitempty"`
	PhotoDescription string        `gorm:"type:VARCHAR(4096);" json:"Description" yaml:"Description,omitempty"`
	DescriptionSrc   string        `gorm:"type:VARBINARY(8);" json:"DescriptionSrc" yaml:"DescriptionSrc,omitempty"`
	PhotoPath        string        `gorm:"type:VARBINARY(1024);index:idx_photos_path_name;" json:"Path" yaml:"-"`
	PhotoName        string        `gorm:"type:VARBINARY(255);index:idx_photos_path_name;" json:"Name" yaml:"-"`
	OriginalName     string        `gorm:"type:VARBINARY(755);" json:"OriginalName" yaml:"OriginalName,omitempty"`
	PhotoStack       int8          `json:"Stack" yaml:"Stack,omitempty"`
	PhotoFavorite    bool          `json:"Favorite" yaml:"Favorite,omitempty"`
	PhotoPrivate     bool          `json:"Private" yaml:"Private,omitempty"`
	PhotoScan        bool          `json:"Scan" yaml:"Scan,omitempty"`
	PhotoPanorama    bool          `json:"Panorama" yaml:"Panorama,omitempty"`
	TimeZone         string        `gorm:"type:VARBINARY(64);" json:"TimeZone" yaml:"TimeZone,omitempty"`
	PlaceID          string        `gorm:"type:VARBINARY(42);index;default:'zz'" json:"PlaceID" yaml:"-"`
	PlaceSrc         string        `gorm:"type:VARBINARY(8);" json:"PlaceSrc" yaml:"PlaceSrc,omitempty"`
	CellID           string        `gorm:"type:VARBINARY(42);index;default:'zz'" json:"CellID" yaml:"-"`
	CellAccuracy     int           `json:"CellAccuracy" yaml:"CellAccuracy,omitempty"`
	PhotoAltitude    int           `json:"Altitude" yaml:"Altitude,omitempty"`
	PhotoLat         float32       `gorm:"type:FLOAT;index;" json:"Lat" yaml:"Lat,omitempty"`
	PhotoLng         float32       `gorm:"type:FLOAT;index;" json:"Lng" yaml:"Lng,omitempty"`
	PhotoCountry     string        `gorm:"type:VARBINARY(2);index:idx_photos_country_year_month;default:'zz'" json:"Country" yaml:"-"`
	PhotoYear        int           `gorm:"index:idx_photos_ymd;index:idx_photos_country_year_month;" json:"Year" yaml:"Year"`
	PhotoMonth       int           `gorm:"index:idx_photos_ymd;index:idx_photos_country_year_month;" json:"Month" yaml:"Month"`
	PhotoDay         int           `gorm:"index:idx_photos_ymd" json:"Day" yaml:"Day"`
	PhotoIso         int           `json:"Iso" yaml:"ISO,omitempty"`
	PhotoExposure    string        `gorm:"type:VARBINARY(64);" json:"Exposure" yaml:"Exposure,omitempty"`
	PhotoFNumber     float32       `gorm:"type:FLOAT;" json:"FNumber" yaml:"FNumber,omitempty"`
	PhotoFocalLength int           `json:"FocalLength" yaml:"FocalLength,omitempty"`
	PhotoQuality     int           `gorm:"type:SMALLINT" json:"Quality" yaml:"Quality,omitempty"`
	PhotoFaces       int           `json:"Faces,omitempty" yaml:"Faces,omitempty"`
	PhotoResolution  int           `gorm:"type:SMALLINT" json:"Resolution" yaml:"-"`
	PhotoDuration    time.Duration `json:"Duration,omitempty" yaml:"Duration,omitempty"`
	PhotoColor       int16         `json:"Color" yaml:"-"`
	CameraID         uint          `gorm:"index:idx_photos_camera_lens;default:1" json:"CameraID" yaml:"-"`
	CameraSerial     string        `gorm:"type:VARBINARY(160);" json:"CameraSerial" yaml:"CameraSerial,omitempty"`
	CameraSrc        string        `gorm:"type:VARBINARY(8);" json:"CameraSrc" yaml:"-"`
	LensID           uint          `gorm:"index:idx_photos_camera_lens;default:1" json:"LensID" yaml:"-"`
	Details          *Details      `` /* 127-byte string literal not displayed */
	Camera           *Camera       `gorm:"association_autoupdate:false;association_autocreate:false;association_save_reference:false" json:"Camera" yaml:"-"`
	Lens             *Lens         `gorm:"association_autoupdate:false;association_autocreate:false;association_save_reference:false" json:"Lens" yaml:"-"`
	Cell             *Cell         `gorm:"association_autoupdate:false;association_autocreate:false;association_save_reference:false" json:"Cell" yaml:"-"`
	Place            *Place        `gorm:"association_autoupdate:false;association_autocreate:false;association_save_reference:false" json:"Place" yaml:"-"`
	Keywords         []Keyword     `json:"-" yaml:"-"`
	Albums           []Album       `json:"Albums" yaml:"-"`
	Files            []File        `yaml:"-"`
	Labels           []PhotoLabel  `yaml:"-"`
	CreatedBy        string        `gorm:"type:VARBINARY(42);index" json:"CreatedBy,omitempty" yaml:"CreatedBy,omitempty"`
	CreatedAt        time.Time     `yaml:"CreatedAt,omitempty"`
	UpdatedAt        time.Time     `yaml:"UpdatedAt,omitempty"`
	EditedAt         *time.Time    `yaml:"EditedAt,omitempty"`
	PublishedAt      *time.Time    `sql:"index" json:"PublishedAt,omitempty" yaml:"PublishedAt,omitempty"`
	CheckedAt        *time.Time    `sql:"index" yaml:"-"`
	EstimatedAt      *time.Time    `json:"EstimatedAt,omitempty" yaml:"-"`
	DeletedAt        *time.Time    `sql:"index" yaml:"DeletedAt,omitempty"`
}

Photo represents a photo, all its properties, and link to all its images and sidecar files.

func FindPhoto

func FindPhoto(find Photo) *Photo

FindPhoto fetches the matching record or returns null if it was not found.

func NewPhoto

func NewPhoto(stackable bool) Photo

NewPhoto creates a new photo with default values.

func NewUserPhoto

func NewUserPhoto(stackable bool, userUid string) Photo

NewUserPhoto creates a photo owned by a user.

func (*Photo) AddLabels

func (m *Photo) AddLabels(labels classify.Labels)

AddLabels updates the entity with additional or updated label information.

func (*Photo) AdoptPlace

func (m *Photo) AdoptPlace(other Photo, source string, force bool)

AdoptPlace sets the place based on another photo.

func (*Photo) AllFiles

func (m *Photo) AllFiles() (files Files)

AllFiles returns all files of this photo.

func (*Photo) AllFilesMissing

func (m *Photo) AllFilesMissing() bool

AllFilesMissing returns true, if all files for this photo are missing.

func (*Photo) Approve

func (m *Photo) Approve() error

Approve approves a photo in review.

func (*Photo) Archive

func (m *Photo) Archive() error

Archive removes the photo from albums and flags it as archived (soft delete).

func (*Photo) BeforeCreate

func (m *Photo) BeforeCreate(scope *gorm.Scope) error

BeforeCreate creates a random UID if needed before inserting a new row to the database.

func (*Photo) BeforeSave

func (m *Photo) BeforeSave(scope *gorm.Scope) error

BeforeSave ensures the existence of TakenAt properties before indexing or updating a photo

func (*Photo) ClassifyLabels

func (m *Photo) ClassifyLabels() classify.Labels

ClassifyLabels returns all associated labels as classify.Labels

func (*Photo) CountryCode

func (m *Photo) CountryCode() string

CountryCode returns the photo country code.

func (*Photo) CountryName

func (m *Photo) CountryName() string

CountryName returns the photo country name.

func (*Photo) Create

func (m *Photo) Create() error

Create inserts a new photo to the database.

func (*Photo) Delete

func (m *Photo) Delete(permanently bool) (files Files, err error)

Delete deletes the photo from the index.

func (*Photo) DeletePermanently

func (m *Photo) DeletePermanently() (files Files, err error)

DeletePermanently permanently removes a photo from the index.

func (*Photo) EstimateCountry

func (m *Photo) EstimateCountry()

EstimateCountry updates the photo with an estimated country if possible.

func (*Photo) EstimateLocation

func (m *Photo) EstimateLocation(force bool)

EstimateLocation updates the photo with an estimated place and country if possible.

func (*Photo) FaceCount

func (m *Photo) FaceCount() int

FaceCount returns the current number of faces on the primary picture.

func (*Photo) FileTitle

func (m *Photo) FileTitle() string

FileTitle returns a photo title based on the file name and/or path.

func (*Photo) Find

func (m *Photo) Find() *Photo

Find fetches the matching record.

func (*Photo) FirstOrCreate

func (m *Photo) FirstOrCreate() *Photo

FirstOrCreate fetches an existing row from the database or inserts a new one.

func (*Photo) GetDetails

func (m *Photo) GetDetails() *Details

GetDetails returns the photo description details.

func (*Photo) GetTakenAt

func (m *Photo) GetTakenAt() time.Time

GetTakenAt returns UTC time for TakenAtLocal.

func (*Photo) GetTakenAtLocal

func (m *Photo) GetTakenAtLocal() time.Time

GetTakenAtLocal returns local time for TakenAt.

func (*Photo) GetTimeZone

func (m *Photo) GetTimeZone() string

GetTimeZone uses PhotoLat and PhotoLng to guess the time zone of the photo.

func (*Photo) HasCountry

func (m *Photo) HasCountry() bool

HasCountry checks if the photo has a known country.

func (*Photo) HasDescription

func (m *Photo) HasDescription() bool

HasDescription checks if the photo has a description.

func (*Photo) HasID

func (m *Photo) HasID() bool

HasID checks if the photo has an id and uid assigned to it.

func (*Photo) HasLatLng

func (m *Photo) HasLatLng() bool

HasLatLng checks if the photo has a latitude and longitude.

func (*Photo) HasLocation

func (m *Photo) HasLocation() bool

HasLocation tests if the photo has a known location.

func (*Photo) HasPlace

func (m *Photo) HasPlace() bool

HasPlace checks if the photo has a known place.

func (*Photo) HasTitle

func (m *Photo) HasTitle() bool

HasTitle checks if the photo has a title.

func (*Photo) Identical

func (m *Photo) Identical(includeMeta, includeUuid bool) (identical Photos, err error)

Identical returns identical photos that can be merged.

func (*Photo) IndexKeywords

func (m *Photo) IndexKeywords() error

IndexKeywords adds given keywords to the photo entry

func (m *Photo) Links() Links

Links returns all share links for this entity.

func (*Photo) LoadFromYaml

func (m *Photo) LoadFromYaml(fileName string) error

LoadFromYaml photo data from a YAML file.

func (*Photo) LoadLocation

func (m *Photo) LoadLocation() error

LoadLocation loads the photo location from the database if not done already.

func (*Photo) LoadPlace

func (m *Photo) LoadPlace() error

LoadPlace loads the photo place from the database if not done already.

func (*Photo) LocationLoaded

func (m *Photo) LocationLoaded() bool

LocationLoaded tests if the photo has a known location that is currently loaded.

func (*Photo) MapKey

func (m *Photo) MapKey() string

MapKey returns a key referencing time and location for indexing.

func (*Photo) Merge

func (m *Photo) Merge(mergeMeta, mergeUuid bool) (original Photo, merged Photos, err error)

Merge photo with identical ones.

func (*Photo) NoCameraSerial

func (m *Photo) NoCameraSerial() bool

NoCameraSerial checks if the photo has no CameraSerial

func (*Photo) NoDescription

func (m *Photo) NoDescription() bool

NoDescription returns true if the photo has no description.

func (*Photo) NoLatLng

func (m *Photo) NoLatLng() bool

NoLatLng checks if latitude and longitude are missing.

func (*Photo) NoTitle

func (m *Photo) NoTitle() bool

NoTitle checks if the photo has no Title

func (*Photo) Optimize

func (m *Photo) Optimize(mergeMeta, mergeUuid, estimatePlace, force bool) (updated bool, merged Photos, err error)

Optimize photo data, improve if possible.

func (*Photo) PlaceLoaded

func (m *Photo) PlaceLoaded() bool

PlaceLoaded checks if the photo has a known place that is currently loaded.

func (*Photo) Position

func (m *Photo) Position() geo.Position

Position returns the coordinates as geo.Position.

func (*Photo) PreloadAlbums

func (m *Photo) PreloadAlbums()

PreloadAlbums prepares gorm scope to retrieve photo albums

func (*Photo) PreloadFiles

func (m *Photo) PreloadFiles()

PreloadFiles prepares gorm scope to retrieve photo file

func (*Photo) PreloadKeywords

func (m *Photo) PreloadKeywords()

PreloadKeywords prepares gorm scope to retrieve photo keywords

func (*Photo) PreloadMany

func (m *Photo) PreloadMany()

PreloadMany prepares gorm scope to retrieve photo file, albums and keywords

func (*Photo) PrimaryFile

func (m *Photo) PrimaryFile() (*File, error)

PrimaryFile returns the primary file for this photo.

func (*Photo) QualityScore

func (m *Photo) QualityScore() (score int)

QualityScore returns a score based on photo properties like size and metadata.

func (*Photo) React

func (m *Photo) React(user *User, reaction react.Emoji) error

React adds or updates a user reaction.

func (*Photo) RemoveKeyword

func (m *Photo) RemoveKeyword(w string) error

RemoveKeyword removes a word from photo keywords.

func (*Photo) RemoveLocation

func (m *Photo) RemoveLocation(source string, force bool)

RemoveLocation removes the current location.

func (*Photo) RemoveLocationLabels

func (m *Photo) RemoveLocationLabels()

RemoveLocationLabels removes existing location labels.

func (*Photo) ResolvePrimary

func (m *Photo) ResolvePrimary() error

ResolvePrimary ensures there is only one primary file for a photo.

func (*Photo) Restore

func (m *Photo) Restore() error

Restore removes the archive flag (undo soft delete).

func (*Photo) Save

func (m *Photo) Save() error

Save updates the record in the database or inserts a new record if it does not already exist.

func (*Photo) SaveAsYaml

func (m *Photo) SaveAsYaml(fileName string) error

SaveAsYaml saves photo data as YAML file.

func (*Photo) SaveDetails

func (m *Photo) SaveDetails() error

SaveDetails writes photo details to the database.

func (*Photo) SaveLabels

func (m *Photo) SaveLabels() error

SaveLabels updates the photo after labels have changed.

func (*Photo) SaveLocation

func (m *Photo) SaveLocation() error

SaveLocation updates location data and saves the photo metadata back to the index.

func (*Photo) SetAltitude

func (m *Photo) SetAltitude(altitude float64, source string)

SetAltitude sets the photo altitude if not empty and from an acceptable source.

func (*Photo) SetCamera

func (m *Photo) SetCamera(camera *Camera, source string)

SetCamera updates the camera.

func (*Photo) SetCameraSerial

func (m *Photo) SetCameraSerial(s string)

SetCameraSerial updates the camera serial number.

func (*Photo) SetCoordinates

func (m *Photo) SetCoordinates(lat, lng float32, altitude float64, source string)

SetCoordinates changes the photo lat, lng and altitude if not empty and from an acceptable source.

func (*Photo) SetDescription

func (m *Photo) SetDescription(desc, source string)

SetDescription changes the photo description if not empty and from the same source.

func (*Photo) SetExposure

func (m *Photo) SetExposure(focalLength int, fNumber float32, iso int, exposure, source string)

SetExposure updates the photo exposure details.

func (*Photo) SetFavorite

func (m *Photo) SetFavorite(favorite bool) error

SetFavorite updates the favorite flag of a photo.

func (*Photo) SetLens

func (m *Photo) SetLens(lens *Lens, source string)

SetLens updates the lens.

func (*Photo) SetPosition

func (m *Photo) SetPosition(pos geo.Position, source string, force bool)

SetPosition sets a position estimate.

func (*Photo) SetPrimary

func (m *Photo) SetPrimary(fileUid string) (err error)

SetPrimary sets a new primary file.

func (*Photo) SetStack

func (m *Photo) SetStack(stack int8)

SetStack updates the stack flag of a photo.

func (*Photo) SetTakenAt

func (m *Photo) SetTakenAt(taken, local time.Time, zone, source string)

SetTakenAt changes the photo date if not empty and from the same source.

func (*Photo) SetTitle

func (m *Photo) SetTitle(title, source string)

SetTitle changes the photo title and clips it to 300 characters.

func (*Photo) Stackable

func (m *Photo) Stackable() bool

Stackable tests if the photo may be stacked.

func (*Photo) String

func (m *Photo) String() string

String returns the id or name as string.

func (*Photo) SubjectKeywords

func (m *Photo) SubjectKeywords() []string

SubjectKeywords returns keywords for all known subject names.

func (*Photo) SubjectNames

func (m *Photo) SubjectNames() []string

SubjectNames returns all known subject names.

func (*Photo) SyncKeywordLabels

func (m *Photo) SyncKeywordLabels() error

SyncKeywordLabels maintains the label / photo relationship for existing labels and keywords.

func (Photo) TableName

func (Photo) TableName() string

TableName returns the entity table name.

func (*Photo) TimeZoneUTC

func (m *Photo) TimeZoneUTC() bool

TimeZoneUTC tests if the current time zone is UTC.

func (*Photo) TrustedLocation

func (m *Photo) TrustedLocation() bool

TrustedLocation tests if the photo has a known location from a trusted source.

func (*Photo) TrustedTime

func (m *Photo) TrustedTime() bool

TrustedTime tests if the photo has a known date and time from a trusted source.

func (*Photo) UnReact

func (m *Photo) UnReact(user *User) error

UnReact deletes a previous user reaction, if any.

func (*Photo) UnknownCamera

func (m *Photo) UnknownCamera() bool

UnknownCamera test if the camera is unknown.

func (*Photo) UnknownCountry

func (m *Photo) UnknownCountry() bool

UnknownCountry checks if the photo has an unknown country.

func (*Photo) UnknownLens

func (m *Photo) UnknownLens() bool

UnknownLens test if the lens is unknown.

func (*Photo) UnknownLocation

func (m *Photo) UnknownLocation() bool

UnknownLocation tests if the photo has an unknown location.

func (*Photo) UnknownPlace

func (m *Photo) UnknownPlace() bool

UnknownPlace checks if the photo has an unknown place.

func (*Photo) Update

func (m *Photo) Update(attr string, value interface{}) error

Update a column in the database.

func (*Photo) UpdateAndSaveTitle

func (m *Photo) UpdateAndSaveTitle() error

UpdateAndSaveTitle updates the photo title and saves it.

func (*Photo) UpdateDateFields

func (m *Photo) UpdateDateFields()

UpdateDateFields updates internal date fields.

func (*Photo) UpdateDescription

func (m *Photo) UpdateDescription(people []string)

UpdateDescription updates the photo descriptions based on available metadata.

func (*Photo) UpdateLocation

func (m *Photo) UpdateLocation() (keywords []string, labels classify.Labels)

UpdateLocation updates location and labels based on latitude and longitude.

func (*Photo) UpdateQuality

func (m *Photo) UpdateQuality() error

UpdateQuality updates the photo quality attribute.

func (*Photo) UpdateTimeZone

func (m *Photo) UpdateTimeZone(zone string)

UpdateTimeZone updates the time zone.

func (*Photo) UpdateTitle

func (m *Photo) UpdateTitle(labels classify.Labels) error

UpdateTitle updated the photo title based on location and labels.

func (*Photo) Updates

func (m *Photo) Updates(values interface{}) error

Updates multiple columns in the database.

func (*Photo) Yaml

func (m *Photo) Yaml() ([]byte, error)

Yaml returns photo data as YAML string.

func (*Photo) YamlFileName

func (m *Photo) YamlFileName(originalsPath, sidecarPath string) string

YamlFileName returns the YAML file name.

type PhotoAlbum

type PhotoAlbum struct {
	PhotoUID  string    `gorm:"type:VARBINARY(42);primary_key;auto_increment:false" json:"PhotoUID" yaml:"UID"`
	AlbumUID  string    `gorm:"type:VARBINARY(42);primary_key;auto_increment:false;index" json:"AlbumUID" yaml:"-"`
	Order     int       `json:"Order" yaml:"Order,omitempty"`
	Hidden    bool      `json:"Hidden" yaml:"Hidden,omitempty"`
	Missing   bool      `json:"Missing" yaml:"Missing,omitempty"`
	CreatedAt time.Time `json:"CreatedAt" yaml:"CreatedAt,omitempty"`
	UpdatedAt time.Time `json:"UpdatedAt" yaml:"-"`
	Photo     *Photo    `gorm:"PRELOAD:false" yaml:"-"`
	Album     *Album    `gorm:"PRELOAD:true" yaml:"-"`
}

PhotoAlbum represents the many_to_many relation between Photo and Album

func FirstOrCreatePhotoAlbum

func FirstOrCreatePhotoAlbum(m *PhotoAlbum) *PhotoAlbum

FirstOrCreatePhotoAlbum returns the existing row, inserts a new row or nil in case of errors.

func NewPhotoAlbum

func NewPhotoAlbum(photoUid, albumUid string) *PhotoAlbum

NewPhotoAlbum creates a new photo and album mapping with UIDs.

func (*PhotoAlbum) Create

func (m *PhotoAlbum) Create() error

Create inserts a new row to the database.

func (*PhotoAlbum) Save

func (m *PhotoAlbum) Save() error

Save updates or inserts a row.

func (PhotoAlbum) TableName

func (PhotoAlbum) TableName() string

TableName returns the entity table name.

type PhotoAlbumMap

type PhotoAlbumMap map[string]PhotoAlbum

func (PhotoAlbumMap) Get

func (m PhotoAlbumMap) Get(name, photoUid, albumUid string) PhotoAlbum

func (PhotoAlbumMap) Pointer

func (m PhotoAlbumMap) Pointer(name, photoUid, albumUid string) *PhotoAlbum

type PhotoAlbums

type PhotoAlbums []PhotoAlbum

type PhotoKeyword

type PhotoKeyword struct {
	PhotoID   uint `gorm:"primary_key;auto_increment:false"`
	KeywordID uint `gorm:"primary_key;auto_increment:false;index"`
}

PhotoKeyword represents the many-to-many relation between Photo and Keyword

func FirstOrCreatePhotoKeyword

func FirstOrCreatePhotoKeyword(m *PhotoKeyword) *PhotoKeyword

FirstOrCreatePhotoKeyword returns the existing row, inserts a new row or nil in case of errors.

func NewPhotoKeyword

func NewPhotoKeyword(photoID, keywordID uint) *PhotoKeyword

NewPhotoKeyword registers a new PhotoKeyword relation

func (*PhotoKeyword) Create

func (m *PhotoKeyword) Create() error

Create inserts a new row to the database.

func (PhotoKeyword) TableName

func (PhotoKeyword) TableName() string

TableName returns the entity table name.

type PhotoKeywordMap

type PhotoKeywordMap map[string]PhotoKeyword

type PhotoLabel

type PhotoLabel struct {
	PhotoID     uint   `gorm:"primary_key;auto_increment:false"`
	LabelID     uint   `gorm:"primary_key;auto_increment:false;index"`
	LabelSrc    string `gorm:"type:VARBINARY(8);"`
	Uncertainty int    `gorm:"type:SMALLINT"`
	Photo       *Photo `gorm:"PRELOAD:false"`
	Label       *Label `gorm:"PRELOAD:true"`
}

PhotoLabel represents the many-to-many relation between Photo and label. Labels are weighted by uncertainty (100 - confidence)

func FirstOrCreatePhotoLabel

func FirstOrCreatePhotoLabel(m *PhotoLabel) *PhotoLabel

FirstOrCreatePhotoLabel returns the existing row, inserts a new row or nil in case of errors.

func NewPhotoLabel

func NewPhotoLabel(photoID, labelID uint, uncertainty int, source string) *PhotoLabel

NewPhotoLabel registers a new PhotoLabel relation with an uncertainty and a source of label

func (*PhotoLabel) ClassifyLabel

func (m *PhotoLabel) ClassifyLabel() classify.Label

ClassifyLabel returns the label as classify.Label

func (*PhotoLabel) Create

func (m *PhotoLabel) Create() error

Create inserts a new row to the database.

func (*PhotoLabel) Delete

func (m *PhotoLabel) Delete() error

Delete deletes the label reference.

func (*PhotoLabel) Save

func (m *PhotoLabel) Save() error

Save updates the record in the database or inserts a new record if it does not already exist.

func (PhotoLabel) TableName

func (PhotoLabel) TableName() string

TableName returns the entity table name.

func (*PhotoLabel) Update

func (m *PhotoLabel) Update(attr string, value interface{}) error

Update a column in the database.

func (*PhotoLabel) Updates

func (m *PhotoLabel) Updates(values interface{}) error

Updates multiple columns in the database.

type PhotoLabels

type PhotoLabels []PhotoLabel

type PhotoMap

type PhotoMap map[string]Photo

func (PhotoMap) Get

func (m PhotoMap) Get(name string) Photo

func (PhotoMap) Pointer

func (m PhotoMap) Pointer(name string) *Photo

type PhotoUser

type PhotoUser struct {
	UID     string `gorm:"type:VARBINARY(42);primary_key;auto_increment:false" json:"UID" yaml:"UID"`
	UserUID string `gorm:"type:VARBINARY(42);primary_key;auto_increment:false;index" json:"UserUID,omitempty" yaml:"UserUID,omitempty"`
	TeamUID string `gorm:"type:VARBINARY(42);index" json:"TeamUID,omitempty" yaml:"TeamUID,omitempty"`
	Perm    uint   `json:"Perm,omitempty" yaml:"Perm,omitempty"`
}

PhotoUser represents the user and group ownership of a Photo and the corresponding permissions.

func FirstOrCreatePhotoUser

func FirstOrCreatePhotoUser(m *PhotoUser) *PhotoUser

FirstOrCreatePhotoUser returns the existing record or inserts a new record if it does not already exist.

func NewPhotoUser

func NewPhotoUser(uid, userUid, teamUid string, perm uint) *PhotoUser

NewPhotoUser creates a new entity model.

func (*PhotoUser) Create

func (m *PhotoUser) Create() error

Create inserts a new record into the database.

func (*PhotoUser) Save

func (m *PhotoUser) Save() error

Save updates the record in the database or inserts a new record if it does not already exist.

func (PhotoUser) TableName

func (PhotoUser) TableName() string

TableName returns the database table name.

type Photos

type Photos []Photo

func (Photos) UIDs

func (m Photos) UIDs() []string

UIDs returns a slice of photo UIDs.

type Place

type Place struct {
	ID            string    `gorm:"type:VARBINARY(42);primary_key;auto_increment:false;" json:"PlaceID" yaml:"PlaceID"`
	PlaceLabel    string    `gorm:"type:VARCHAR(400);" json:"Label" yaml:"Label"`
	PlaceDistrict string    `gorm:"type:VARCHAR(100);index;" json:"District" yaml:"District,omitempty"`
	PlaceCity     string    `gorm:"type:VARCHAR(100);index;" json:"City" yaml:"City,omitempty"`
	PlaceState    string    `gorm:"type:VARCHAR(100);index;" json:"State" yaml:"State,omitempty"`
	PlaceCountry  string    `gorm:"type:VARBINARY(2);" json:"Country" yaml:"Country,omitempty"`
	PlaceKeywords string    `gorm:"type:VARCHAR(300);" json:"Keywords" yaml:"Keywords,omitempty"`
	PlaceFavorite bool      `json:"Favorite" yaml:"Favorite,omitempty"`
	PhotoCount    int       `gorm:"default:1" json:"PhotoCount" yaml:"-"`
	CreatedAt     time.Time `json:"CreatedAt" yaml:"-"`
	UpdatedAt     time.Time `json:"UpdatedAt" yaml:"-"`
}

Place represents a distinct region identified by city, district, state, and country.

func FindPlace

func FindPlace(id string) *Place

FindPlace finds a matching place or returns nil.

func FirstOrCreatePlace

func FirstOrCreatePlace(m *Place) *Place

FirstOrCreatePlace fetches an existing row, inserts a new row or nil in case of errors.

func (Place) City

func (m Place) City() string

City returns place city if any.

func (Place) CityContains

func (m Place) CityContains(text string) bool

CityContains checks if the location city contains the text string

func (Place) CountryCode

func (m Place) CountryCode() string

CountryCode returns place CountryCode

func (Place) CountryName

func (m Place) CountryName() string

CountryName returns place CountryName

func (*Place) Create

func (m *Place) Create() error

Create inserts a new row to the database.

func (*Place) Delete

func (m *Place) Delete() (err error)

Delete removes the entity from the index.

func (Place) District

func (m Place) District() string

District returns the place district name if any.

func (Place) Label

func (m Place) Label() string

Label returns place label

func (Place) LongCity

func (m Place) LongCity() bool

LongCity checks if the city name is more than 16 char.

func (Place) NoCity

func (m Place) NoCity() bool

NoCity checks if the location has no city

func (*Place) Save

func (m *Place) Save() error

Save updates the record in the database or inserts a new record if it does not already exist.

func (Place) State

func (m Place) State() string

State returns place State

func (Place) TableName

func (Place) TableName() string

TableName returns the entity table name.

func (Place) Unknown

func (m Place) Unknown() bool

Unknown returns true if this is an unknown place

type PlacesMap

type PlacesMap map[string]Place

func (PlacesMap) Get

func (m PlacesMap) Get(name string) Place

func (PlacesMap) Pointer

func (m PlacesMap) Pointer(name string) *Place

type Priorities

type Priorities map[string]int

type Reaction

type Reaction struct {
	UID       string     `gorm:"type:VARBINARY(42);primary_key;auto_increment:false" json:"UID,omitempty" yaml:"UID,omitempty"`
	UserUID   string     `gorm:"type:VARBINARY(42);primary_key;auto_increment:false" json:"UserUID,omitempty" yaml:"UserUID,omitempty"`
	Reaction  string     `gorm:"type:VARBINARY(64);primary_key;auto_increment:false" json:"Reaction,omitempty" yaml:"Reaction,omitempty"`
	Reacted   int        `json:"Reacted,omitempty" yaml:"Reacted,omitempty"`
	ReactedAt *time.Time `sql:"index" json:"ReactedAt,omitempty" yaml:"ReactedAt,omitempty"`
}

Reaction represents a human response to content such as photos and albums.

func FindReaction

func FindReaction(uid, userUid string) (m *Reaction)

FindReaction returns the matching Reaction record or nil if it was not found.

func NewReaction

func NewReaction(uid, userUid string) *Reaction

NewReaction creates a new Reaction struct.

func (*Reaction) Create

func (m *Reaction) Create() (err error)

Create inserts a new Reaction.

func (*Reaction) Delete

func (m *Reaction) Delete() error

Delete deletes the Reaction.

func (*Reaction) Emoji

func (m *Reaction) Emoji() react.Emoji

Emoji returns the reaction Emoji.

func (*Reaction) InvalidUID

func (m *Reaction) InvalidUID() bool

InvalidUID checks if the entity or user uid are missing or incorrect.

func (*Reaction) React

func (m *Reaction) React(emo react.Emoji) *Reaction

React adds a react.Emoji reaction.

func (*Reaction) Save

func (m *Reaction) Save() (err error)

Save updates the record in the database or inserts a new record if it does not already exist.

func (*Reaction) String

func (m *Reaction) String() string

String returns the user reaction as string.

func (Reaction) TableName

func (Reaction) TableName() string

TableName returns the entity table name.

func (*Reaction) Unknown

func (m *Reaction) Unknown() bool

Unknown checks if the reaction data is missing or incorrect.

type ReactionMap

type ReactionMap map[string]Reaction

func (ReactionMap) Get

func (m ReactionMap) Get(name string) Reaction

func (ReactionMap) Pointer

func (m ReactionMap) Pointer(name string) *Reaction

type Service

type Service struct {
	ID            uint   `gorm:"primary_key"`
	AccName       string `gorm:"type:VARCHAR(160);"`
	AccOwner      string `gorm:"type:VARCHAR(160);"`
	AccURL        string `gorm:"type:VARCHAR(255);"`
	AccType       string `gorm:"type:VARBINARY(255);"`
	AccKey        string `gorm:"type:VARBINARY(255);"`
	AccUser       string `gorm:"type:VARBINARY(255);"`
	AccPass       string `gorm:"type:VARBINARY(255);"`
	AccTimeout    string `gorm:"type:VARBINARY(16);"`
	AccError      string `gorm:"type:VARBINARY(512);"`
	AccErrors     int
	AccShare      bool
	AccSync       bool
	RetryLimit    int
	SharePath     string `gorm:"type:VARBINARY(1024);"`
	ShareSize     string `gorm:"type:VARBINARY(16);"`
	ShareExpires  int
	SyncPath      string `gorm:"type:VARBINARY(1024);"`
	SyncStatus    string `gorm:"type:VARBINARY(16);"`
	SyncInterval  int
	SyncDate      sql.NullTime `deepcopier:"skip"`
	SyncUpload    bool
	SyncDownload  bool
	SyncFilenames bool
	SyncRaw       bool
	CreatedAt     time.Time  `deepcopier:"skip"`
	UpdatedAt     time.Time  `deepcopier:"skip"`
	DeletedAt     *time.Time `deepcopier:"skip" sql:"index"`
}

Service represents a remote service, e.g. for uploading, downloading or syncing media files.

Field Descriptions: - AccTimeout configures the timeout for requests, options: "", high, medium, low, none. - AccErrors holds the number of connection errors since the last reset. - AccShare enables manual upload, see SharePath, ShareSize, and ShareExpires. - AccSync enables automatic file synchronization, see SyncDownload and SyncUpload. - RetryLimit specifies the number of retry attempts, a negative value disables the limit.

func AddService

func AddService(form form.Service) (model *Service, err error)

AddService adds a new service account to the database.

func (*Service) Create

func (m *Service) Create() error

Create inserts a new row to the database.

func (*Service) Delete

func (m *Service) Delete() error

Delete deletes the entity from the database.

func (*Service) Directories

func (m *Service) Directories() (result fs.FileInfos, err error)

Directories returns a list of directories or albums in an account.

func (*Service) LogErr

func (m *Service) LogErr(err error) error

LogErr updates the service error count and message.

func (*Service) ResetErrors

func (m *Service) ResetErrors(share, sync bool) error

ResetErrors resets the service and related file error messages and counters.

func (*Service) Save

func (m *Service) Save() error

Save updates the record in the database or inserts a new record if it does not already exist.

func (*Service) SaveForm

func (m *Service) SaveForm(form form.Service) error

SaveForm saves the entity using form data and stores it in the database.

func (*Service) ShareOriginals

func (m *Service) ShareOriginals() bool

ShareOriginals tests if the unmodified originals should be shared.

func (Service) TableName

func (Service) TableName() string

TableName returns the entity table name.

func (*Service) Update

func (m *Service) Update(attr string, value interface{}) error

Update a column in the database.

func (*Service) Updates

func (m *Service) Updates(values interface{}) error

Updates multiple columns in the database.

type ServiceMap

type ServiceMap map[string]Service

type Services

type Services []Service

type Session

type Session struct {
	ID string `gorm:"type:VARBINARY(2048);primary_key;auto_increment:false;" json:"-" yaml:"ID"`

	UserUID  string `gorm:"type:VARBINARY(42);index;default:'';" json:"UserUID" yaml:"UserUID,omitempty"`
	UserName string `gorm:"size:200;index;" json:"UserName" yaml:"UserName,omitempty"`

	ClientUID  string `gorm:"type:VARBINARY(42);index;default:'';" json:"ClientUID" yaml:"ClientUID,omitempty"`
	ClientName string `gorm:"size:200;default:'';" json:"ClientName" yaml:"ClientName,omitempty"`
	ClientIP   string `gorm:"size:64;column:client_ip;index" json:"ClientIP" yaml:"ClientIP,omitempty"`

	AuthProvider  string          `gorm:"type:VARBINARY(128);default:'';" json:"AuthProvider" yaml:"AuthProvider,omitempty"`
	AuthMethod    string          `gorm:"type:VARBINARY(128);default:'';" json:"AuthMethod" yaml:"AuthMethod,omitempty"`
	AuthDomain    string          `gorm:"type:VARBINARY(255);default:'';" json:"AuthDomain" yaml:"AuthDomain,omitempty"`
	AuthID        string          `gorm:"type:VARBINARY(255);index;default:'';" json:"-" yaml:"AuthID,omitempty"`
	AuthScope     string          `gorm:"size:1024;default:'';" json:"AuthScope" yaml:"AuthScope,omitempty"`
	GrantType     string          `gorm:"type:VARBINARY(64);default:'';" json:"GrantType" yaml:"GrantType,omitempty"`
	LastActive    int64           `json:"LastActive" yaml:"LastActive,omitempty"`
	SessExpires   int64           `gorm:"index" json:"Expires" yaml:"Expires,omitempty"`
	SessTimeout   int64           `json:"Timeout" yaml:"Timeout,omitempty"`
	PreviewToken  string          `gorm:"type:VARBINARY(64);column:preview_token;default:'';" json:"-" yaml:"-"`
	DownloadToken string          `gorm:"type:VARBINARY(64);column:download_token;default:'';" json:"-" yaml:"-"`
	AccessToken   string          `gorm:"type:VARBINARY(4096);column:access_token;default:'';" json:"-" yaml:"-"`
	RefreshToken  string          `gorm:"type:VARBINARY(512);column:refresh_token;default:'';" json:"-" yaml:"-"`
	IdToken       string          `gorm:"type:VARBINARY(1024);column:id_token;default:'';" json:"IdToken,omitempty" yaml:"IdToken,omitempty"`
	UserAgent     string          `gorm:"size:512;" json:"UserAgent" yaml:"UserAgent,omitempty"`
	DataJSON      json.RawMessage `gorm:"type:VARBINARY(4096);" json:"-" yaml:"Data,omitempty"`

	RefID     string    `gorm:"type:VARBINARY(16);default:'';" json:"ID" yaml:"-"`
	LoginIP   string    `gorm:"size:64;column:login_ip" json:"LoginIP" yaml:"-"`
	LoginAt   time.Time `json:"LoginAt" yaml:"-"`
	CreatedAt time.Time `json:"CreatedAt" yaml:"CreatedAt"`
	UpdatedAt time.Time `json:"UpdatedAt" yaml:"UpdatedAt"`
	Status    int       `gorm:"-" json:"Status" yaml:"-"`
	// contains filtered or unexported fields
}

Session represents a User session.

func AddClientSession

func AddClientSession(clientName string, expiresIn int64, scope string, grantType authn.GrantType, user *User) (*Session, error)

AddClientSession creates a new session for authenticating a client application.

func FindSession

func FindSession(id string) (*Session, error)

FindSession finds a session based on the id string or returns nil if it does not exist.

func FindSessionByAuthToken

func FindSessionByAuthToken(token string) (*Session, error)

FindSessionByAuthToken finds a session based on the auth token string or returns nil if it does not exist.

func FindSessionByRefID

func FindSessionByRefID(refId string) *Session

FindSessionByRefID finds an existing session by ref ID.

func NewClientSession

func NewClientSession(clientName string, expiresIn int64, scope string, grantType authn.GrantType, user *User) *Session

NewClientSession returns a new session that authenticates a client application.

func NewSession

func NewSession(expiresIn, timeout int64) (m *Session)

NewSession creates a new session with the expiration and idle time specified in seconds (-1 for infinite).

func SessionStatusForbidden

func SessionStatusForbidden() *Session

SessionStatusForbidden returns a session with status forbidden (403).

func SessionStatusTooManyRequests

func SessionStatusTooManyRequests() *Session

SessionStatusTooManyRequests returns a session with status too many requests (429).

func SessionStatusUnauthorized

func SessionStatusUnauthorized() *Session

SessionStatusUnauthorized returns a session with status unauthorized (401).

func (*Session) Abort

func (m *Session) Abort(c *gin.Context) bool

Abort aborts the request with the appropriate error code if access to the requested resource is denied.

func (*Session) AuthGrantType

func (m *Session) AuthGrantType() authn.GrantType

AuthGrantType returns the session's grant type as authn.GrantType.

func (*Session) AuthInfo

func (m *Session) AuthInfo() string

AuthInfo returns information about the authentication type.

func (*Session) AuthToken

func (m *Session) AuthToken() string

AuthToken returns the secret client authentication token.

func (*Session) AuthTokenType

func (m *Session) AuthTokenType() string

AuthTokenType returns the authentication token type.

func (*Session) BeforeCreate

func (m *Session) BeforeCreate(scope *gorm.Scope) error

BeforeCreate creates a random UID if needed before inserting a new row to the database.

func (*Session) Cache

func (m *Session) Cache()

Cache caches the session with the default expiration duration.

func (*Session) CacheDuration

func (m *Session) CacheDuration(d time.Duration)

CacheDuration updates the session entity cache.

func (*Session) ChangePassword

func (m *Session) ChangePassword(newPw string) (err error)

ChangePassword changes the password of the current user.

func (*Session) ClearCache

func (m *Session) ClearCache()

ClearCache deletes the session from the cache.

func (*Session) Client

func (m *Session) Client() *Client

Client returns the session's client.

func (*Session) ClientInfo

func (m *Session) ClientInfo() string

ClientInfo returns the session's client identifier string.

func (*Session) ClientRole

func (m *Session) ClientRole() acl.Role

ClientRole returns the session's client ACL role.

func (*Session) Create

func (m *Session) Create() (err error)

Create new entity in the database.

func (*Session) Data

func (m *Session) Data() (data *SessionData)

Data returns the session's data.

func (*Session) Delete

func (m *Session) Delete() error

Delete permanently deletes a session.

func (*Session) Expired

func (m *Session) Expired() bool

Expired checks if the session has expired.

func (*Session) Expires

func (m *Session) Expires(t time.Time) *Session

Expires sets an explicit expiration time.

func (*Session) ExpiresAt

func (m *Session) ExpiresAt() time.Time

ExpiresAt returns the time when the session expires.

func (*Session) ExpiresIn

func (m *Session) ExpiresIn() int64

ExpiresIn returns the expiration time in seconds.

func (*Session) HasClient

func (m *Session) HasClient() bool

HasClient checks if a client entity is assigned to the session.

func (*Session) HasRegisteredUser

func (m *Session) HasRegisteredUser() bool

HasRegisteredUser checks if the session belongs to a registered user.

func (*Session) HasShare

func (m *Session) HasShare(uid string) bool

HasShare if the session includes the specified share

func (*Session) HasShares

func (m *Session) HasShares() bool

HasShares checks if the session has any shares.

func (*Session) HasUser

func (m *Session) HasUser() bool

HasUser checks if a user entity is assigned to the session.

func (*Session) HttpStatus

func (m *Session) HttpStatus() int

HttpStatus returns the session status as HTTP code for the client.

func (*Session) IP

func (m *Session) IP() string

IP returns the client IP address, or "unknown" if it is unknown.

func (*Session) InsufficientScope

func (m *Session) InsufficientScope(resource acl.Resource, perms acl.Permissions) bool

InsufficientScope checks if the scope does not include access to specified resource.

func (*Session) Invalid

func (m *Session) Invalid() bool

Invalid checks if the session does not belong to a registered user or a visitor with shares.

func (*Session) Is2FA

func (m *Session) Is2FA() bool

Is2FA checks if 2-Factor Authentication (2FA) was used to log in.

func (*Session) IsClient

func (m *Session) IsClient() bool

IsClient checks if this session authenticates an API client.

func (*Session) IsRegistered

func (m *Session) IsRegistered() bool

IsRegistered checks if the session belongs to a registered user account.

func (*Session) IsSuperAdmin

func (m *Session) IsSuperAdmin() bool

IsSuperAdmin checks if the session belongs to a registered super admin user.

func (*Session) IsVisitor

func (m *Session) IsVisitor() bool

IsVisitor checks if the session belongs to a sharing link visitor.

func (*Session) LogIn

func (m *Session) LogIn(f form.Login, c *gin.Context) (err error)

LogIn performs authentication checks against the specified login form.

func (*Session) Method

func (m *Session) Method() authn.MethodType

Method returns the authentication method.

func (*Session) NoClient

func (m *Session) NoClient() bool

NoClient if this session has no client entity assigned.

func (*Session) NoShares

func (m *Session) NoShares() bool

NoShares checks if the session has no shares yet.

func (*Session) NoUser

func (m *Session) NoUser() bool

NoUser checks if this session has no user entity assigned.

func (*Session) NotRegistered

func (m *Session) NotRegistered() bool

NotRegistered checks if the user is not registered with an own account.

func (*Session) Provider

func (m *Session) Provider() authn.ProviderType

Provider returns the authentication provider.

func (*Session) RedeemToken

func (m *Session) RedeemToken(token string) (n int)

RedeemToken updates shared entity UIDs using the specified token.

func (*Session) RefreshUser

func (m *Session) RefreshUser() *Session

RefreshUser updates the cached user data.

func (*Session) Regenerate

func (m *Session) Regenerate() *Session

Regenerate (re-)initializes the session with a random auth token, ID, and RefID.

func (*Session) Report

func (m *Session) Report(skipEmpty bool) (rows [][]string, cols []string)

Report returns the entity values as rows.

func (*Session) Save

func (m *Session) Save() error

Save updates the record in the database or inserts a new record if it does not already exist.

func (*Session) Scope

func (m *Session) Scope() string

Scope returns the authorization scope as a sanitized string.

func (*Session) SetAuthID

func (m *Session) SetAuthID(id string) *Session

SetAuthID sets a custom authentication identifier.

func (*Session) SetAuthToken

func (m *Session) SetAuthToken(authToken string) *Session

SetAuthToken sets a custom authentication token.

func (*Session) SetClient

func (m *Session) SetClient(c *Client) *Session

SetClient updates the client of this session.

func (*Session) SetClientIP

func (m *Session) SetClientIP(ip string)

SetClientIP sets the client IP address.

func (*Session) SetClientName

func (m *Session) SetClientName(s string) *Session

SetClientName changes the session's client name.

func (*Session) SetContext

func (m *Session) SetContext(c *gin.Context) *Session

SetContext sets the session request context.

func (*Session) SetData

func (m *Session) SetData(data *SessionData) *Session

SetData updates the session's data.

func (*Session) SetDownloadToken

func (m *Session) SetDownloadToken(token string) *Session

SetDownloadToken updates the download token if not empty.

func (*Session) SetExpiresIn

func (m *Session) SetExpiresIn(expiresIn int64) *Session

SetExpiresIn sets the session lifetime in seconds (-1 for infinite).

func (*Session) SetGrantType

func (m *Session) SetGrantType(t authn.GrantType) *Session

SetGrantType sets the session's grant type if no type has been set yet.

func (*Session) SetMethod

func (m *Session) SetMethod(method authn.MethodType) *Session

SetMethod sets a custom authentication method.

func (*Session) SetPreviewToken

func (m *Session) SetPreviewToken(token string) *Session

SetPreviewToken updates the preview token if not empty.

func (*Session) SetProvider

func (m *Session) SetProvider(provider authn.ProviderType) *Session

SetProvider updates the session's authentication provider.

func (*Session) SetScope

func (m *Session) SetScope(scope string) *Session

SetScope sets a custom authentication scope.

func (*Session) SetTimeout

func (m *Session) SetTimeout(timeout int64) *Session

SetTimeout sets the session idle time in seconds (-1 for infinite).

func (*Session) SetUser

func (m *Session) SetUser(u *User) *Session

SetUser updates the user entity of this session.

func (*Session) SetUserAgent

func (m *Session) SetUserAgent(ua string)

SetUserAgent sets the client user agent.

func (*Session) SharedUIDs

func (m *Session) SharedUIDs() UIDs

SharedUIDs returns shared entity UIDs.

func (Session) TableName

func (Session) TableName() string

TableName returns the entity table name.

func (*Session) TimedOut

func (m *Session) TimedOut() bool

TimedOut checks if the session has expired due to inactivity..

func (*Session) TimeoutAt

func (m *Session) TimeoutAt() time.Time

TimeoutAt returns the time at which the session will expire due to inactivity.

func (*Session) UpdateContext

func (m *Session) UpdateContext(c *gin.Context) *Session

UpdateContext sets the session request context and updates the session entry in the database if it has changed.

func (*Session) UpdateLastActive

func (m *Session) UpdateLastActive(save bool) *Session

UpdateLastActive sets the time of last activity to now and optionally also updates the auth_sessions table.

func (*Session) Updates

func (m *Session) Updates(values interface{}) error

Updates multiple properties in the database.

func (*Session) User

func (m *Session) User() *User

User returns the session's user entity.

func (*Session) UserInfo

func (m *Session) UserInfo() string

UserInfo returns the session's user information.

func (*Session) UserRole

func (m *Session) UserRole() acl.Role

UserRole returns the session's user ACL role.

func (*Session) Username

func (m *Session) Username() string

Username returns the login name.

func (*Session) Valid

func (m *Session) Valid() bool

Valid checks whether the session belongs to a registered user or a visitor with shares.

func (*Session) ValidateScope

func (m *Session) ValidateScope(resource acl.Resource, perms acl.Permissions) bool

ValidateScope checks if the scope does not exclude access to specified resource.

type SessionData

type SessionData struct {
	Tokens []string `json:"tokens"` // Share Tokens.
	Shares UIDs     `json:"shares"` // Share UIDs.
}

SessionData represents User Session data.

func NewSessionData

func NewSessionData() *SessionData

NewSessionData creates a new session data struct and returns a pointer to it.

func (SessionData) HasShare

func (data SessionData) HasShare(uid string) bool

HasShare if the session includes the specified share

func (SessionData) HasShares

func (data SessionData) HasShares() bool

HasShares checks if the session has any shares.

func (SessionData) NoShares

func (data SessionData) NoShares() bool

NoShares checks if the session has no shares yet.

func (*SessionData) RedeemToken

func (data *SessionData) RedeemToken(token string) (n int)

RedeemToken appends a new token and updates the list of shared UIDs in the session data.

func (*SessionData) RefreshShares

func (data *SessionData) RefreshShares() *SessionData

RefreshShares updates the list of shared UIDs in the session data.

func (SessionData) SharedUIDs

func (data SessionData) SharedUIDs() UIDs

SharedUIDs returns shared entity UIDs.

type SessionMap

type SessionMap map[string]Session

func (SessionMap) Get

func (m SessionMap) Get(name string) Session

func (SessionMap) Pointer

func (m SessionMap) Pointer(name string) *Session

type Sessions

type Sessions []Session

Sessions represents a list of sessions.

type StringMap

type StringMap struct {
	sync.RWMutex
	// contains filtered or unexported fields
}

StringMap is a string (reverse) lookup map that can be accessed by multiple goroutines.

func NewStringMap

func NewStringMap(s Strings) *StringMap

NewStringMap creates a new string (reverse) lookup map.

func (*StringMap) Get

func (s *StringMap) Get(key string) string

Get returns the matching value or an empty string if it was not found.

func (*StringMap) Has

func (s *StringMap) Has(key string) bool

Has checks whether a value has been set for the specified key.

func (*StringMap) HasValue

func (s *StringMap) HasValue(val string) bool

HasValue checks if the specified value exists for any key.

func (*StringMap) Key

func (s *StringMap) Key(val string) string

Key returns the last added key that matches the specified value.

func (*StringMap) Keys

func (s *StringMap) Keys(val string) []string

Keys returns all keys that match the specified value.

func (*StringMap) Log

func (s *StringMap) Log(key string) (val string)

Log returns a string sanitized for logging and using the key as fallback value.

func (*StringMap) Missing

func (s *StringMap) Missing(key string) bool

Missing checks if the key is unknown.

func (*StringMap) Set

func (s *StringMap) Set(key string, val string)

Set adds a string to the map.

func (*StringMap) Unchanged

func (s *StringMap) Unchanged(key string, val string) bool

Unchanged verifies if the key/value pair is unchanged.

func (*StringMap) Unset

func (s *StringMap) Unset(key string)

Unset removes a string from the map.

type Strings

type Strings map[string]string

Strings is a simple string map that should not be accessed by multiple goroutines.

type Subject

type Subject struct {
	SubjUID      string     `gorm:"type:VARBINARY(42);primary_key;auto_increment:false;" json:"UID" yaml:"UID"`
	SubjType     string     `gorm:"type:VARBINARY(8);default:'';" json:"Type,omitempty" yaml:"Type,omitempty"`
	SubjSrc      string     `gorm:"type:VARBINARY(8);default:'';" json:"Src,omitempty" yaml:"Src,omitempty"`
	SubjSlug     string     `gorm:"type:VARBINARY(160);index;default:'';" json:"Slug" yaml:"-"`
	SubjName     string     `gorm:"size:160;unique_index;default:'';" json:"Name" yaml:"Name"`
	SubjAlias    string     `gorm:"size:160;default:'';" json:"Alias" yaml:"Alias"`
	SubjAbout    string     `gorm:"size:512;" json:"About" yaml:"About,omitempty"`
	SubjBio      string     `gorm:"size:2048;" json:"Bio" yaml:"Bio,omitempty"`
	SubjNotes    string     `gorm:"size:1024;" json:"Notes,omitempty" yaml:"Notes,omitempty"`
	SubjFavorite bool       `gorm:"default:false;" json:"Favorite" yaml:"Favorite,omitempty"`
	SubjHidden   bool       `gorm:"default:false;" json:"Hidden" yaml:"Hidden,omitempty"`
	SubjPrivate  bool       `gorm:"default:false;" json:"Private" yaml:"Private,omitempty"`
	SubjExcluded bool       `gorm:"default:false;" json:"Excluded" yaml:"Excluded,omitempty"`
	FileCount    int        `gorm:"default:0;" json:"FileCount" yaml:"-"`
	PhotoCount   int        `gorm:"default:0;" json:"PhotoCount" yaml:"-"`
	Thumb        string     `gorm:"type:VARBINARY(128);index;default:'';" json:"Thumb" yaml:"Thumb,omitempty"`
	ThumbSrc     string     `gorm:"type:VARBINARY(8);default:'';" json:"ThumbSrc,omitempty" yaml:"ThumbSrc,omitempty"`
	CreatedAt    time.Time  `json:"CreatedAt" yaml:"-"`
	UpdatedAt    time.Time  `json:"UpdatedAt" yaml:"-"`
	DeletedAt    *time.Time `sql:"index" json:"DeletedAt,omitempty" yaml:"-"`
}

Subject represents a named photo subject, typically a person.

func FindSubject

func FindSubject(uid string) *Subject

FindSubject returns an existing entity if exists.

func FindSubjectByName

func FindSubjectByName(name string, restore bool) *Subject

FindSubjectByName find an existing subject by name.

func FirstOrCreateSubject

func FirstOrCreateSubject(m *Subject) *Subject

FirstOrCreateSubject returns the existing entity, inserts a new entity or nil in case of errors.

func NewSubject

func NewSubject(name, subjType, subjSrc string) *Subject

NewSubject returns a new entity.

func (*Subject) AfterDelete

func (m *Subject) AfterDelete(tx *gorm.DB) (err error)

AfterDelete resets file and photo counters when the entity was deleted.

func (*Subject) AfterFind

func (m *Subject) AfterFind() (err error)

AfterFind is a hook that updates the name cache after querying.

func (*Subject) AfterSave

func (m *Subject) AfterSave() (err error)

AfterSave is a hook that updates the name cache after saving.

func (*Subject) BeforeCreate

func (m *Subject) BeforeCreate(scope *gorm.Scope) error

BeforeCreate creates a random uid if needed before inserting a new row to the database.

func (*Subject) Create

func (m *Subject) Create() error

Create inserts the entity to the database.

func (*Subject) Delete

func (m *Subject) Delete() error

Delete marks the entity as deleted in the database.

func (*Subject) DeletePermanently

func (m *Subject) DeletePermanently() error

DeletePermanently permanently removes a subject from the index after is has been soft deleted.

func (*Subject) Deleted

func (m *Subject) Deleted() bool

Deleted returns true if the entity is deleted.

func (*Subject) IsPerson

func (m *Subject) IsPerson() bool

IsPerson tests if the subject is a person.

func (m *Subject) Links() Links

Links returns all share links for this entity.

func (*Subject) MergeWith

func (m *Subject) MergeWith(other *Subject) error

MergeWith merges this subject with another subject and then deletes it.

func (*Subject) Person

func (m *Subject) Person() *Person

Person creates and returns a Person based on this subject.

func (*Subject) RefreshPhotos

func (m *Subject) RefreshPhotos() error

RefreshPhotos flags related photos for metadata maintenance.

func (*Subject) Restore

func (m *Subject) Restore() error

Restore restores the entity in the database.

func (*Subject) Save

func (m *Subject) Save() error

Save updates the record in the database or inserts a new record if it does not already exist.

func (*Subject) SaveForm

func (m *Subject) SaveForm(f form.Subject) (changed bool, err error)

SaveForm updates the subject from form values.

func (*Subject) SetName

func (m *Subject) SetName(name string) error

SetName changes the subject's name.

func (Subject) TableName

func (Subject) TableName() string

TableName returns the entity table name.

func (*Subject) Update

func (m *Subject) Update(attr string, value interface{}) error

Update updates an entity value in the database.

func (*Subject) UpdateMarkerNames

func (m *Subject) UpdateMarkerNames() error

UpdateMarkerNames updates related marker names.

func (*Subject) UpdateName

func (m *Subject) UpdateName(name string) (*Subject, error)

UpdateName changes and saves the subject's name in the index.

func (*Subject) Updates

func (m *Subject) Updates(values interface{}) error

Updates multiple values in the database.

func (*Subject) Visible

func (m *Subject) Visible() bool

Visible tests if the subject is generally visible and not hidden in any way.

type SubjectMap

type SubjectMap map[string]Subject

func (SubjectMap) Get

func (m SubjectMap) Get(name string) Subject

func (SubjectMap) Pointer

func (m SubjectMap) Pointer(name string) *Subject

type Subjects

type Subjects []Subject

Subjects represents a list of subjects.

func OrphanPeople

func OrphanPeople() (Subjects, error)

OrphanPeople returns unused subjects.

func (Subjects) Delete

func (m Subjects) Delete() error

Delete (soft) deletes all subjects.

type Tables

type Tables map[string]interface{}

func (Tables) Drop

func (list Tables) Drop(db *gorm.DB)

Drop drops all database tables of registered entities.

func (Tables) Migrate

func (list Tables) Migrate(db *gorm.DB, opt migrate.Options)

Migrate migrates all database tables of registered entities.

func (Tables) Truncate

func (list Tables) Truncate(db *gorm.DB)

Truncate removes all data from tables without dropping them.

func (Tables) WaitForMigration

func (list Tables) WaitForMigration(db *gorm.DB) error

WaitForMigration waits for the database migration to be successful and returns an error otherwise.

type UIDs

type UIDs []string

UIDs represents a slice of unique ID strings.

func (UIDs) Join

func (u UIDs) Join(s string) string

Join returns all UIDs as custom separated string.

func (UIDs) String

func (u UIDs) String() string

String returns all UIDs as comma separated string.

type User

type User struct {
	ID            int           `gorm:"primary_key" json:"ID" yaml:"-"`
	UUID          string        `gorm:"type:VARBINARY(64);column:user_uuid;index;" json:"UUID,omitempty" yaml:"UUID,omitempty"`
	UserUID       string        `gorm:"type:VARBINARY(42);column:user_uid;unique_index;" json:"UID" yaml:"UID"`
	AuthProvider  string        `gorm:"type:VARBINARY(128);default:'';" json:"AuthProvider" yaml:"AuthProvider,omitempty"`
	AuthMethod    string        `gorm:"type:VARBINARY(128);default:'';" json:"AuthMethod" yaml:"AuthMethod,omitempty"`
	AuthID        string        `gorm:"type:VARBINARY(255);index;default:'';" json:"AuthID" yaml:"AuthID,omitempty"`
	UserName      string        `gorm:"size:200;index;" json:"Name" yaml:"Name,omitempty"`
	DisplayName   string        `gorm:"size:200;" json:"DisplayName" yaml:"DisplayName,omitempty"`
	UserEmail     string        `gorm:"size:255;index;" json:"Email" yaml:"Email,omitempty"`
	BackupEmail   string        `gorm:"size:255;" json:"BackupEmail,omitempty" yaml:"BackupEmail,omitempty"`
	UserRole      string        `gorm:"size:64;default:'';" json:"Role" yaml:"Role,omitempty"`
	UserAttr      string        `gorm:"size:1024;" json:"Attr" yaml:"Attr,omitempty"`
	SuperAdmin    bool          `json:"SuperAdmin" yaml:"SuperAdmin,omitempty"`
	CanLogin      bool          `json:"CanLogin" yaml:"CanLogin,omitempty"`
	LoginAt       *time.Time    `json:"LoginAt" yaml:"LoginAt,omitempty"`
	ExpiresAt     *time.Time    `sql:"index" json:"ExpiresAt,omitempty" yaml:"ExpiresAt,omitempty"`
	WebDAV        bool          `gorm:"column:webdav;" json:"WebDAV" yaml:"WebDAV,omitempty"`
	BasePath      string        `gorm:"type:VARBINARY(1024);" json:"BasePath" yaml:"BasePath,omitempty"`
	UploadPath    string        `gorm:"type:VARBINARY(1024);" json:"UploadPath" yaml:"UploadPath,omitempty"`
	CanInvite     bool          `json:"CanInvite" yaml:"CanInvite,omitempty"`
	InviteToken   string        `gorm:"type:VARBINARY(64);index;" json:"-" yaml:"-"`
	InvitedBy     string        `gorm:"size:64;" json:"-" yaml:"-"`
	VerifyToken   string        `gorm:"type:VARBINARY(64);" json:"-" yaml:"-"`
	VerifiedAt    *time.Time    `json:"VerifiedAt,omitempty" yaml:"VerifiedAt,omitempty"`
	ConsentAt     *time.Time    `json:"ConsentAt,omitempty" yaml:"ConsentAt,omitempty"`
	BornAt        *time.Time    `sql:"index" json:"BornAt,omitempty" yaml:"BornAt,omitempty"`
	UserDetails   *UserDetails  `gorm:"PRELOAD:true;foreignkey:UserUID;association_foreignkey:UserUID;" json:"Details,omitempty" yaml:"Details,omitempty"`
	UserSettings  *UserSettings `gorm:"PRELOAD:true;foreignkey:UserUID;association_foreignkey:UserUID;" json:"Settings,omitempty" yaml:"Settings,omitempty"`
	UserShares    UserShares    `gorm:"-" json:"Shares,omitempty" yaml:"Shares,omitempty"`
	ResetToken    string        `gorm:"type:VARBINARY(64);" json:"-" yaml:"-"`
	PreviewToken  string        `gorm:"type:VARBINARY(64);column:preview_token;" json:"-" yaml:"-"`
	DownloadToken string        `gorm:"type:VARBINARY(64);column:download_token;" json:"-" yaml:"-"`
	Thumb         string        `gorm:"type:VARBINARY(128);index;default:'';" json:"Thumb" yaml:"Thumb,omitempty"`
	ThumbSrc      string        `gorm:"type:VARBINARY(8);default:'';" json:"ThumbSrc" yaml:"ThumbSrc,omitempty"`
	RefID         string        `gorm:"type:VARBINARY(16);" json:"-" yaml:"-"`
	CreatedAt     time.Time     `json:"CreatedAt" yaml:"-"`
	UpdatedAt     time.Time     `json:"UpdatedAt" yaml:"-"`
	DeletedAt     *time.Time    `sql:"index" json:"DeletedAt,omitempty" yaml:"-"`
}

User represents a person that may optionally log in as user.

func FindLocalUser

func FindLocalUser(userName string) *User

FindLocalUser returns the matching local user or nil if it was not found.

func FindUser

func FindUser(find User) *User

FindUser returns the matching user or nil if it was not found.

func FindUserByName

func FindUserByName(userName string) *User

FindUserByName returns the matching user or nil if it was not found.

func FindUserByUID

func FindUserByUID(uid string) *User

FindUserByUID returns the matching user or nil if it was not found.

func FirstOrCreateUser

func FirstOrCreateUser(m *User) *User

FirstOrCreateUser returns an existing record, inserts a new record, or returns nil in case of an error.

func LdapUser

func LdapUser(username, dn string) User

LdapUser creates an LDAP user entity.

func NewUser

func NewUser() (m *User)

NewUser creates a new user entity with defaults.

func (*User) AclRole

func (m *User) AclRole() acl.Role

AclRole returns the user role for ACL permission checks.

func (*User) ActivatePasscode

func (m *User) ActivatePasscode() (passcode *Passcode, err error)

ActivatePasscode activates two-factor authentication with a passcode.

func (*User) Attr

func (m *User) Attr() string

Attr returns optional user account attributes as sanitized string. Example: https://learn.microsoft.com/en-us/troubleshoot/windows-server/identity/useraccountcontrol-manipulate-account-properties

func (*User) AuthInfo

func (m *User) AuthInfo() string

AuthInfo returns information about the authentication type.

func (*User) BeforeCreate

func (m *User) BeforeCreate(scope *gorm.Scope) error

BeforeCreate sets a random UID if needed before inserting a new row to the database.

func (*User) CanLogIn

func (m *User) CanLogIn() bool

CanLogIn checks if the user is allowed to log in and use the web UI.

func (*User) CanUpload

func (m *User) CanUpload() bool

CanUpload checks if the user is allowed to upload files.

func (*User) CanUseWebDAV

func (m *User) CanUseWebDAV() bool

CanUseWebDAV checks whether the user is allowed to use WebDAV to synchronize files.

func (*User) Create

func (m *User) Create() (err error)

Create new entity in the database.

func (*User) DeactivatePasscode

func (m *User) DeactivatePasscode() (passcode *Passcode, err error)

DeactivatePasscode disables two-factor authentication with a passcode.

func (*User) DefaultBasePath

func (m *User) DefaultBasePath() string

DefaultBasePath returns the default base path of the user based on the user name.

func (*User) Delete

func (m *User) Delete() (err error)

Delete marks the entity as deleted.

func (*User) DeleteSessions

func (m *User) DeleteSessions(omit []string) (deleted int)

DeleteSessions deletes all active user sessions except those passed as argument.

func (*User) Details

func (m *User) Details() *UserDetails

Details returns user profile information and initializes it if needed.

func (*User) Email

func (m *User) Email() string

Email returns the user's login email for authentication.

func (*User) Equal

func (m *User) Equal(u *User) bool

Equal returns true if the user specified matches.

func (*User) Form

func (m *User) Form() (form.User, error)

Form returns a populated user form to perform changes.

func (*User) FullName

func (m *User) FullName() string

FullName returns the name of the user for display purposes.

func (*User) GenerateTokens

func (m *User) GenerateTokens(force bool) *User

GenerateTokens generates preview and download tokens as needed.

func (*User) GetBasePath

func (m *User) GetBasePath() string

GetBasePath returns the user's relative base path.

func (*User) GetUploadPath

func (m *User) GetUploadPath() string

GetUploadPath returns the user's relative upload path.

func (*User) Handle

func (m *User) Handle() string

Handle returns the user's login handle.

func (*User) HasProvider

func (m *User) HasProvider(t authn.ProviderType) bool

HasProvider checks if the user has the given auth provider.

func (*User) HasRole

func (m *User) HasRole(role acl.Role) bool

HasRole checks the user role specified as string.

func (*User) HasShare

func (m *User) HasShare(uid string) bool

HasShare if a uid was shared with the user.

func (*User) HasSharedAccessOnly

func (m *User) HasSharedAccessOnly(resource acl.Resource) bool

HasSharedAccessOnly checks if the user as only access to shared resources.

func (*User) HasShares

func (m *User) HasShares() bool

HasShares checks if the user has any shares.

func (*User) InitAccount

func (m *User) InitAccount(initName, initPasswd string) (updated bool)

InitAccount sets the name and password of the initial admin account.

func (*User) InvalidPasscode

func (m *User) InvalidPasscode(code string) bool

InvalidPasscode returns true if the specified passcode cannot be verified or is invalid.

func (*User) InvalidPassword

func (m *User) InvalidPassword(s string) bool

InvalidPassword returns true if the specified password is invalid or the account is not registered.

func (*User) IsAdmin

func (m *User) IsAdmin() bool

IsAdmin checks if the user is an admin with username.

func (*User) IsDeleted

func (m *User) IsDeleted() bool

IsDeleted checks if the user account has been deleted.

func (*User) IsDisabled

func (m *User) IsDisabled() bool

IsDisabled checks if the user account has been deleted or has expired.

func (*User) IsExpired

func (m *User) IsExpired() bool

IsExpired checks if the user account has expired.

func (*User) IsRegistered

func (m *User) IsRegistered() bool

IsRegistered checks if this user has a registered account with a valid ID, username, and role.

func (*User) IsSuperAdmin

func (m *User) IsSuperAdmin() bool

IsSuperAdmin checks if the user is a super admin.

func (*User) IsUnknown

func (m *User) IsUnknown() bool

IsUnknown checks if the user is unknown.

func (*User) IsVisitor

func (m *User) IsVisitor() bool

IsVisitor checks if the user is a sharing link visitor.

func (*User) LoadRelated

func (m *User) LoadRelated() *User

LoadRelated loads related settings and details.

func (*User) Method

func (m *User) Method() authn.MethodType

Method returns the authentication method.

func (*User) NoShares

func (m *User) NoShares() bool

NoShares checks if the user has no shares yet.

func (*User) NotRegistered

func (m *User) NotRegistered() bool

NotRegistered checks if the user is not registered with an own account.

func (*User) Passcode

func (m *User) Passcode(t authn.KeyType) *Passcode

Passcode returns the related auth key by type, if one exists.

func (*User) PrivilegeLevelChange

func (m *User) PrivilegeLevelChange(f form.User) bool

PrivilegeLevelChange checks if saving the form changes the user privileges.

func (*User) Provider

func (m *User) Provider() authn.ProviderType

Provider returns the authentication provider name.

func (*User) RedeemToken

func (m *User) RedeemToken(token string) (n int)

RedeemToken updates shared entity UIDs using the specified token.

func (*User) RefreshShares

func (m *User) RefreshShares() *User

RefreshShares updates the list of shares.

func (*User) RegenerateTokens

func (m *User) RegenerateTokens() error

RegenerateTokens replaces the existing preview and download tokens.

func (*User) Report

func (m *User) Report(skipEmpty bool) (rows [][]string, cols []string)

Report returns the entity values as rows.

func (*User) RestoreFromCli

func (m *User) RestoreFromCli(ctx *cli.Context, newPassword string) (err error)

RestoreFromCli restored the account from a CLI context.

func (*User) SameUID

func (m *User) SameUID(uid string) bool

SameUID checks if the given uid matches the own uid.

func (*User) Save

func (m *User) Save() (err error)

Save updates the record in the database or inserts a new record if it does not already exist.

func (*User) SaveForm

func (m *User) SaveForm(f form.User, changePrivileges bool) error

SaveForm updates the entity using form data and stores it in the database.

func (*User) SaveRelated

func (m *User) SaveRelated() *User

SaveRelated saves related settings and details.

func (*User) SetAvatar

func (m *User) SetAvatar(thumb, thumbSrc string) error

SetAvatar updates the user avatar image.

func (*User) SetBasePath

func (m *User) SetBasePath(dir string) *User

SetBasePath changes the user's relative base path.

func (*User) SetDisplayName

func (m *User) SetDisplayName(name, src string) *User

SetDisplayName sets a new display name and, if possible, splits it into its components.

func (*User) SetFamilyName

func (m *User) SetFamilyName(name string) *User

SetFamilyName updates the user's family name.

func (*User) SetFormValues

func (m *User) SetFormValues(frm form.User) *User

SetFormValues sets the values specified in the form.

func (*User) SetGivenName

func (m *User) SetGivenName(name string) *User

SetGivenName updates the user's given name.

func (*User) SetMethod

func (m *User) SetMethod(method authn.MethodType) *User

SetMethod sets a custom authentication method.

func (*User) SetPassword

func (m *User) SetPassword(password string) error

SetPassword sets a new password stored as hash.

func (*User) SetProvider

func (m *User) SetProvider(t authn.ProviderType) *User

SetProvider set the authentication provider.

func (*User) SetRole

func (m *User) SetRole(role string) *User

SetRole sets the user role specified as string.

func (*User) SetUploadPath

func (m *User) SetUploadPath(dir string) *User

SetUploadPath changes the user's relative upload path.

func (*User) SetUsername

func (m *User) SetUsername(login string) (err error)

SetUsername sets the login username to the specified string.

func (*User) SetValuesFromCli

func (m *User) SetValuesFromCli(ctx *cli.Context) error

SetValuesFromCli updates the entity values from a CLI context and validates them.

func (*User) Settings

func (m *User) Settings() *UserSettings

Settings returns the user settings and initializes them if necessary.

func (*User) SharedUIDs

func (m *User) SharedUIDs() UIDs

SharedUIDs returns shared entity UIDs.

func (*User) String

func (m *User) String() string

String returns an identifier that can be used in logs.

func (User) TableName

func (User) TableName() string

TableName returns the entity table name.

func (*User) UID

func (m *User) UID() string

UID returns the unique id as string.

func (*User) UpdateLoginTime

func (m *User) UpdateLoginTime() *time.Time

UpdateLoginTime updates the login timestamp and returns it if successful.

func (*User) UpdateUsername

func (m *User) UpdateUsername(login string) (err error)

UpdateUsername changes the login name in the database.

func (*User) Updates

func (m *User) Updates(values interface{}) error

Updates multiple properties in the database.

func (*User) Username

func (m *User) Username() string

Username returns the user's login name as sanitized string.

func (*User) Validate

func (m *User) Validate() (err error)

Validate checks if username, email and role are valid and returns an error otherwise.

func (*User) VerifyPasscode

func (m *User) VerifyPasscode(code string) (valid bool, passcode *Passcode, err error)

VerifyPasscode checks if the specified passcode could be verified and is valid.

func (*User) VerifyPassword

func (m *User) VerifyPassword(s string) bool

VerifyPassword checks if the user has the specified password and the account is registered.

type UserDetails

type UserDetails struct {
	UserUID      string    `gorm:"type:VARBINARY(42);primary_key;auto_increment:false;" json:"-" yaml:"-"`
	SubjUID      string    `gorm:"type:VARBINARY(42);index;" json:"SubjUID,omitempty" yaml:"SubjUID,omitempty"`
	SubjSrc      string    `gorm:"type:VARBINARY(8);default:'';" json:"-" yaml:"SubjSrc,omitempty"`
	PlaceID      string    `gorm:"type:VARBINARY(42);index;default:'zz'" json:"-" yaml:"-"`
	PlaceSrc     string    `gorm:"type:VARBINARY(8);" json:"-" yaml:"PlaceSrc,omitempty"`
	CellID       string    `gorm:"type:VARBINARY(42);index;default:'zz'" json:"-" yaml:"CellID,omitempty"`
	BirthYear    int       `json:"BirthYear" yaml:"BirthYear,omitempty"`
	BirthMonth   int       `json:"BirthMonth" yaml:"BirthMonth,omitempty"`
	BirthDay     int       `json:"BirthDay" yaml:"BirthDay,omitempty"`
	NameTitle    string    `gorm:"size:32;" json:"NameTitle" yaml:"NameTitle,omitempty"`
	GivenName    string    `gorm:"size:64;" json:"GivenName" yaml:"GivenName,omitempty"`
	MiddleName   string    `gorm:"size:64;" json:"MiddleName" yaml:"MiddleName,omitempty"`
	FamilyName   string    `gorm:"size:64;" json:"FamilyName" yaml:"FamilyName,omitempty"`
	NameSuffix   string    `gorm:"size:32;" json:"NameSuffix" yaml:"NameSuffix,omitempty"`
	NickName     string    `gorm:"size:64;" json:"NickName" yaml:"NickName,omitempty"`
	NameSrc      string    `gorm:"type:VARBINARY(8);" json:"NameSrc" yaml:"NameSrc,omitempty"`
	UserGender   string    `gorm:"size:16;" json:"Gender" yaml:"Gender,omitempty"`
	UserAbout    string    `gorm:"size:512;" json:"About" yaml:"About,omitempty"`
	UserBio      string    `gorm:"size:2048;" json:"Bio" yaml:"Bio,omitempty"`
	UserLocation string    `gorm:"size:512;" json:"Location" yaml:"Location,omitempty"`
	UserCountry  string    `gorm:"type:VARBINARY(2);" json:"Country" yaml:"Country,omitempty"`
	UserPhone    string    `gorm:"size:32;" json:"Phone" yaml:"Phone,omitempty"`
	SiteURL      string    `gorm:"type:VARBINARY(512);column:site_url" json:"SiteURL" yaml:"SiteURL,omitempty"`
	ProfileURL   string    `gorm:"type:VARBINARY(512);column:profile_url" json:"ProfileURL" yaml:"ProfileURL,omitempty"`
	FeedURL      string    `gorm:"type:VARBINARY(512);column:feed_url" json:"FeedURL,omitempty" yaml:"FeedURL,omitempty"`
	AvatarURL    string    `gorm:"type:VARBINARY(512);column:avatar_url" json:"AvatarURL,omitempty" yaml:"AvatarURL,omitempty"`
	OrgTitle     string    `gorm:"size:64;" json:"OrgTitle" yaml:"OrgTitle,omitempty"`
	OrgName      string    `gorm:"size:128;" json:"OrgName" yaml:"OrgName,omitempty"`
	OrgEmail     string    `gorm:"size:255;index;" json:"OrgEmail" yaml:"OrgEmail,omitempty"`
	OrgPhone     string    `gorm:"size:32;" json:"OrgPhone" yaml:"OrgPhone,omitempty"`
	OrgURL       string    `gorm:"type:VARBINARY(512);column:org_url" json:"OrgURL" yaml:"OrgURL,omitempty"`
	IdURL        string    `gorm:"type:VARBINARY(512);column:id_url;" json:"IdURL,omitempty" yaml:"IdURL,omitempty"`
	CreatedAt    time.Time `json:"CreatedAt" yaml:"-"`
	UpdatedAt    time.Time `json:"UpdatedAt" yaml:"-"`
}

UserDetails represents user profile information.

func NewUserDetails

func NewUserDetails(uid string) *UserDetails

NewUserDetails creates new user details.

func (*UserDetails) Create

func (m *UserDetails) Create() error

Create new entity in the database.

func (*UserDetails) DisplayName

func (m *UserDetails) DisplayName() string

DisplayName returns a display name based on the user details.

func (*UserDetails) HasID

func (m *UserDetails) HasID() bool

HasID tests if the entity has a valid uid.

func (*UserDetails) Save

func (m *UserDetails) Save() error

Save updates the record in the database or inserts a new record if it does not already exist.

func (*UserDetails) SetFamilyName

func (m *UserDetails) SetFamilyName(name string) *UserDetails

SetFamilyName updates the user's family name.

func (*UserDetails) SetGivenName

func (m *UserDetails) SetGivenName(name string) *UserDetails

SetGivenName updates the user's given name.

func (UserDetails) TableName

func (UserDetails) TableName() string

TableName returns the entity table name.

func (*UserDetails) Updates

func (m *UserDetails) Updates(values interface{}) error

Updates multiple properties in the database.

type UserMap

type UserMap map[string]User

func (UserMap) Get

func (m UserMap) Get(name string) User

Get returns a user fixture for use in tests.

func (UserMap) Pointer

func (m UserMap) Pointer(name string) *User

Pointer returns a user fixture pointer for use in tests.

type UserSettings

type UserSettings struct {
	UserUID              string    `gorm:"type:VARBINARY(42);primary_key;auto_increment:false;" json:"-" yaml:"UserUID"`
	UITheme              string    `gorm:"type:VARBINARY(32);column:ui_theme;" json:"UITheme,omitempty" yaml:"UITheme,omitempty"`
	UILanguage           string    `gorm:"type:VARBINARY(32);column:ui_language;" json:"UILanguage,omitempty" yaml:"UILanguage,omitempty"`
	UITimeZone           string    `gorm:"type:VARBINARY(64);column:ui_time_zone;" json:"UITimeZone,omitempty" yaml:"UITimeZone,omitempty"`
	MapsStyle            string    `gorm:"type:VARBINARY(32);" json:"MapsStyle,omitempty" yaml:"MapsStyle,omitempty"`
	MapsAnimate          int       `gorm:"default:0;" json:"MapsAnimate,omitempty" yaml:"MapsAnimate,omitempty"`
	IndexPath            string    `gorm:"type:VARBINARY(1024);" json:"IndexPath,omitempty" yaml:"IndexPath,omitempty"`
	IndexRescan          int       `gorm:"default:0;" json:"IndexRescan,omitempty" yaml:"IndexRescan,omitempty"`
	ImportPath           string    `gorm:"type:VARBINARY(1024);" json:"ImportPath,omitempty" yaml:"ImportPath,omitempty"`
	ImportMove           int       `gorm:"default:0;" json:"ImportMove,omitempty" yaml:"ImportMove,omitempty"`
	DownloadOriginals    int       `gorm:"default:0;" json:"DownloadOriginals,omitempty" yaml:"DownloadOriginals,omitempty"`
	DownloadMediaRaw     int       `gorm:"default:0;" json:"DownloadMediaRaw,omitempty" yaml:"DownloadMediaRaw,omitempty"`
	DownloadMediaSidecar int       `gorm:"default:0;" json:"DownloadMediaSidecar,omitempty" yaml:"DownloadMediaSidecar,omitempty"`
	UploadPath           string    `gorm:"type:VARBINARY(1024);" json:"UploadPath,omitempty" yaml:"UploadPath,omitempty"`
	DefaultPage          string    `gorm:"type:VARBINARY(128);" json:"DefaultPage,omitempty" yaml:"DefaultPage,omitempty"`
	CreatedAt            time.Time `json:"CreatedAt" yaml:"-"`
	UpdatedAt            time.Time `json:"UpdatedAt" yaml:"-"`
}

UserSettings represents user preferences.

func NewUserSettings

func NewUserSettings(uid string) *UserSettings

NewUserSettings creates new user preferences.

func (*UserSettings) Apply

Apply applies the settings provided to the user preferences and keeps current values if they are not specified.

func (*UserSettings) ApplyTo

ApplyTo applies the user preferences to the client settings and keeps the default settings if they are not specified.

func (*UserSettings) Create

func (m *UserSettings) Create() error

Create new entity in the database.

func (*UserSettings) HasID

func (m *UserSettings) HasID() bool

HasID tests if the entity has a valid uid.

func (*UserSettings) Save

func (m *UserSettings) Save() error

Save updates the record in the database or inserts a new record if it does not already exist.

func (UserSettings) TableName

func (UserSettings) TableName() string

TableName returns the entity table name.

func (*UserSettings) Updates

func (m *UserSettings) Updates(values interface{}) error

Updates multiple properties in the database.

type UserShare

type UserShare struct {
	UserUID   string     `gorm:"type:VARBINARY(42);primary_key;auto_increment:false;" json:"-" yaml:"UserUID"`
	ShareUID  string     `gorm:"type:VARBINARY(42);primary_key;index;" json:"ShareUID" yaml:"ShareUID"`
	LinkUID   string     `gorm:"type:VARBINARY(42);" json:"LinkUID,omitempty" yaml:"LinkUID,omitempty"`
	ExpiresAt *time.Time `sql:"index" json:"ExpiresAt,omitempty" yaml:"ExpiresAt,omitempty"`
	Comment   string     `gorm:"size:512;" json:"Comment,omitempty" yaml:"Comment,omitempty"`
	Perm      uint       `json:"Perm,omitempty" yaml:"Perm,omitempty"`
	RefID     string     `gorm:"type:VARBINARY(16);" json:"-" yaml:"-"`
	CreatedAt time.Time  `json:"CreatedAt" yaml:"-"`
	UpdatedAt time.Time  `json:"UpdatedAt" yaml:"-"`
}

UserShare represents content shared with a user.

func FindUserShare

func FindUserShare(find UserShare) *UserShare

FindUserShare fetches the matching record or returns null if it was not found.

func NewUserShare

func NewUserShare(userUID, shareUid string, perm uint, expires *time.Time) *UserShare

NewUserShare creates a new entity model.

func (*UserShare) Create

func (m *UserShare) Create() error

Create inserts a new record into the database.

func (*UserShare) HasID

func (m *UserShare) HasID() bool

HasID tests if the entity has a valid uid.

func (*UserShare) Save

func (m *UserShare) Save() error

Save updates the record in the database or inserts a new record if it does not already exist.

func (UserShare) TableName

func (UserShare) TableName() string

TableName returns the entity table name.

func (m *UserShare) UpdateLink(link Link) error

UpdateLink updates the share data using the Link provided.

func (*UserShare) Updates

func (m *UserShare) Updates(values interface{}) error

Updates changes multiple record values.

type UserShareMap

type UserShareMap map[string]UserShare

func (UserShareMap) Get

func (m UserShareMap) Get(name string) UserShare

Get returns a fixture for use in tests.

func (UserShareMap) Pointer

func (m UserShareMap) Pointer(name string) *UserShare

Pointer returns a fixture pointer for use in tests.

type UserShares

type UserShares []UserShare

UserShares represents shared content.

func FindUserShares

func FindUserShares(userUid string) UserShares

FindUserShares finds all shares to which the user has access.

func (UserShares) Contains

func (m UserShares) Contains(uid string) bool

Contains checks the uid is shared.

func (UserShares) Empty

func (m UserShares) Empty() bool

Empty checks if there are no shares.

func (UserShares) UIDs

func (m UserShares) UIDs() UIDs

UIDs returns shared UIDs.

type Users

type Users []User

Users represents a list of users.

Source Files

Directories

Path Synopsis
Package legacy provides legacy entity models to be used in migrations.
Package legacy provides legacy entity models to be used in migrations.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL