1package piece
   2
   3import (
   4	"errors"
   5	"fmt"
   6	"generate/config"
   7	"generate/utils"
   8	"log"
   9	"os"
  10	"os/exec"
  11	"path/filepath"
  12	"slices"
  13	"time"
  14)
  15
  16type Piece struct {
  17	ID               string
  18	URL              string
  19	DateCreated      time.Time
  20	PositionAbsolute bool
  21	RelativeID       string
  22	InfoCardTitle    string
  23	InfoCardPosition int
  24	Position         utils.Coords
  25	AddWidth         bool
  26	AddHeight        bool
  27	Size             int
  28	Resolution       utils.Coords
  29	Video            bool
  30}
  31
  32const (
  33	Half = iota
  34	Full
  35)
  36
  37const (
  38	BRightSTop = iota
  39	BRightSBottom
  40	BLeftSTop
  41	BLeftSBottom
  42	BTopSLeft
  43	BTopSRight
  44	BBottomSLeft
  45	BBottomSRight
  46)
  47
  48func ComputeDimensions(piece Piece) utils.Coords {
  49	height := 0.0
  50
  51	if piece.Size == Full {
  52		height = config.GalleryHeight - config.GalleryPadding*2
  53	} else {
  54		height = (config.GalleryHeight-config.VerticalPadding)/2 - config.GalleryPadding
  55	}
  56	if slices.Contains([]int{BTopSLeft, BTopSRight, BBottomSLeft, BBottomSRight}, piece.InfoCardPosition) {
  57		height -= config.VerticalPadding + config.InfoCardHeight
  58	}
  59	height -= config.PiecePadding * 2
  60	width := height * piece.Resolution.X / piece.Resolution.Y
  61	return utils.Coords{X: width + config.PiecePadding*2, Y: height + config.PiecePadding*2}
  62}
  63
  64func ComputePosition(offset utils.Coords, piece Piece, pieces []Piece) utils.Coords {
  65	offset.X += piece.Position.X
  66	offset.Y += piece.Position.Y
  67	if piece.PositionAbsolute {
  68		if slices.Contains([]int{BLeftSTop, BLeftSBottom}, piece.InfoCardPosition) {
  69			offset.X += config.InfoCardWidth + config.HorizontalPadding
  70		}
  71		return utils.Coords{X: offset.X, Y: offset.Y}
  72	} else {
  73		foundPiece := Piece{}
  74		isPieceFound := false
  75		for _, iPiece := range pieces {
  76			if iPiece.ID == piece.RelativeID {
  77				isPieceFound = true
  78				foundPiece = iPiece
  79			}
  80		}
  81		if !isPieceFound {
  82			log.Fatal("Invalid reference to piece ID: ", piece.RelativeID)
  83		}
  84		if piece.AddWidth {
  85			offset.X += ComputeDimensions(foundPiece).X + config.HorizontalPadding
  86			if slices.Contains([]int{BLeftSTop, BLeftSBottom, BRightSTop, BRightSBottom}, foundPiece.InfoCardPosition) {
  87				offset.X += config.InfoCardWidth + config.HorizontalPadding
  88			}
  89		}
  90		if piece.AddHeight {
  91			offset.Y += ComputeDimensions(foundPiece).Y + config.VerticalPadding
  92			if slices.Contains([]int{BTopSLeft, BTopSRight, BBottomSLeft, BBottomSRight}, foundPiece.InfoCardPosition) {
  93				offset.Y += config.InfoCardHeight + config.VerticalPadding
  94			}
  95		}
  96		return ComputePosition(offset, foundPiece, pieces)
  97	}
  98}
  99
 100func GeneratePieceHTML(piece Piece, pieces []Piece) (string, float64) {
 101	pieceDimensions := ComputeDimensions(piece)
 102	piecePosition := ComputePosition(utils.Coords{}, piece, pieces)
 103
 104	maxX := pieceDimensions.X + piecePosition.X
 105	if slices.Contains([]int{BRightSTop, BRightSBottom}, piece.InfoCardPosition) {
 106		maxX += config.HorizontalPadding + config.InfoCardWidth
 107	}
 108	piecePositionX := piecePosition.X
 109	piecePositionY := piecePosition.Y + config.GalleryPadding
 110	infoCardPositionX := piecePositionX
 111	infoCardPositionY := piecePositionY
 112	if slices.Contains([]int{BTopSLeft, BTopSRight}, piece.InfoCardPosition) {
 113		piecePositionY += config.VerticalPadding + config.InfoCardHeight
 114	}
 115	switch piece.InfoCardPosition {
 116	case BRightSTop:
 117		infoCardPositionX += pieceDimensions.X + config.HorizontalPadding
 118	case BRightSBottom:
 119		infoCardPositionX += pieceDimensions.X + config.HorizontalPadding
 120		infoCardPositionY += pieceDimensions.Y - config.InfoCardHeight
 121	case BLeftSTop:
 122		infoCardPositionX -= config.InfoCardWidth + config.HorizontalPadding
 123	case BLeftSBottom:
 124		infoCardPositionX -= config.InfoCardWidth + config.HorizontalPadding
 125		infoCardPositionY += pieceDimensions.Y - config.InfoCardHeight
 126	case BTopSLeft:
 127		//
 128	case BTopSRight:
 129		infoCardPositionX += pieceDimensions.X - config.InfoCardWidth
 130	case BBottomSLeft:
 131		infoCardPositionY += pieceDimensions.Y + config.VerticalPadding
 132	case BBottomSRight:
 133		infoCardPositionX += pieceDimensions.X - config.InfoCardWidth
 134		infoCardPositionY += pieceDimensions.Y + config.VerticalPadding
 135	}
 136	contentHTML := ""
 137
 138	abs_input_path, err := filepath.Abs("../" + config.AssetsRootURL + piece.URL)
 139	if err != nil {
 140		log.Fatal(err)
 141	}
 142	abs_output_path, err := filepath.Abs("../" + config.AssetsCompressedRootURL + piece.ID)
 143	if err != nil {
 144		log.Fatal(err)
 145	}
 146	assetsImageCompressionArgs := make([]string, len(config.AssetsImageCompressionArgs)+4)
 147	for i := 0; i < len(config.AssetsImageCompressionArgs); i++ {
 148		assetsImageCompressionArgs[i+3] = config.AssetsImageCompressionArgs[i]
 149	}
 150	assetsImageCompressionArgs[0] = "-y"
 151	assetsImageCompressionArgs[1] = "-i"
 152	assetsImageCompressionArgs[2] = abs_input_path
 153	assetsImageCompressionArgs[len(assetsImageCompressionArgs)-1] = abs_output_path + ".webp"
 154
 155	assetsVideoCompressionArgs := make([]string, len(config.AssetsVideoCompressionArgs)+4)
 156	for i := 0; i < len(config.AssetsVideoCompressionArgs); i++ {
 157		assetsVideoCompressionArgs[i+3] = config.AssetsVideoCompressionArgs[i]
 158	}
 159	assetsVideoCompressionArgs[0] = "-y"
 160	assetsVideoCompressionArgs[1] = "-i"
 161	assetsVideoCompressionArgs[2] = abs_input_path
 162	assetsVideoCompressionArgs[len(assetsVideoCompressionArgs)-1] = abs_output_path + ".webm"
 163
 164	cmd := exec.Command("ffmpeg", assetsImageCompressionArgs...)
 165	if piece.Video {
 166		cmd = exec.Command("ffmpeg", assetsVideoCompressionArgs...)
 167	}
 168	if errors.Is(cmd.Err, exec.ErrDot) {
 169		cmd.Err = nil
 170	}
 171	if config.RecomputeCompression {
 172		cmd.Stdout, cmd.Stderr = os.Stdout, os.Stderr
 173		err = cmd.Run()
 174		if err != nil {
 175			fmt.Println(cmd.String())
 176			log.Fatal(err)
 177		}
 178	} else {
 179		fmt.Println(cmd.String())
 180	}
 181	if piece.Video {
 182		contentHTML = fmt.Sprintf(`<video width="%f" height="%f" autoplay muted playsinline loop><source src="%s" type="video/mp4" /></video>`, pieceDimensions.X-config.PiecePadding*2, pieceDimensions.Y-config.PiecePadding*2, config.AssetsCompressedRootURL+piece.ID+".webm")
 183	} else {
 184		contentHTML = fmt.Sprintf(`<img src="%s" style="width:%fpx;height:%fpx;"></img>`, config.AssetsCompressedRootURL+piece.ID+".webp", pieceDimensions.X-config.PiecePadding*2, pieceDimensions.Y-config.PiecePadding*2)
 185	}
 186	return fmt.Sprintf(`
 187	<div class="piece-container" style="left:%fpx;top:%fpx;width:%fpx;height:%fpx;">%s</div>
 188	<div class="info-card" style="left:%fpx;top:%fpx;"><div class="info-card-title">%s</div><div class="info-card-date">%s</div></div>
 189	`, piecePositionX, piecePositionY, pieceDimensions.X-config.PiecePadding*2, pieceDimensions.Y-config.PiecePadding*2, contentHTML, infoCardPositionX, infoCardPositionY, piece.InfoCardTitle, piece.DateCreated.Format("Mon 02 Jan 2006 15:04 MST")), maxX
 190}
 191
 192var GalleryPieces = []Piece{
 193
 194	{
 195		ID:               "jpkr30",
 196		URL:              "jpandkorea2025/P1239080.jpg",
 197		DateCreated:      time.Date(2025, 8, 12, 15, 35, 29, 0, time.FixedZone("KST", 9)),
 198		PositionAbsolute: true,
 199		RelativeID:       "",
 200		InfoCardTitle:    "봉은사 3",
 201		InfoCardPosition: BRightSBottom,
 202		Position:         utils.Coords{X: 1000, Y: 0},
 203		AddWidth:         true,
 204		AddHeight:        false,
 205		Size:             Full,
 206		Resolution:       utils.Coords{X: 5192, Y: 3896},
 207		Video:            false,
 208	}, {
 209		ID:               "jpkr29",
 210		URL:              "jpandkorea2025/P1238955.jpg",
 211		DateCreated:      time.Date(2025, 8, 12, 15, 29, 20, 0, time.FixedZone("KST", 9)),
 212		PositionAbsolute: false,
 213		RelativeID:       "jpkr30",
 214		InfoCardTitle:    "봉은사 2",
 215		InfoCardPosition: BRightSBottom,
 216		Position:         utils.Coords{X: 0, Y: 0},
 217		AddWidth:         true,
 218		AddHeight:        false,
 219		Size:             Full,
 220		Resolution:       utils.Coords{X: 5192, Y: 3896},
 221		Video:            false,
 222	}, {
 223		ID:               "jpkr28",
 224		URL:              "jpandkorea2025/P1238716.jpg",
 225		DateCreated:      time.Date(2025, 8, 12, 15, 23, 46, 0, time.FixedZone("KST", 9)),
 226		PositionAbsolute: false,
 227		RelativeID:       "jpkr29",
 228		InfoCardTitle:    "봉은사 1",
 229		InfoCardPosition: BRightSBottom,
 230		Position:         utils.Coords{X: 0, Y: 0},
 231		AddWidth:         true,
 232		AddHeight:        false,
 233		Size:             Full,
 234		Resolution:       utils.Coords{X: 5192, Y: 3896},
 235		Video:            false,
 236	}, {
 237		ID:               "jpkr27",
 238		URL:              "jpandkorea2025/P1228444.jpg",
 239		DateCreated:      time.Date(2025, 8, 11, 19, 21, 14, 0, time.FixedZone("KST", 9)),
 240		PositionAbsolute: false,
 241		RelativeID:       "jpkr28",
 242		InfoCardTitle:    "서울의 일몰",
 243		InfoCardPosition: BRightSBottom,
 244		Position:         utils.Coords{X: 0, Y: 0},
 245		AddWidth:         true,
 246		AddHeight:        false,
 247		Size:             Full,
 248		Resolution:       utils.Coords{X: 5192, Y: 3896},
 249		Video:            false,
 250	}, {
 251		ID:               "jpkr26",
 252		URL:              "jpandkorea2025/P1228260.jpg",
 253		DateCreated:      time.Date(2025, 8, 11, 18, 51, 53, 0, time.FixedZone("KST", 9)),
 254		PositionAbsolute: false,
 255		RelativeID:       "jpkr27",
 256		InfoCardTitle:    "N서울타워",
 257		InfoCardPosition: BRightSBottom,
 258		Position:         utils.Coords{X: 0, Y: 0},
 259		AddWidth:         true,
 260		AddHeight:        false,
 261		Size:             Full,
 262		Resolution:       utils.Coords{X: 3896, Y: 5192},
 263		Video:            false,
 264	}, {
 265		ID:               "jpkr25",
 266		URL:              "jpandkorea2025/P1228193.jpg",
 267		DateCreated:      time.Date(2025, 8, 11, 18, 33, 59, 0, time.FixedZone("KST", 9)),
 268		PositionAbsolute: false,
 269		RelativeID:       "jpkr26",
 270		InfoCardTitle:    "서울의 맑고 푸른 하늘",
 271		InfoCardPosition: BRightSBottom,
 272		Position:         utils.Coords{X: 0, Y: 0},
 273		AddWidth:         true,
 274		AddHeight:        false,
 275		Size:             Full,
 276		Resolution:       utils.Coords{X: 3896, Y: 5192},
 277		Video:            false,
 278	}, {
 279		ID:               "jpkr24",
 280		URL:              "jpandkorea2025/P1228117.jpg",
 281		DateCreated:      time.Date(2025, 8, 10, 16, 39, 04, 0, time.FixedZone("JST", 9)),
 282		PositionAbsolute: false,
 283		RelativeID:       "jpkr25",
 284		InfoCardTitle:    "海の中道海浜公園",
 285		InfoCardPosition: BRightSBottom,
 286		Position:         utils.Coords{X: 0, Y: 0},
 287		AddWidth:         true,
 288		AddHeight:        false,
 289		Size:             Full,
 290		Resolution:       utils.Coords{X: 5192, Y: 3896},
 291		Video:            false,
 292	}, {
 293		ID:               "jpkr23",
 294		URL:              "jpandkorea2025/P1228022.jpg",
 295		DateCreated:      time.Date(2025, 8, 9, 16, 29, 13, 0, time.FixedZone("JST", 9)),
 296		PositionAbsolute: false,
 297		RelativeID:       "jpkr24",
 298		InfoCardTitle:    "黒川温泉",
 299		InfoCardPosition: BRightSBottom,
 300		Position:         utils.Coords{X: 0, Y: 0},
 301		AddWidth:         true,
 302		AddHeight:        false,
 303		Size:             Full,
 304		Resolution:       utils.Coords{X: 5192, Y: 3896},
 305		Video:            false,
 306	}, {
 307		ID:               "jpkr22",
 308		URL:              "jpandkorea2025/P1227878.jpg",
 309		DateCreated:      time.Date(2025, 8, 8, 19, 47, 45, 0, time.FixedZone("JST", 9)),
 310		PositionAbsolute: false,
 311		RelativeID:       "jpkr23",
 312		InfoCardTitle:    "NHK Nagasaki 5",
 313		InfoCardPosition: BRightSBottom,
 314		Position:         utils.Coords{X: 0, Y: 0},
 315		AddWidth:         true,
 316		AddHeight:        false,
 317		Size:             Full,
 318		Resolution:       utils.Coords{X: 5192, Y: 3896},
 319		Video:            false,
 320	}, {
 321		ID:               "jpkr21",
 322		URL:              "jpandkorea2025/P1217663.jpg",
 323		DateCreated:      time.Date(2025, 8, 8, 19, 34, 42, 0, time.FixedZone("JST", 9)),
 324		PositionAbsolute: false,
 325		RelativeID:       "jpkr22",
 326		InfoCardTitle:    "NHK Nagasaki 4",
 327		InfoCardPosition: BRightSBottom,
 328		Position:         utils.Coords{X: 0, Y: 0},
 329		AddWidth:         true,
 330		AddHeight:        false,
 331		Size:             Full,
 332		Resolution:       utils.Coords{X: 3896, Y: 5192},
 333		Video:            false,
 334	}, {
 335		ID:               "jpkr20",
 336		URL:              "jpandkorea2025/P1217623.jpg",
 337		DateCreated:      time.Date(2025, 8, 8, 19, 33, 25, 0, time.FixedZone("JST", 9)),
 338		PositionAbsolute: false,
 339		RelativeID:       "jpkr21",
 340		InfoCardTitle:    "NHK Nagasaki 3",
 341		InfoCardPosition: BRightSBottom,
 342		Position:         utils.Coords{X: 0, Y: 0},
 343		AddWidth:         true,
 344		AddHeight:        false,
 345		Size:             Full,
 346		Resolution:       utils.Coords{X: 3896, Y: 5192},
 347		Video:            false,
 348	}, {
 349		ID:               "jpkr19",
 350		URL:              "jpandkorea2025/P1217579.jpg",
 351		DateCreated:      time.Date(2025, 8, 8, 19, 32, 52, 0, time.FixedZone("JST", 9)),
 352		PositionAbsolute: false,
 353		RelativeID:       "jpkr20",
 354		InfoCardTitle:    "NHK Nagasaki 2",
 355		InfoCardPosition: BRightSBottom,
 356		Position:         utils.Coords{X: 0, Y: 0},
 357		AddWidth:         true,
 358		AddHeight:        false,
 359		Size:             Full,
 360		Resolution:       utils.Coords{X: 3896, Y: 5192},
 361		Video:            false,
 362	}, {
 363		ID:               "jpkr18",
 364		URL:              "jpandkorea2025/P1217510.jpg",
 365		DateCreated:      time.Date(2025, 8, 8, 19, 30, 24, 0, time.FixedZone("JST", 9)),
 366		PositionAbsolute: false,
 367		RelativeID:       "jpkr19",
 368		InfoCardTitle:    "NHK Nagasaki 1",
 369		InfoCardPosition: BRightSBottom,
 370		Position:         utils.Coords{X: 0, Y: 0},
 371		AddWidth:         true,
 372		AddHeight:        false,
 373		Size:             Full,
 374		Resolution:       utils.Coords{X: 3896, Y: 5192},
 375		Video:            false,
 376	}, {
 377		ID:               "jpkr17",
 378		URL:              "jpandkorea2025/P1217332.jpg",
 379		DateCreated:      time.Date(2025, 8, 8, 16, 3, 43, 0, time.FixedZone("JST", 9)),
 380		PositionAbsolute: false,
 381		RelativeID:       "jpkr18",
 382		InfoCardTitle:    "長崎の猫",
 383		InfoCardPosition: BRightSBottom,
 384		Position:         utils.Coords{X: 0, Y: 0},
 385		AddWidth:         true,
 386		AddHeight:        false,
 387		Size:             Full,
 388		Resolution:       utils.Coords{X: 5192, Y: 3896},
 389		Video:            false,
 390	}, {
 391		ID:               "jpkr17-insert",
 392		URL:              "jpandkorea2025/P1217035.jpg",
 393		DateCreated:      time.Date(2025, 8, 8, 10, 43, 47, 0, time.FixedZone("JST", 9)),
 394		PositionAbsolute: false,
 395		RelativeID:       "jpkr17",
 396		InfoCardTitle:    "長崎平和公園の折り鶴",
 397		InfoCardPosition: BRightSBottom,
 398		Position:         utils.Coords{X: 0, Y: 0},
 399		AddWidth:         true,
 400		AddHeight:        false,
 401		Size:             Full,
 402		Resolution:       utils.Coords{X: 3896, Y: 5192},
 403		Video:            false,
 404	}, {
 405		ID:               "jpkr16",
 406		URL:              "jpandkorea2025/P1216748.jpg",
 407		DateCreated:      time.Date(2025, 8, 7, 16, 16, 36, 0, time.FixedZone("JST", 9)),
 408		PositionAbsolute: false,
 409		RelativeID:       "jpkr17-insert",
 410		InfoCardTitle:    "鷲尾愛宕神社",
 411		InfoCardPosition: BRightSBottom,
 412		Position:         utils.Coords{X: 0, Y: 0},
 413		AddWidth:         true,
 414		AddHeight:        false,
 415		Size:             Full,
 416		Resolution:       utils.Coords{X: 3896, Y: 5192},
 417		Video:            false,
 418	}, {
 419		ID:               "jpkr15",
 420		URL:              "jpandkorea2025/P1216424.jpg",
 421		DateCreated:      time.Date(2025, 8, 7, 11, 55, 10, 0, time.FixedZone("JST", 9)),
 422		PositionAbsolute: false,
 423		RelativeID:       "jpkr16",
 424		InfoCardTitle:    "teamLab Forest",
 425		InfoCardPosition: BRightSBottom,
 426		Position:         utils.Coords{X: 0, Y: 0},
 427		AddWidth:         true,
 428		AddHeight:        false,
 429		Size:             Full,
 430		Resolution:       utils.Coords{X: 5192, Y: 3896},
 431		Video:            false,
 432	}, {
 433		ID:               "jpkr14",
 434		URL:              "jpandkorea2025/P1215876.jpg",
 435		DateCreated:      time.Date(2025, 8, 6, 16, 28, 52, 0, time.FixedZone("JST", 9)),
 436		PositionAbsolute: false,
 437		RelativeID:       "jpkr15",
 438		InfoCardTitle:    "桜井二見ヶ浦 2",
 439		InfoCardPosition: BRightSBottom,
 440		Position:         utils.Coords{X: 0, Y: 0},
 441		AddWidth:         true,
 442		AddHeight:        false,
 443		Size:             Full,
 444		Resolution:       utils.Coords{X: 5192, Y: 3896},
 445		Video:            false,
 446	}, {
 447		ID:               "jpkr13",
 448		URL:              "jpandkorea2025/P1205679.jpg",
 449		DateCreated:      time.Date(2025, 8, 6, 16, 16, 30, 0, time.FixedZone("JST", 9)),
 450		PositionAbsolute: false,
 451		RelativeID:       "jpkr14",
 452		InfoCardTitle:    "桜井二見ヶ浦 1",
 453		InfoCardPosition: BRightSBottom,
 454		Position:         utils.Coords{X: 0, Y: 0},
 455		AddWidth:         true,
 456		AddHeight:        false,
 457		Size:             Full,
 458		Resolution:       utils.Coords{X: 5192, Y: 3896},
 459		Video:            false,
 460	}, {
 461		ID:               "jpkr12",
 462		URL:              "jpandkorea2025/P1205415.jpg",
 463		DateCreated:      time.Date(2025, 8, 5, 20, 13, 37, 0, time.FixedZone("KST", 9)),
 464		PositionAbsolute: false,
 465		RelativeID:       "jpkr13",
 466		InfoCardTitle:    "반포대교 달빛무지개분수",
 467		InfoCardPosition: BRightSBottom,
 468		Position:         utils.Coords{X: 0, Y: 0},
 469		AddWidth:         true,
 470		AddHeight:        false,
 471		Size:             Full,
 472		Resolution:       utils.Coords{X: 3896, Y: 5192},
 473		Video:            false,
 474	}, {
 475		ID:               "jpkr11",
 476		URL:              "jpandkorea2025/P1204894.jpg",
 477		DateCreated:      time.Date(2025, 8, 5, 13, 02, 21, 0, time.FixedZone("KST", 9)),
 478		PositionAbsolute: false,
 479		RelativeID:       "jpkr12",
 480		InfoCardTitle:    "전쟁기념관",
 481		InfoCardPosition: BRightSBottom,
 482		Position:         utils.Coords{X: 0, Y: 0},
 483		AddWidth:         true,
 484		AddHeight:        false,
 485		Size:             Half,
 486		Resolution:       utils.Coords{X: 5192, Y: 3896},
 487		Video:            false,
 488	}, {
 489		ID:               "jpkr10",
 490		URL:              "jpandkorea2025/P1194724.jpg",
 491		DateCreated:      time.Date(2025, 8, 5, 10, 57, 43, 0, time.FixedZone("KST", 9)),
 492		PositionAbsolute: false,
 493		RelativeID:       "jpkr11",
 494		InfoCardTitle:    "창덕궁 후원",
 495		InfoCardPosition: BRightSBottom,
 496		Position:         utils.Coords{X: 0, Y: 0},
 497		AddWidth:         false,
 498		AddHeight:        true,
 499		Size:             Half,
 500		Resolution:       utils.Coords{X: 5192, Y: 3896},
 501		Video:            false,
 502	}, {
 503		ID:               "jpkr9",
 504		URL:              "jpandkorea2025/P1194433.jpg",
 505		DateCreated:      time.Date(2025, 8, 4, 19, 49, 56, 0, time.FixedZone("KST", 9)),
 506		PositionAbsolute: false,
 507		RelativeID:       "jpkr11",
 508		InfoCardTitle:    "낙산 성곽길",
 509		InfoCardPosition: BRightSBottom,
 510		Position:         utils.Coords{X: 0, Y: 0},
 511		AddWidth:         true,
 512		AddHeight:        false,
 513		Size:             Full,
 514		Resolution:       utils.Coords{X: 5192, Y: 3896},
 515		Video:            false,
 516	}, {
 517		ID:               "jpkr8",
 518		URL:              "jpandkorea2025/P1194095.jpg",
 519		DateCreated:      time.Date(2025, 8, 4, 16, 26, 06, 0, time.FixedZone("KST", 9)),
 520		PositionAbsolute: false,
 521		RelativeID:       "jpkr9",
 522		InfoCardTitle:    "동대문디자인플라자 2",
 523		InfoCardPosition: BRightSBottom,
 524		Position:         utils.Coords{X: 0, Y: 0},
 525		AddWidth:         true,
 526		AddHeight:        false,
 527		Size:             Full,
 528		Resolution:       utils.Coords{X: 3896, Y: 5192},
 529		Video:            false,
 530	}, {
 531		ID:               "jpkr7",
 532		URL:              "jpandkorea2025/P1194112.jpg",
 533		DateCreated:      time.Date(2025, 8, 4, 16, 27, 51, 0, time.FixedZone("KST", 9)),
 534		PositionAbsolute: false,
 535		RelativeID:       "jpkr8",
 536		InfoCardTitle:    "동대문디자인플라자 1",
 537		InfoCardPosition: BRightSBottom,
 538		Position:         utils.Coords{X: 0, Y: 0},
 539		AddWidth:         true,
 540		AddHeight:        false,
 541		Size:             Full,
 542		Resolution:       utils.Coords{X: 3896, Y: 5192},
 543		Video:            false,
 544	}, {
 545		ID:               "jpkr6",
 546		URL:              "jpandkorea2025/P1193834.jpg",
 547		DateCreated:      time.Date(2025, 8, 4, 10, 58, 27, 0, time.FixedZone("KST", 9)),
 548		PositionAbsolute: false,
 549		RelativeID:       "jpkr7",
 550		InfoCardTitle:    "북촌한옥마을",
 551		InfoCardPosition: BRightSBottom,
 552		Position:         utils.Coords{X: 0, Y: 0},
 553		AddWidth:         true,
 554		AddHeight:        false,
 555		Size:             Full,
 556		Resolution:       utils.Coords{X: 5192, Y: 3896},
 557		Video:            false,
 558	}, {
 559		ID:               "jpkr5",
 560		URL:              "jpandkorea2025/P1193765.jpg",
 561		DateCreated:      time.Date(2025, 8, 4, 10, 05, 39, 0, time.FixedZone("KST", 9)),
 562		PositionAbsolute: false,
 563		RelativeID:       "jpkr6",
 564		InfoCardTitle:    "Praying Mantis",
 565		InfoCardPosition: BRightSBottom,
 566		Position:         utils.Coords{X: 0, Y: 0},
 567		AddWidth:         true,
 568		AddHeight:        false,
 569		Size:             Full,
 570		Resolution:       utils.Coords{X: 5192, Y: 3896},
 571		Video:            false,
 572	}, {
 573		ID:               "jpkr4",
 574		URL:              "jpandkorea2025/P1183346.jpg",
 575		DateCreated:      time.Date(2025, 8, 4, 9, 23, 46, 0, time.FixedZone("KST", 9)),
 576		PositionAbsolute: false,
 577		RelativeID:       "jpkr5",
 578		InfoCardTitle:    "경복궁 2",
 579		InfoCardPosition: BRightSBottom,
 580		Position:         utils.Coords{X: 0, Y: 0},
 581		AddWidth:         true,
 582		AddHeight:        false,
 583		Size:             Half,
 584		Resolution:       utils.Coords{X: 5192, Y: 3896},
 585		Video:            false,
 586	}, {
 587		ID:               "jpkr3",
 588		URL:              "jpandkorea2025/P1183651.jpg",
 589		DateCreated:      time.Date(2025, 8, 4, 9, 49, 46, 0, time.FixedZone("KST", 9)),
 590		PositionAbsolute: false,
 591		RelativeID:       "jpkr4",
 592		InfoCardTitle:    "경복궁 1",
 593		InfoCardPosition: BRightSBottom,
 594		Position:         utils.Coords{X: 0, Y: 0},
 595		AddWidth:         false,
 596		AddHeight:        true,
 597		Size:             Half,
 598		Resolution:       utils.Coords{X: 5192, Y: 3896},
 599		Video:            false,
 600	}, {
 601		ID:               "jpkr2",
 602		URL:              "jpandkorea2025/P1182876.jpg",
 603		DateCreated:      time.Date(2025, 8, 3, 19, 06, 55, 0, time.FixedZone("KST", 9)),
 604		PositionAbsolute: false,
 605		RelativeID:       "jpkr4",
 606		InfoCardTitle:    "시청",
 607		InfoCardPosition: BRightSBottom,
 608		Position:         utils.Coords{X: 0, Y: 0},
 609		AddWidth:         true,
 610		AddHeight:        false,
 611		Size:             Full,
 612		Resolution:       utils.Coords{X: 3896, Y: 5192},
 613		Video:            false,
 614	}, {
 615		ID:               "jpkr1",
 616		URL:              "jpandkorea2025/P1182840.jpg",
 617		DateCreated:      time.Date(2025, 8, 3, 18, 51, 4, 0, time.FixedZone("KST", 9)),
 618		PositionAbsolute: false,
 619		RelativeID:       "jpkr2",
 620		InfoCardTitle:    "명동",
 621		InfoCardPosition: BRightSBottom,
 622		Position:         utils.Coords{X: 0, Y: 0},
 623		AddWidth:         true,
 624		AddHeight:        false,
 625		Size:             Full,
 626		Resolution:       utils.Coords{X: 3896, Y: 5192},
 627		Video:            false,
 628	}, {
 629		ID:               "jp35",
 630		URL:              "japan2024/P1171844.jpg",
 631		DateCreated:      time.Date(2024, 7, 31, 19, 36, 0, 0, time.FixedZone("JST", 9)),
 632		PositionAbsolute: false,
 633		RelativeID:       "jpkr1",
 634		InfoCardTitle:    "上空から見た夜の大阪",
 635		InfoCardPosition: BRightSBottom,
 636		Position:         utils.Coords{X: 0, Y: 0},
 637		AddWidth:         true,
 638		AddHeight:        false,
 639		Size:             Full,
 640		Resolution:       utils.Coords{X: 5192, Y: 3896},
 641		Video:            false,
 642	}, {
 643		ID:               "jp34",
 644		URL:              "japan2024/P1161321.jpg",
 645		DateCreated:      time.Date(2024, 7, 31, 18, 21, 0, 0, time.FixedZone("JST", 9)),
 646		PositionAbsolute: false,
 647		RelativeID:       "jp35",
 648		InfoCardTitle:    "空中庭園展望台",
 649		InfoCardPosition: BRightSTop,
 650		Position:         utils.Coords{X: 0, Y: 0},
 651		AddWidth:         true,
 652		AddHeight:        false,
 653		Size:             Full,
 654		Resolution:       utils.Coords{X: 3896, Y: 5192},
 655		Video:            false,
 656	}, {
 657		ID:               "jp33",
 658		URL:              "japan2024/P1161208.jpg",
 659		DateCreated:      time.Date(2024, 7, 31, 13, 53, 0, 0, time.FixedZone("JST", 9)),
 660		PositionAbsolute: false,
 661		RelativeID:       "jp34",
 662		InfoCardTitle:    "クラゲ",
 663		InfoCardPosition: BBottomSLeft,
 664		Position:         utils.Coords{X: 0, Y: 0},
 665		AddWidth:         true,
 666		AddHeight:        false,
 667		Size:             Full,
 668		Resolution:       utils.Coords{X: 5192, Y: 3896},
 669		Video:            false,
 670	}, {
 671		ID:               "jp32",
 672		URL:              "japan2024/P1160349.jpg",
 673		DateCreated:      time.Date(2024, 7, 31, 8, 59, 0, 0, time.FixedZone("JST", 9)),
 674		PositionAbsolute: false,
 675		RelativeID:       "jp33",
 676		InfoCardTitle:    "住𠮷大社",
 677		InfoCardPosition: BRightSTop,
 678		Position:         utils.Coords{X: 0, Y: 0},
 679		AddWidth:         true,
 680		AddHeight:        false,
 681		Size:             Full,
 682		Resolution:       utils.Coords{X: 5192, Y: 3896},
 683		Video:            false,
 684	}, {
 685		ID:               "jp31",
 686		URL:              "japan2024/P1160147.jpg",
 687		DateCreated:      time.Date(2024, 7, 30, 21, 29, 0, 0, time.FixedZone("JST", 9)),
 688		PositionAbsolute: false,
 689		RelativeID:       "jp32",
 690		InfoCardTitle:    "道頓堀",
 691		InfoCardPosition: BRightSBottom,
 692		Position:         utils.Coords{X: 0, Y: 0},
 693		AddWidth:         true,
 694		AddHeight:        false,
 695		Size:             Half,
 696		Resolution:       utils.Coords{X: 5192, Y: 3896},
 697		Video:            false,
 698	}, {
 699		ID:               "jp30",
 700		URL:              "japan2024/P1159767.jpg",
 701		DateCreated:      time.Date(2024, 7, 29, 16, 12, 0, 0, time.FixedZone("JST", 9)),
 702		PositionAbsolute: false,
 703		RelativeID:       "jp32",
 704		InfoCardTitle:    "清水寺",
 705		InfoCardPosition: BRightSBottom,
 706		Position:         utils.Coords{X: 0, Y: 0},
 707		AddWidth:         true,
 708		AddHeight:        false,
 709		Size:             Full,
 710		Resolution:       utils.Coords{X: 5192, Y: 3896},
 711		Video:            false,
 712	}, {
 713		ID:               "jp29",
 714		URL:              "japan2024/P1149102.jpg",
 715		DateCreated:      time.Date(2024, 7, 29, 10, 23, 0, 0, time.FixedZone("JST", 9)),
 716		PositionAbsolute: false,
 717		RelativeID:       "jp30",
 718		InfoCardTitle:    "依水園",
 719		InfoCardPosition: BRightSBottom,
 720		Position:         utils.Coords{X: 0, Y: 0},
 721		AddWidth:         true,
 722		AddHeight:        false,
 723		Size:             Full,
 724		Resolution:       utils.Coords{X: 5192, Y: 3896},
 725		Video:            false,
 726	}, {
 727		ID:               "jp28",
 728		URL:              "japan2024/P1148810.jpg",
 729		DateCreated:      time.Date(2024, 7, 28, 7, 48, 0, 0, time.FixedZone("JST", 9)),
 730		PositionAbsolute: false,
 731		RelativeID:       "jp29",
 732		InfoCardTitle:    "嵐山竹林",
 733		InfoCardPosition: BLeftSTop,
 734		Position:         utils.Coords{X: 0, Y: 0},
 735		AddWidth:         true,
 736		AddHeight:        false,
 737		Size:             Full,
 738		Resolution:       utils.Coords{X: 5192, Y: 3896},
 739		Video:            false,
 740	}, {
 741		ID:               "jp27",
 742		URL:              "japan2024/P1148643.jpg",
 743		DateCreated:      time.Date(2024, 7, 27, 18, 56, 0, 0, time.FixedZone("JST", 9)),
 744		PositionAbsolute: false,
 745		RelativeID:       "jp28",
 746		InfoCardTitle:    "伏見稲荷大社 4",
 747		InfoCardPosition: BRightSBottom,
 748		Position:         utils.Coords{X: 0, Y: 0},
 749		AddWidth:         true,
 750		AddHeight:        false,
 751		Size:             Full,
 752		Resolution:       utils.Coords{X: 3896, Y: 5192},
 753		Video:            false,
 754	}, {
 755		ID:               "jp26",
 756		URL:              "japan2024/P1138611.jpg",
 757		DateCreated:      time.Date(2024, 7, 27, 18, 56, 0, 0, time.FixedZone("JST", 9)),
 758		PositionAbsolute: false,
 759		RelativeID:       "jp27",
 760		InfoCardTitle:    "伏見稲荷大社 3",
 761		InfoCardPosition: BRightSTop,
 762		Position:         utils.Coords{X: 0, Y: 0},
 763		AddWidth:         true,
 764		AddHeight:        false,
 765		Size:             Full,
 766		Resolution:       utils.Coords{X: 3896, Y: 5192},
 767		Video:            false,
 768	}, {
 769		ID:               "jp25",
 770		URL:              "japan2024/P1138499.jpg",
 771		DateCreated:      time.Date(2024, 7, 27, 18, 44, 0, 0, time.FixedZone("JST", 9)),
 772		PositionAbsolute: false,
 773		RelativeID:       "jp26",
 774		InfoCardTitle:    "伏見稲荷大社 2",
 775		InfoCardPosition: BRightSBottom,
 776		Position:         utils.Coords{X: 0, Y: 0},
 777		AddWidth:         true,
 778		AddHeight:        false,
 779		Size:             Full,
 780		Resolution:       utils.Coords{X: 5192, Y: 3896},
 781		Video:            false,
 782	}, {
 783		ID:               "jp24",
 784		URL:              "japan2024/P1138361.jpg",
 785		DateCreated:      time.Date(2024, 7, 27, 18, 28, 0, 0, time.FixedZone("JST", 9)),
 786		PositionAbsolute: false,
 787		RelativeID:       "jp25",
 788		InfoCardTitle:    "伏見稲荷大社 1",
 789		InfoCardPosition: BRightSBottom,
 790		Position:         utils.Coords{X: 0, Y: 0},
 791		AddWidth:         true,
 792		AddHeight:        false,
 793		Size:             Full,
 794		Resolution:       utils.Coords{X: 3896, Y: 5192},
 795		Video:            false,
 796	}, {
 797		ID:               "jp23",
 798		URL:              "japan2024/P1138031.jpg",
 799		DateCreated:      time.Date(2024, 7, 26, 9, 57, 0, 0, time.FixedZone("JST", 9)),
 800		PositionAbsolute: false,
 801		RelativeID:       "jp24",
 802		InfoCardTitle:    "teamLab Planets 3",
 803		InfoCardPosition: BRightSBottom,
 804		Position:         utils.Coords{X: 0, Y: 0},
 805		AddWidth:         true,
 806		AddHeight:        false,
 807		Size:             Half,
 808		Resolution:       utils.Coords{X: 5192, Y: 3896},
 809		Video:            false,
 810	}, {
 811		ID:               "jp22",
 812		URL:              "japan2024/P1137830.jpg",
 813		DateCreated:      time.Date(2024, 7, 26, 9, 41, 0, 0, time.FixedZone("JST", 9)),
 814		PositionAbsolute: false,
 815		RelativeID:       "jp23",
 816		InfoCardTitle:    "teamLab Planets 2",
 817		InfoCardPosition: BRightSTop,
 818		Position:         utils.Coords{X: 0, Y: 0},
 819		AddWidth:         false,
 820		AddHeight:        true,
 821		Size:             Half,
 822		Resolution:       utils.Coords{X: 5192, Y: 3896},
 823		Video:            false,
 824	}, {
 825		ID:               "jp21",
 826		URL:              "japan2024/P1137645.jpg",
 827		DateCreated:      time.Date(2024, 7, 26, 9, 24, 0, 0, time.FixedZone("JST", 9)),
 828		PositionAbsolute: false,
 829		RelativeID:       "jp23",
 830		InfoCardTitle:    "teamLab Planets 1",
 831		InfoCardPosition: BRightSBottom,
 832		Position:         utils.Coords{X: 0, Y: 0},
 833		AddWidth:         true,
 834		AddHeight:        false,
 835		Size:             Full,
 836		Resolution:       utils.Coords{X: 3896, Y: 5192},
 837		Video:            false,
 838	}, {
 839		ID:               "jp20",
 840		URL:              "japan2024/P1127586.jpg",
 841		DateCreated:      time.Date(2024, 7, 26, 9, 4, 0, 0, time.FixedZone("JST", 9)),
 842		PositionAbsolute: false,
 843		RelativeID:       "jp21",
 844		InfoCardTitle:    "テプコ豊洲ビル",
 845		InfoCardPosition: BRightSBottom,
 846		Position:         utils.Coords{X: 0, Y: 0},
 847		AddWidth:         true,
 848		AddHeight:        false,
 849		Size:             Half,
 850		Resolution:       utils.Coords{X: 5192, Y: 3896},
 851		Video:            false,
 852	}, {
 853		ID:               "jp19",
 854		URL:              "japan2024/P1127217.jpg",
 855		DateCreated:      time.Date(2024, 7, 25, 16, 24, 0, 0, time.FixedZone("JST", 9)),
 856		PositionAbsolute: false,
 857		RelativeID:       "jp20",
 858		InfoCardTitle:    "忠霊塔",
 859		InfoCardPosition: BRightSTop,
 860		Position:         utils.Coords{X: 0, Y: 0},
 861		AddWidth:         false,
 862		AddHeight:        true,
 863		Size:             Half,
 864		Resolution:       utils.Coords{X: 5192, Y: 3896},
 865		Video:            false,
 866	}, {
 867		ID:               "jp18",
 868		URL:              "japan2024/P1127011.jpg",
 869		DateCreated:      time.Date(2024, 7, 25, 10, 49, 0, 0, time.FixedZone("JST", 9)),
 870		PositionAbsolute: false,
 871		RelativeID:       "jp20",
 872		InfoCardTitle:    "新宿御苑 2",
 873		InfoCardPosition: BRightSTop,
 874		Position:         utils.Coords{X: 0, Y: 0},
 875		AddWidth:         true,
 876		AddHeight:        false,
 877		Size:             Half,
 878		Resolution:       utils.Coords{X: 5192, Y: 3896},
 879		Video:            false,
 880	}, {
 881		ID:               "jp17",
 882		URL:              "japan2024/P1126948.jpg",
 883		DateCreated:      time.Date(2024, 7, 25, 10, 41, 0, 0, time.FixedZone("JST", 9)),
 884		PositionAbsolute: false,
 885		RelativeID:       "jp18",
 886		InfoCardTitle:    "新宿御苑 1",
 887		InfoCardPosition: BRightSBottom,
 888		Position:         utils.Coords{X: 0, Y: 0},
 889		AddWidth:         false,
 890		AddHeight:        true,
 891		Size:             Half,
 892		Resolution:       utils.Coords{X: 5192, Y: 3896},
 893		Video:            false,
 894	}, {
 895		ID:               "jp16",
 896		URL:              "japan2024/P1126843.jpg",
 897		DateCreated:      time.Date(2024, 7, 24, 22, 32, 0, 0, time.FixedZone("JST", 9)),
 898		PositionAbsolute: false,
 899		RelativeID:       "jp18",
 900		InfoCardTitle:    "東京湾",
 901		InfoCardPosition: BRightSTop,
 902		Position:         utils.Coords{X: 0, Y: 0},
 903		AddWidth:         true,
 904		AddHeight:        false,
 905		Size:             Full,
 906		Resolution:       utils.Coords{X: 5192, Y: 3896},
 907		Video:            false,
 908	}, {
 909		ID:               "jp15",
 910		URL:              "japan2024/P1126726.jpg",
 911		DateCreated:      time.Date(2024, 7, 24, 21, 59, 0, 0, time.FixedZone("JST", 9)),
 912		PositionAbsolute: false,
 913		RelativeID:       "jp16",
 914		InfoCardTitle:    "テレポートブリッジ",
 915		InfoCardPosition: BRightSBottom,
 916		Position:         utils.Coords{X: 0, Y: 0},
 917		AddWidth:         true,
 918		AddHeight:        false,
 919		Size:             Half,
 920		Resolution:       utils.Coords{X: 5192, Y: 3896},
 921		Video:            false,
 922	}, {
 923		ID:               "jp14",
 924		URL:              "japan2024/P1126568.jpg",
 925		DateCreated:      time.Date(2024, 7, 24, 10, 28, 0, 0, time.FixedZone("JST", 9)),
 926		PositionAbsolute: false,
 927		RelativeID:       "jp15",
 928		InfoCardTitle:    "明治神宮の飾り樽",
 929		InfoCardPosition: BRightSTop,
 930		Position:         utils.Coords{X: 0, Y: 0},
 931		AddWidth:         false,
 932		AddHeight:        true,
 933		Size:             Half,
 934		Resolution:       utils.Coords{X: 5192, Y: 3896},
 935		Video:            false,
 936	}, {
 937		ID:               "jp13",
 938		URL:              "japan2024/P1126479.jpg",
 939		DateCreated:      time.Date(2024, 7, 23, 19, 47, 0, 0, time.FixedZone("JST", 9)),
 940		PositionAbsolute: false,
 941		RelativeID:       "jp15",
 942		InfoCardTitle:    "第58回葛飾納涼花火大会",
 943		InfoCardPosition: BRightSTop,
 944		Position:         utils.Coords{X: 0, Y: 0},
 945		AddWidth:         true,
 946		AddHeight:        false,
 947		Size:             Full,
 948		Resolution:       utils.Coords{X: 3896, Y: 5192},
 949		Video:            false,
 950	}, {
 951		ID:               "jp12",
 952		URL:              "japan2024/P1115597.jpg",
 953		DateCreated:      time.Date(2024, 7, 22, 21, 40, 0, 0, time.FixedZone("JST", 9)),
 954		PositionAbsolute: false,
 955		RelativeID:       "jp13",
 956		InfoCardTitle:    "雨夜の新宿 2",
 957		InfoCardPosition: BRightSBottom,
 958		Position:         utils.Coords{X: 0, Y: 0},
 959		AddWidth:         true,
 960		AddHeight:        false,
 961		Size:             Full,
 962		Resolution:       utils.Coords{X: 3896, Y: 5192},
 963		Video:            false,
 964	}, {
 965		ID:               "jp11",
 966		URL:              "japan2024/P1115331.jpg",
 967		DateCreated:      time.Date(2024, 7, 22, 21, 9, 0, 0, time.FixedZone("JST", 9)),
 968		PositionAbsolute: false,
 969		RelativeID:       "jp12",
 970		InfoCardTitle:    "雨夜の新宿 1",
 971		InfoCardPosition: BRightSTop,
 972		Position:         utils.Coords{X: 0, Y: 0},
 973		AddWidth:         true,
 974		AddHeight:        false,
 975		Size:             Full,
 976		Resolution:       utils.Coords{X: 3896, Y: 5192},
 977		Video:            false,
 978	}, {
 979		ID:               "jp10",
 980		URL:              "japan2024/P1115113.jpg",
 981		DateCreated:      time.Date(2024, 7, 22, 16, 0, 0, 0, time.FixedZone("JST", 9)),
 982		PositionAbsolute: false,
 983		RelativeID:       "jp11",
 984		InfoCardTitle:    "絵馬 2",
 985		InfoCardPosition: BRightSBottom,
 986		Position:         utils.Coords{X: 0, Y: 0},
 987		AddWidth:         true,
 988		AddHeight:        false,
 989		Size:             Full,
 990		Resolution:       utils.Coords{X: 3896, Y: 5192},
 991		Video:            false,
 992	}, {
 993		ID:               "jp09",
 994		URL:              "japan2024/P1115083.jpg",
 995		DateCreated:      time.Date(2024, 7, 22, 15, 55, 0, 0, time.FixedZone("JST", 9)),
 996		PositionAbsolute: false,
 997		RelativeID:       "jp10",
 998		InfoCardTitle:    "箱根神社",
 999		InfoCardPosition: BRightSBottom,
1000		Position:         utils.Coords{X: 0, Y: 0},
1001		AddWidth:         true,
1002		AddHeight:        false,
1003		Size:             Full,
1004		Resolution:       utils.Coords{X: 3896, Y: 5192},
1005		Video:            false,
1006	}, {
1007		ID:               "jp08",
1008		URL:              "japan2024/P1104829.jpg",
1009		DateCreated:      time.Date(2024, 7, 22, 14, 32, 0, 0, time.FixedZone("JST", 9)),
1010		PositionAbsolute: false,
1011		RelativeID:       "jp09",
1012		InfoCardTitle:    "箱根元宮 2",
1013		InfoCardPosition: BRightSBottom,
1014		Position:         utils.Coords{X: 0, Y: 0},
1015		AddWidth:         true,
1016		AddHeight:        false,
1017		Size:             Half,
1018		Resolution:       utils.Coords{X: 5192, Y: 3896},
1019		Video:            false,
1020	}, {
1021		ID:               "jp07",
1022		URL:              "japan2024/P1114971.jpg",
1023		DateCreated:      time.Date(2024, 7, 22, 14, 50, 0, 0, time.FixedZone("JST", 9)),
1024		PositionAbsolute: false,
1025		RelativeID:       "jp08",
1026		InfoCardTitle:    "箱根元宮 1",
1027		InfoCardPosition: BRightSBottom,
1028		Position:         utils.Coords{X: 0, Y: 0},
1029		AddWidth:         false,
1030		AddHeight:        true,
1031		Size:             Half,
1032		Resolution:       utils.Coords{X: 3896, Y: 5192},
1033		Video:            false,
1034	}, {
1035		ID:               "jp06",
1036		URL:              "japan2024/P1104535-cropped.webp",
1037		DateCreated:      time.Date(2024, 7, 22, 10, 41, 0, 0, time.FixedZone("JST", 9)),
1038		PositionAbsolute: false,
1039		RelativeID:       "jp08",
1040		InfoCardTitle:    "彫刻の森美術館",
1041		InfoCardPosition: BRightSBottom,
1042		Position:         utils.Coords{X: 0, Y: 0},
1043		AddWidth:         true,
1044		AddHeight:        false,
1045		Size:             Full,
1046		Resolution:       utils.Coords{X: 2996, Y: 2248},
1047		Video:            false,
1048	}, {
1049		ID:               "jp05",
1050		URL:              "japan2024/P1093894.jpg",
1051		DateCreated:      time.Date(2024, 7, 21, 9, 29, 0, 0, time.FixedZone("JST", 9)),
1052		PositionAbsolute: false,
1053		RelativeID:       "jp06",
1054		InfoCardTitle:    "浜離宮恩賜庭園",
1055		InfoCardPosition: BRightSTop,
1056		Position:         utils.Coords{X: 0, Y: 0},
1057		AddWidth:         true,
1058		AddHeight:        false,
1059		Size:             Full,
1060		Resolution:       utils.Coords{X: 3896, Y: 5192},
1061		Video:            false,
1062	}, {
1063		ID:               "jp04",
1064		URL:              "japan2024/P1093765.jpg",
1065		DateCreated:      time.Date(2024, 7, 21, 9, 7, 0, 0, time.FixedZone("JST", 9)),
1066		PositionAbsolute: false,
1067		RelativeID:       "jp05",
1068		InfoCardTitle:    "汐留シティセンター",
1069		InfoCardPosition: BRightSBottom,
1070		Position:         utils.Coords{X: 0, Y: 0},
1071		AddWidth:         true,
1072		AddHeight:        false,
1073		Size:             Half,
1074		Resolution:       utils.Coords{X: 3896, Y: 5192},
1075		Video:            false,
1076	}, {
1077		ID:               "jp03",
1078		URL:              "japan2024/P1093541.jpg",
1079		DateCreated:      time.Date(2024, 7, 20, 10, 06, 0, 0, time.FixedZone("JST", 9)),
1080		PositionAbsolute: false,
1081		RelativeID:       "jp04",
1082		InfoCardTitle:    "東京スカイツリー",
1083		InfoCardPosition: BRightSTop,
1084		Position:         utils.Coords{X: 0, Y: 0},
1085		AddWidth:         false,
1086		AddHeight:        true,
1087		Size:             Half,
1088		Resolution:       utils.Coords{X: 3896, Y: 5192},
1089		Video:            false,
1090	}, {
1091		ID:               "jp02",
1092		URL:              "japan2024/P1093431.jpg",
1093		DateCreated:      time.Date(2024, 7, 20, 9, 14, 0, 0, time.FixedZone("JST", 9)),
1094		PositionAbsolute: false,
1095		RelativeID:       "jp04",
1096		InfoCardTitle:    "絵馬 1",
1097		InfoCardPosition: BRightSTop,
1098		Position:         utils.Coords{X: 0, Y: 0},
1099		AddWidth:         true,
1100		AddHeight:        false,
1101		Size:             Full,
1102		Resolution:       utils.Coords{X: 5192, Y: 3896},
1103		Video:            false,
1104	}, {
1105		ID:               "jp01",
1106		URL:              "japan2024/P1093354.jpg",
1107		DateCreated:      time.Date(2024, 7, 19, 20, 24, 0, 0, time.FixedZone("JST", 9)),
1108		PositionAbsolute: false,
1109		RelativeID:       "jp02",
1110		InfoCardTitle:    "夜の横浜 2",
1111		InfoCardPosition: BBottomSRight,
1112		Position:         utils.Coords{X: 0, Y: 0},
1113		AddWidth:         true,
1114		AddHeight:        false,
1115		Size:             Full,
1116		Resolution:       utils.Coords{X: 3896, Y: 5192},
1117		Video:            false,
1118	},
1119	{
1120		ID:               "jp00",
1121		URL:              "japan2024/P1093211.jpg",
1122		DateCreated:      time.Date(2024, 7, 19, 20, 6, 0, 0, time.FixedZone("JST", 9)),
1123		PositionAbsolute: false,
1124		RelativeID:       "jp01",
1125		InfoCardTitle:    "夜の横浜 1",
1126		InfoCardPosition: BBottomSRight,
1127		Position:         utils.Coords{X: 0, Y: 0},
1128		AddWidth:         true,
1129		AddHeight:        false,
1130		Size:             Full,
1131		Resolution:       utils.Coords{X: 5192, Y: 3896},
1132		Video:            false,
1133	},
1134	{
1135		ID:               "d0",
1136		URL:              "starjump.webp",
1137		DateCreated:      time.Date(2024, 6, 26, 20, 44, 0, 0, time.FixedZone("CEST", 2)),
1138		PositionAbsolute: false,
1139		RelativeID:       "jp00",
1140		InfoCardTitle:    "Starjump",
1141		InfoCardPosition: BRightSBottom,
1142		Position:         utils.Coords{X: 0, Y: 0},
1143		AddWidth:         true,
1144		AddHeight:        false,
1145		Size:             Full,
1146		Resolution:       utils.Coords{X: 5120, Y: 1440},
1147		Video:            false,
1148	}, {
1149		ID:               "c0",
1150		URL:              "tsutsuji.jpg",
1151		DateCreated:      time.Date(2024, 5, 14, 19, 33, 14, 0, time.FixedZone("CEST", 2)),
1152		PositionAbsolute: false,
1153		RelativeID:       "d0",
1154		InfoCardTitle:    "つつじ",
1155		InfoCardPosition: BBottomSLeft,
1156		Position:         utils.Coords{X: 0, Y: 0},
1157		AddWidth:         true,
1158		AddHeight:        false,
1159		Size:             Full,
1160		Resolution:       utils.Coords{X: 5192, Y: 3896},
1161		Video:            false,
1162	}, {
1163		ID:               "b0",
1164		URL:              "java.webp",
1165		DateCreated:      time.Date(2024, 4, 18, 14, 44, 52, 0, time.FixedZone("CEST", 2)),
1166		PositionAbsolute: false,
1167		RelativeID:       "c0",
1168		InfoCardTitle:    "Java",
1169		InfoCardPosition: BBottomSRight,
1170		Position:         utils.Coords{X: 0, Y: 0},
1171		AddWidth:         true,
1172		AddHeight:        false,
1173		Size:             Full,
1174		Resolution:       utils.Coords{X: 5192, Y: 3896},
1175		Video:            false,
1176	}, {
1177		ID:               "a0",
1178		URL:              "march2024-sakura-P1082294.webp",
1179		DateCreated:      time.Date(2024, 3, 2, 21, 18, 20, 0, time.FixedZone("CET", 1)),
1180		PositionAbsolute: false,
1181		RelativeID:       "b0",
1182		InfoCardTitle:    "夜桜 1",
1183		InfoCardPosition: BBottomSRight,
1184		Position:         utils.Coords{X: 0, Y: 0},
1185		AddWidth:         true,
1186		AddHeight:        false,
1187		Size:             Full,
1188		Resolution:       utils.Coords{X: 5192, Y: 3896},
1189		Video:            false,
1190	},
1191	{
1192		ID:               "a1",
1193		URL:              "march2024-sakura-P1082290.webp",
1194		DateCreated:      time.Date(2024, 3, 2, 21, 15, 49, 0, time.FixedZone("CET", 1)),
1195		PositionAbsolute: false,
1196		RelativeID:       "a0",
1197		InfoCardTitle:    "夜桜 2",
1198		InfoCardPosition: BBottomSRight,
1199		Position:         utils.Coords{X: 0, Y: 0},
1200		AddWidth:         true,
1201		AddHeight:        false,
1202		Size:             Half,
1203		Resolution:       utils.Coords{X: 5192, Y: 3896},
1204		Video:            false,
1205	},
1206	{
1207		ID:               "a2",
1208		URL:              "march2024-sakura-P1082305.webp",
1209		DateCreated:      time.Date(2024, 3, 2, 21, 25, 54, 0, time.FixedZone("CET", 1)),
1210		PositionAbsolute: false,
1211		RelativeID:       "a1",
1212		InfoCardTitle:    "夜桜 3",
1213		InfoCardPosition: BBottomSRight,
1214		Position:         utils.Coords{X: 0, Y: 0},
1215		AddWidth:         false,
1216		AddHeight:        true,
1217		Size:             Half,
1218		Resolution:       utils.Coords{X: 5192, Y: 3896},
1219		Video:            false,
1220	},
1221
1222	{
1223		ID:               "a3",
1224		URL:              "march2024-sakura-P1082293.webp",
1225		DateCreated:      time.Date(2024, 3, 2, 21, 17, 33, 0, time.FixedZone("CET", 1)),
1226		PositionAbsolute: false,
1227		RelativeID:       "a1",
1228		InfoCardTitle:    "夜桜 4",
1229		InfoCardPosition: BBottomSRight,
1230		Position:         utils.Coords{X: 0, Y: 0},
1231		AddWidth:         true,
1232		AddHeight:        false,
1233		Size:             Full,
1234		Resolution:       utils.Coords{X: 5192, Y: 3896},
1235		Video:            false,
1236	},
1237	{
1238		ID:               "0",
1239		URL:              "tokyowatercolor.webp",
1240		DateCreated:      time.Date(2024, 2, 21, 13, 07, 00, 0, time.FixedZone("CET", 1)),
1241		PositionAbsolute: false,
1242		RelativeID:       "a3",
1243		InfoCardTitle:    "東京・水彩画風",
1244		InfoCardPosition: BBottomSRight,
1245		Position:         utils.Coords{X: 0, Y: 0},
1246		AddWidth:         true,
1247		AddHeight:        false,
1248		Size:             Full,
1249		Resolution:       utils.Coords{X: 2560, Y: 1440},
1250		Video:            false,
1251	},
1252	{
1253		ID:               "1",
1254		URL:              "5yencoins.webp",
1255		DateCreated:      time.Date(2024, 02, 17, 14, 59, 00, 0, time.FixedZone("CET", 1)),
1256		PositionAbsolute: false,
1257		RelativeID:       "0",
1258		InfoCardTitle:    "For good luck.",
1259		InfoCardPosition: BRightSBottom,
1260		Position:         utils.Coords{X: 0, Y: 0},
1261		AddWidth:         true,
1262		AddHeight:        false,
1263		Size:             Half,
1264		Resolution:       utils.Coords{X: 3360, Y: 1440},
1265		Video:            false,
1266	},
1267	{
1268		ID:               "2",
1269		URL:              "watercolordesign.mp4",
1270		DateCreated:      time.Date(2024, 02, 10, 20, 9, 00, 0, time.FixedZone("CET", 1)),
1271		PositionAbsolute: false,
1272		RelativeID:       "1",
1273		InfoCardTitle:    "Watercolor Design",
1274		InfoCardPosition: BRightSBottom,
1275		Position:         utils.Coords{X: 0, Y: 0},
1276		AddWidth:         false,
1277		AddHeight:        true,
1278		Size:             Half,
1279		Resolution:       utils.Coords{X: 1440, Y: 1440},
1280		Video:            true,
1281	},
1282	{
1283		ID:               "3",
1284		URL:              "GPTrainV8-yuv420p-compressed.mp4",
1285		DateCreated:      time.Date(2024, 01, 5, 16, 19, 00, 0, time.FixedZone("CET", 1)),
1286		PositionAbsolute: false,
1287		RelativeID:       "1",
1288		InfoCardTitle:    "Neon Subway",
1289		InfoCardPosition: BBottomSRight,
1290		Position:         utils.Coords{X: 0, Y: 0},
1291		AddWidth:         true,
1292		AddHeight:        false,
1293		Size:             Full,
1294		Resolution:       utils.Coords{X: 1920, Y: 1440},
1295		Video:            true,
1296	},
1297	{
1298		ID:               "4",
1299		URL:              "dreaming.jpg",
1300		DateCreated:      time.Date(2023, 12, 25, 18, 49, 00, 0, time.FixedZone("CET", 1)),
1301		PositionAbsolute: false,
1302		RelativeID:       "3",
1303		InfoCardTitle:    "Dreaming",
1304		InfoCardPosition: BRightSBottom,
1305		Position:         utils.Coords{X: 0, Y: 0},
1306		AddWidth:         true,
1307		AddHeight:        false,
1308		Size:             Half,
1309		Resolution:       utils.Coords{X: 4096, Y: 2160},
1310		Video:            false,
1311	},
1312	{
1313		ID:               "5",
1314		URL:              "krakowfoliage1.jpg",
1315		DateCreated:      time.Date(2023, 10, 28, 14, 38, 00, 0, time.FixedZone("CET", 1)),
1316		PositionAbsolute: false,
1317		RelativeID:       "4",
1318		InfoCardTitle:    "Foliage 1",
1319		InfoCardPosition: BRightSBottom,
1320		Position:         utils.Coords{X: 0, Y: 0},
1321		AddWidth:         false,
1322		AddHeight:        true,
1323		Size:             Half,
1324		Resolution:       utils.Coords{X: 4940, Y: 3272},
1325		Video:            false,
1326	},
1327	{
1328		ID:               "6",
1329		URL:              "krakowfoliage2.jpg",
1330		DateCreated:      time.Date(2023, 10, 28, 13, 53, 00, 0, time.FixedZone("CET", 1)),
1331		PositionAbsolute: false,
1332		RelativeID:       "4",
1333		InfoCardTitle:    "Foliage 2",
1334		InfoCardPosition: BBottomSRight,
1335		Position:         utils.Coords{X: 0, Y: 0},
1336		AddWidth:         true,
1337		AddHeight:        false,
1338		Size:             Full,
1339		Resolution:       utils.Coords{X: 3272, Y: 4940},
1340		Video:            false,
1341	},
1342	{
1343		ID:               "7",
1344		URL:              "saltmine1.jpg",
1345		DateCreated:      time.Date(2023, 10, 28, 9, 19, 00, 0, time.FixedZone("CET", 1)),
1346		PositionAbsolute: false,
1347		RelativeID:       "6",
1348		InfoCardTitle:    "Salt Mine 1",
1349		InfoCardPosition: BBottomSRight,
1350		Position:         utils.Coords{X: 0, Y: 0},
1351		AddWidth:         true,
1352		AddHeight:        false,
1353		Size:             Full,
1354		Resolution:       utils.Coords{X: 3272, Y: 4940},
1355		Video:            false,
1356	},
1357	{
1358		ID:               "8",
1359		URL:              "saltmine2.jpg",
1360		DateCreated:      time.Date(2023, 10, 28, 9, 11, 00, 0, time.FixedZone("CET", 1)),
1361		PositionAbsolute: false,
1362		RelativeID:       "7",
1363		InfoCardTitle:    "Salt Mine 2",
1364		InfoCardPosition: BRightSBottom,
1365		Position:         utils.Coords{X: 0, Y: 0},
1366		AddWidth:         true,
1367		AddHeight:        false,
1368		Size:             Half,
1369		Resolution:       utils.Coords{X: 3272, Y: 4940},
1370		Video:            false,
1371	},
1372	{
1373		ID:               "9",
1374		URL:              "saltmine3.jpg",
1375		DateCreated:      time.Date(2023, 10, 28, 9, 42, 00, 0, time.FixedZone("CET", 1)),
1376		PositionAbsolute: false,
1377		RelativeID:       "8",
1378		InfoCardTitle:    "Salt Mine 3",
1379		InfoCardPosition: BRightSBottom,
1380		Position:         utils.Coords{X: 0, Y: 0},
1381		AddWidth:         false,
1382		AddHeight:        true,
1383		Size:             Half,
1384		Resolution:       utils.Coords{X: 3272, Y: 4940},
1385		Video:            false,
1386	},
1387	{
1388		ID:               "10",
1389		URL:              "saltmine4.jpg",
1390		DateCreated:      time.Date(2023, 10, 28, 8, 15, 00, 0, time.FixedZone("CET", 1)),
1391		PositionAbsolute: false,
1392		RelativeID:       "8",
1393		InfoCardTitle:    "Salt Mine 4",
1394		InfoCardPosition: BRightSTop,
1395		Position:         utils.Coords{X: 0, Y: 0},
1396		AddWidth:         true,
1397		AddHeight:        false,
1398		Size:             Half,
1399		Resolution:       utils.Coords{X: 4940, Y: 3272},
1400		Video:            false,
1401	},
1402	{
1403		ID:               "11",
1404		URL:              "ravens.jpg",
1405		DateCreated:      time.Date(2023, 10, 26, 17, 58, 00, 0, time.FixedZone("CET", 1)),
1406		PositionAbsolute: false,
1407		RelativeID:       "10",
1408		InfoCardTitle:    "Ravens",
1409		InfoCardPosition: BRightSTop,
1410		Position:         utils.Coords{X: 0, Y: 0},
1411		AddWidth:         false,
1412		AddHeight:        true,
1413		Size:             Half,
1414		Resolution:       utils.Coords{X: 4940, Y: 3272},
1415		Video:            false,
1416	},
1417	{
1418		ID:               "auschwitz",
1419		URL:              "auschwitz.jpg",
1420		DateCreated:      time.Date(2023, 10, 27, 12, 13, 33, 0, time.FixedZone("CET", 1)),
1421		PositionAbsolute: false,
1422		RelativeID:       "10",
1423		InfoCardTitle:    "Auschwitz",
1424		InfoCardPosition: BRightSTop,
1425		Position:         utils.Coords{X: 0, Y: 0},
1426		AddWidth:         true,
1427		AddHeight:        false,
1428		Size:             Full,
1429		Resolution:       utils.Coords{X: 4940, Y: 3272},
1430		Video:            false,
1431	},
1432	{
1433		ID:               "12",
1434		URL:              "lilypads.jpg",
1435		DateCreated:      time.Date(2023, 8, 8, 10, 44, 00, 0, time.FixedZone("ICT", 7)),
1436		PositionAbsolute: false,
1437		RelativeID:       "auschwitz",
1438		InfoCardTitle:    "Lilypads",
1439		InfoCardPosition: BBottomSLeft,
1440		Position:         utils.Coords{X: 0, Y: 0},
1441		AddWidth:         true,
1442		AddHeight:        false,
1443		Size:             Full,
1444		Resolution:       utils.Coords{X: 4940, Y: 3272},
1445		Video:            false,
1446	},
1447	{
1448		ID:               "13",
1449		URL:              "powerlines.jpg",
1450		DateCreated:      time.Date(2023, 7, 31, 17, 01, 00, 0, time.FixedZone("ICT", 7)),
1451		PositionAbsolute: false,
1452		RelativeID:       "12",
1453		InfoCardTitle:    "Powerlines",
1454		InfoCardPosition: BBottomSRight,
1455		Position:         utils.Coords{X: 0, Y: 0},
1456		AddWidth:         true,
1457		AddHeight:        false,
1458		Size:             Full,
1459		Resolution:       utils.Coords{X: 4940, Y: 3272},
1460		Video:            false,
1461	},
1462
1463	{
1464		ID:               "14",
1465		URL:              "telecom.jpg",
1466		DateCreated:      time.Date(2023, 8, 5, 22, 16, 00, 0, time.FixedZone("ICT", 7)),
1467		PositionAbsolute: false,
1468		RelativeID:       "13",
1469		InfoCardTitle:    "Telecom",
1470		InfoCardPosition: BRightSTop,
1471		Position:         utils.Coords{X: 0, Y: 0},
1472		AddWidth:         true,
1473		AddHeight:        false,
1474		Size:             Half,
1475		Resolution:       utils.Coords{X: 4940, Y: 3272},
1476		Video:            false,
1477	},
1478	{
1479		ID:               "15",
1480		URL:              "tsunamiwarning.jpg",
1481		DateCreated:      time.Date(2023, 8, 5, 22, 14, 00, 0, time.FixedZone("ICT", 7)),
1482		PositionAbsolute: false,
1483		RelativeID:       "14",
1484		InfoCardTitle:    "Tsunami Warning",
1485		InfoCardPosition: BRightSTop,
1486		Position:         utils.Coords{X: 0, Y: 0},
1487		AddWidth:         false,
1488		AddHeight:        true,
1489		Size:             Half,
1490		Resolution:       utils.Coords{X: 4940, Y: 3272},
1491		Video:            false,
1492	},
1493	{
1494		ID:               "16",
1495		URL:              "khlong.jpg",
1496		DateCreated:      time.Date(2023, 8, 2, 10, 40, 00, 0, time.FixedZone("ICT", 7)),
1497		PositionAbsolute: false,
1498		RelativeID:       "14",
1499		InfoCardTitle:    "Khlong 1",
1500		InfoCardPosition: BBottomSRight,
1501		Position:         utils.Coords{X: 0, Y: 0},
1502		AddWidth:         true,
1503		AddHeight:        false,
1504		Size:             Full,
1505		Resolution:       utils.Coords{X: 3272, Y: 4940},
1506		Video:            false,
1507	},
1508	{
1509		ID:               "khlong2",
1510		URL:              "khlong2.jpg",
1511		DateCreated:      time.Date(2023, 8, 2, 10, 50, 13, 0, time.FixedZone("ICT", 7)),
1512		PositionAbsolute: false,
1513		RelativeID:       "16",
1514		InfoCardTitle:    "Khlong 2",
1515		InfoCardPosition: BBottomSLeft,
1516		Position:         utils.Coords{X: 0, Y: 0},
1517		AddWidth:         true,
1518		AddHeight:        false,
1519		Size:             Full,
1520		Resolution:       utils.Coords{X: 3272, Y: 4940},
1521		Video:            false,
1522	},
1523	{
1524		ID:               "lotus1",
1525		URL:              "lotus1.jpg",
1526		DateCreated:      time.Date(2023, 8, 2, 13, 16, 43, 0, time.FixedZone("ICT", 7)),
1527		PositionAbsolute: false,
1528		RelativeID:       "khlong2",
1529		InfoCardTitle:    "Lotus 1",
1530		InfoCardPosition: BRightSBottom,
1531		Position:         utils.Coords{X: 0, Y: 0},
1532		AddWidth:         true,
1533		AddHeight:        false,
1534		Size:             Half,
1535		Resolution:       utils.Coords{X: 4940, Y: 3272},
1536		Video:            false,
1537	},
1538	{
1539		ID:               "lotus2",
1540		URL:              "lotus2.jpg",
1541		DateCreated:      time.Date(2023, 8, 2, 13, 17, 00, 0, time.FixedZone("ICT", 7)),
1542		PositionAbsolute: false,
1543		RelativeID:       "lotus1",
1544		InfoCardTitle:    "Lotus 2",
1545		InfoCardPosition: BRightSBottom,
1546		Position:         utils.Coords{X: 0, Y: 0},
1547		AddWidth:         false,
1548		AddHeight:        true,
1549		Size:             Half,
1550		Resolution:       utils.Coords{X: 4940, Y: 3272},
1551		Video:            false,
1552	},
1553	{
1554		ID:               "17",
1555		URL:              "orchids.jpg",
1556		DateCreated:      time.Date(2023, 7, 31, 16, 29, 00, 0, time.FixedZone("ICT", 7)),
1557		PositionAbsolute: false,
1558		RelativeID:       "lotus1",
1559		InfoCardTitle:    "Orchids",
1560		InfoCardPosition: BTopSRight,
1561		Position:         utils.Coords{X: 0, Y: 0},
1562		AddWidth:         true,
1563		AddHeight:        false,
1564		Size:             Full,
1565		Resolution:       utils.Coords{X: 3272, Y: 4940},
1566		Video:            false,
1567	},
1568	{
1569		ID:               "kanzansakura",
1570		URL:              "kanzansakura.webP",
1571		DateCreated:      time.Date(2023, 4, 1, 12, 27, 9, 0, time.FixedZone("CEST", 2)),
1572		PositionAbsolute: false,
1573		RelativeID:       "17",
1574		InfoCardTitle:    "Kanzan Sakura",
1575		InfoCardPosition: BBottomSRight,
1576		Position:         utils.Coords{X: 0, Y: 0},
1577		AddWidth:         true,
1578		AddHeight:        false,
1579		Size:             Full,
1580		Resolution:       utils.Coords{X: 3888, Y: 5184},
1581		Video:            false,
1582	},
1583	{
1584		ID:               "maple",
1585		URL:              "maple.jpg",
1586		DateCreated:      time.Date(2023, 5, 29, 12, 24, 34, 0, time.FixedZone("CEST", 2)),
1587		PositionAbsolute: false,
1588		RelativeID:       "kanzansakura",
1589		InfoCardTitle:    "Maple",
1590		InfoCardPosition: BBottomSRight,
1591		Position:         utils.Coords{X: 0, Y: 0},
1592		AddWidth:         true,
1593		AddHeight:        false,
1594		Size:             Full,
1595		Resolution:       utils.Coords{X: 3888, Y: 5184},
1596		Video:            false,
1597	},
1598	{
1599		ID:               "junethunderstorm",
1600		URL:              "junethunderstorm.jpg",
1601		DateCreated:      time.Date(2023, 6, 11, 20, 37, 50, 0, time.FixedZone("CEST", 2)),
1602		PositionAbsolute: false,
1603		RelativeID:       "maple",
1604		InfoCardTitle:    "Thunderstorm",
1605		InfoCardPosition: BTopSRight,
1606		Position:         utils.Coords{X: 0, Y: 0},
1607		AddWidth:         true,
1608		AddHeight:        false,
1609		Size:             Full,
1610		Resolution:       utils.Coords{X: 3888, Y: 5184},
1611		Video:            false,
1612	},
1613	{
1614		ID:               "18",
1615		URL:              "theblaze.png",
1616		DateCreated:      time.Date(2023, 5, 1, 15, 18, 00, 0, time.FixedZone("CEST", 2)),
1617		PositionAbsolute: false,
1618		RelativeID:       "junethunderstorm",
1619		InfoCardTitle:    "The Blaze",
1620		InfoCardPosition: BBottomSLeft,
1621		Position:         utils.Coords{X: 0, Y: 0},
1622		AddWidth:         true,
1623		AddHeight:        false,
1624		Size:             Half,
1625		Resolution:       utils.Coords{X: 3334, Y: 1755},
1626		Video:            false,
1627	},
1628	{
1629		ID:               "19",
1630		URL:              "GreekArchitecture-HQ-Cam6-Signed.png",
1631		DateCreated:      time.Date(2023, 7, 10, 22, 02, 00, 0, time.FixedZone("CEST", 2)),
1632		PositionAbsolute: false,
1633		RelativeID:       "18",
1634		InfoCardTitle:    "Greek Temple 1",
1635		InfoCardPosition: BBottomSRight,
1636		Position:         utils.Coords{X: 0, Y: 0},
1637		AddWidth:         false,
1638		AddHeight:        true,
1639		Size:             Half,
1640		Resolution:       utils.Coords{X: 3840, Y: 2160},
1641		Video:            false,
1642	},
1643
1644	{
1645		ID:               "19",
1646		URL:              "GreekArchitecture-HQ-Cam2-Signed.png",
1647		DateCreated:      time.Date(2023, 7, 10, 22, 02, 00, 0, time.FixedZone("CEST", 2)),
1648		PositionAbsolute: false,
1649		RelativeID:       "18",
1650		InfoCardTitle:    "Greek Temple 2",
1651		InfoCardPosition: BBottomSRight,
1652		Position:         utils.Coords{X: 0, Y: 0},
1653		AddWidth:         true,
1654		AddHeight:        false,
1655		Size:             Half,
1656		Resolution:       utils.Coords{X: 3840, Y: 2160},
1657		Video:            false,
1658	},
1659	{
1660		ID:               "20",
1661		URL:              "moebius-filter.png",
1662		DateCreated:      time.Date(2023, 8, 4, 2, 39, 00, 0, time.FixedZone("CEST", 2)),
1663		PositionAbsolute: false,
1664		RelativeID:       "19",
1665		InfoCardTitle:    "Moebius Style",
1666		InfoCardPosition: BRightSBottom,
1667		Position:         utils.Coords{X: 0, Y: 0},
1668		AddWidth:         false,
1669		AddHeight:        true,
1670		Size:             Half,
1671		Resolution:       utils.Coords{X: 3888, Y: 5184},
1672		Video:            false,
1673	},
1674	{
1675		ID:               "21",
1676		URL:              "cyanotype.jpg",
1677		DateCreated:      time.Date(2023, 1, 18, 12, 40, 00, 0, time.FixedZone("CET", 1)),
1678		PositionAbsolute: false,
1679		RelativeID:       "19",
1680		InfoCardTitle:    "Cyanotype",
1681		InfoCardPosition: BRightSBottom,
1682		Position:         utils.Coords{X: 0, Y: 0},
1683		AddWidth:         true,
1684		AddHeight:        false,
1685		Size:             Half,
1686		Resolution:       utils.Coords{X: 1259, Y: 1259},
1687		Video:            false,
1688	},
1689	{
1690		ID:               "22",
1691		URL:              "apocalypticbuildings.png",
1692		DateCreated:      time.Date(2022, 11, 25, 23, 43, 00, 0, time.FixedZone("CET", 1)),
1693		PositionAbsolute: false,
1694		RelativeID:       "21",
1695		InfoCardTitle:    "Apocalyptic City",
1696		InfoCardPosition: BRightSBottom,
1697		Position:         utils.Coords{X: 0, Y: 0},
1698		AddWidth:         false,
1699		AddHeight:        true,
1700		Size:             Half,
1701		Resolution:       utils.Coords{X: 810, Y: 1080},
1702		Video:            false,
1703	},
1704	{
1705		ID:               "23",
1706		URL:              "railroad.webp",
1707		DateCreated:      time.Date(2022, 12, 19, 23, 54, 00, 0, time.FixedZone("CET", 1)),
1708		PositionAbsolute: false,
1709		RelativeID:       "21",
1710		InfoCardTitle:    "Railroad",
1711		InfoCardPosition: BRightSTop,
1712		Position:         utils.Coords{X: 0, Y: 0},
1713		AddWidth:         true,
1714		AddHeight:        false,
1715		Size:             Half,
1716		Resolution:       utils.Coords{X: 2880, Y: 3600},
1717		Video:            false,
1718	},
1719	{
1720		ID:               "24",
1721		URL:              "wakes.jpg",
1722		DateCreated:      time.Date(2022, 11, 2, 17, 12, 00, 0, time.FixedZone("EET", 2)),
1723		PositionAbsolute: false,
1724		RelativeID:       "22",
1725		InfoCardTitle:    "Wakes",
1726		InfoCardPosition: BRightSBottom,
1727		Position:         utils.Coords{X: 0, Y: 0},
1728		AddWidth:         true,
1729		AddHeight:        false,
1730		Size:             Half,
1731		Resolution:       utils.Coords{X: 5184, Y: 3888},
1732		Video:            false,
1733	},
1734	{
1735		ID:               "25",
1736		URL:              "olivetree.jpg",
1737		DateCreated:      time.Date(2022, 11, 2, 17, 15, 00, 0, time.FixedZone("EET", 2)),
1738		PositionAbsolute: false,
1739		RelativeID:       "23",
1740		InfoCardTitle:    "Olive",
1741		InfoCardPosition: BBottomSRight,
1742		Position:         utils.Coords{X: 0, Y: 0},
1743		AddWidth:         true,
1744		AddHeight:        false,
1745		Size:             Full,
1746		Resolution:       utils.Coords{X: 3888, Y: 5184},
1747		Video:            false,
1748	},
1749	{
1750		ID:               "26",
1751		URL:              "chuuhai.mp4",
1752		DateCreated:      time.Date(2022, 11, 6, 16, 25, 00, 0, time.FixedZone("CET", 1)),
1753		PositionAbsolute: false,
1754		RelativeID:       "25",
1755		InfoCardTitle:    "酎ハイ",
1756		InfoCardPosition: BRightSTop,
1757		Position:         utils.Coords{X: 0, Y: 0},
1758		AddWidth:         true,
1759		AddHeight:        false,
1760		Size:             Half,
1761		Resolution:       utils.Coords{X: 836, Y: 1080},
1762		Video:            true,
1763	},
1764	{
1765		ID:               "27",
1766		URL:              "greeksunset.jpg",
1767		DateCreated:      time.Date(2022, 11, 1, 17, 44, 00, 0, time.FixedZone("EET", 2)),
1768		PositionAbsolute: false,
1769		RelativeID:       "26",
1770		InfoCardTitle:    "Greek Sunset",
1771		InfoCardPosition: BRightSTop,
1772		Position:         utils.Coords{X: 0, Y: 0},
1773		AddWidth:         false,
1774		AddHeight:        true,
1775		Size:             Half,
1776		Resolution:       utils.Coords{X: 5184, Y: 3888},
1777		Video:            false,
1778	},
1779	{
1780		ID:               "28",
1781		URL:              "oceanlightbulb.webp",
1782		DateCreated:      time.Date(2022, 10, 22, 19, 27, 00, 0, time.FixedZone("CET", 1)),
1783		PositionAbsolute: false,
1784		RelativeID:       "26",
1785		InfoCardTitle:    "Lightbulb Benchy",
1786		InfoCardPosition: BRightSTop,
1787		Position:         utils.Coords{X: 0, Y: 0},
1788		AddWidth:         true,
1789		AddHeight:        false,
1790		Size:             Half,
1791		Resolution:       utils.Coords{X: 2160, Y: 2160},
1792		Video:            false,
1793	},
1794	{
1795		ID:               "29",
1796		URL:              "wheatfield.jpg",
1797		DateCreated:      time.Date(2022, 10, 16, 21, 01, 00, 0, time.FixedZone("CET", 1)),
1798		PositionAbsolute: false,
1799		RelativeID:       "27",
1800		InfoCardTitle:    "小麦畑",
1801		InfoCardPosition: BBottomSLeft,
1802		Position:         utils.Coords{X: 0, Y: 0},
1803		AddWidth:         true,
1804		AddHeight:        false,
1805		Size:             Half,
1806		Resolution:       utils.Coords{X: 5120, Y: 1440},
1807		Video:            false,
1808	},
1809	{
1810		ID:               "30",
1811		URL:              "hummingbird.jpg",
1812		DateCreated:      time.Date(2022, 8, 2, 11, 28, 00, 0, time.FixedZone("AST", -4)),
1813		PositionAbsolute: false,
1814		RelativeID:       "28",
1815		InfoCardTitle:    "Hummingbird",
1816		InfoCardPosition: BRightSBottom,
1817		Position:         utils.Coords{X: 0, Y: 0},
1818		AddWidth:         true,
1819		AddHeight:        false,
1820		Size:             Half,
1821		Resolution:       utils.Coords{X: 5184, Y: 3888},
1822		Video:            false,
1823	}, {
1824		ID:               "31",
1825		URL:              "longexposure.jpg",
1826		DateCreated:      time.Date(2022, 3, 19, 22, 16, 00, 0, time.FixedZone("CET", 1)),
1827		PositionAbsolute: false,
1828		RelativeID:       "30",
1829		InfoCardTitle:    "Godspeed",
1830		InfoCardPosition: BBottomSLeft,
1831		Position:         utils.Coords{X: 0, Y: 0},
1832		AddWidth:         true,
1833		AddHeight:        false,
1834		Size:             Half,
1835		Resolution:       utils.Coords{X: 5184, Y: 3888},
1836		Video:            false,
1837	}, {
1838		ID:               "32",
1839		URL:              "90sanimesubway.webp",
1840		DateCreated:      time.Date(2022, 7, 13, 22, 40, 00, 0, time.FixedZone("CEST", 2)),
1841		PositionAbsolute: false,
1842		RelativeID:       "31",
1843		InfoCardTitle:    "Retro Subway",
1844		InfoCardPosition: BBottomSLeft,
1845		Position:         utils.Coords{X: 0, Y: 0},
1846		AddWidth:         false,
1847		AddHeight:        true,
1848		Size:             Half,
1849		Resolution:       utils.Coords{X: 3840, Y: 2880},
1850		Video:            false,
1851	}, {
1852		ID:               "plantsnearoldtraintracks",
1853		URL:              "plantsnearoldtraintracks.jpg",
1854		DateCreated:      time.Date(2021, 11, 24, 16, 35, 31, 0, time.FixedZone("CET", 1)),
1855		PositionAbsolute: false,
1856		RelativeID:       "31",
1857		InfoCardTitle:    "Old Train Tracks",
1858		InfoCardPosition: BRightSBottom,
1859		Position:         utils.Coords{X: 0, Y: 0},
1860		AddWidth:         true,
1861		AddHeight:        false,
1862		Size:             Half,
1863		Resolution:       utils.Coords{X: 3888, Y: 5184},
1864		Video:            false,
1865	}, {
1866		ID:               "oldtrainsignal",
1867		URL:              "oldtrainsignal.jpg",
1868		DateCreated:      time.Date(2021, 11, 24, 16, 25, 22, 0, time.FixedZone("CET", 1)),
1869		PositionAbsolute: false,
1870		RelativeID:       "plantsnearoldtraintracks",
1871		InfoCardTitle:    "Old Train Signal",
1872		InfoCardPosition: BRightSTop,
1873		Position:         utils.Coords{X: 0, Y: 0},
1874		AddWidth:         false,
1875		AddHeight:        true,
1876		Size:             Half,
1877		Resolution:       utils.Coords{X: 3888, Y: 5184},
1878		Video:            false,
1879	}, {
1880		ID:               "moonxpowerline",
1881		URL:              "moonxpowerline.webP",
1882		DateCreated:      time.Date(2021, 10, 31, 6, 18, 21, 0, time.FixedZone("MUT", 4)),
1883		PositionAbsolute: false,
1884		RelativeID:       "plantsnearoldtraintracks",
1885		InfoCardTitle:    "Moon & Powerlines",
1886		InfoCardPosition: BBottomSRight,
1887		Position:         utils.Coords{X: 0, Y: 0},
1888		AddWidth:         true,
1889		AddHeight:        false,
1890		Size:             Full,
1891		Resolution:       utils.Coords{X: 3888, Y: 5184},
1892		Video:            false,
1893	}, {
1894		ID:               "33",
1895		URL:              "birds.webp",
1896		DateCreated:      time.Date(2021, 9, 6, 20, 11, 00, 0, time.FixedZone("CEST", 2)),
1897		PositionAbsolute: false,
1898		RelativeID:       "moonxpowerline",
1899		InfoCardTitle:    "Twilight & Birds",
1900		InfoCardPosition: BRightSTop,
1901		Position:         utils.Coords{X: 0, Y: 0},
1902		AddWidth:         true,
1903		AddHeight:        false,
1904		Size:             Half,
1905		Resolution:       utils.Coords{X: 5184, Y: 3888},
1906		Video:            false,
1907	}, {
1908		ID:               "34",
1909		URL:              "lightbulb.webp",
1910		DateCreated:      time.Date(2021, 11, 14, 12, 11, 00, 0, time.FixedZone("CET", 1)),
1911		PositionAbsolute: false,
1912		RelativeID:       "33",
1913		InfoCardTitle:    "Light Bulb",
1914		InfoCardPosition: BRightSTop,
1915		Position:         utils.Coords{X: 0, Y: 0},
1916		AddWidth:         false,
1917		AddHeight:        true,
1918		Size:             Half,
1919		Resolution:       utils.Coords{X: 1920, Y: 1920},
1920		Video:            false,
1921	}, {
1922		ID:               "35",
1923		URL:              "apocalypticneon.jpg",
1924		DateCreated:      time.Date(2021, 5, 22, 15, 47, 00, 0, time.FixedZone("CEST", 2)),
1925		PositionAbsolute: false,
1926		RelativeID:       "33",
1927		InfoCardTitle:    "Apocalyptic Neon",
1928		InfoCardPosition: BRightSTop,
1929		Position:         utils.Coords{X: 0, Y: 0},
1930		AddWidth:         true,
1931		AddHeight:        false,
1932		Size:             Half,
1933		Resolution:       utils.Coords{X: 3840, Y: 2160},
1934		Video:            false,
1935	}, {
1936		ID:               "36",
1937		URL:              "blackhole.mp4",
1938		DateCreated:      time.Date(2021, 9, 26, 19, 35, 00, 0, time.FixedZone("CEST", 2)),
1939		PositionAbsolute: false,
1940		RelativeID:       "34",
1941		InfoCardTitle:    "Black Hole",
1942		InfoCardPosition: BRightSTop,
1943		Position:         utils.Coords{X: 0, Y: 0},
1944		AddWidth:         true,
1945		AddHeight:        false,
1946		Size:             Half,
1947		Resolution:       utils.Coords{X: 1080, Y: 1080},
1948		Video:            true,
1949	},
1950}