From 3c4fbf20d270f7682dd19e0570c3dc1cbd9e6164 Mon Sep 17 00:00:00 2001 From: benthecoder Date: Sun, 12 Jul 2026 02:03:04 -0400 Subject: [PATCH] feat: blur placeholders and real dimensions for r2 images --- components/posts/MarkdownContent.tsx | 9 +- components/posts/PostImage.tsx | 26 +- components/posts/markdownConfig.tsx | 37 +- components/visualizations/Gallery.tsx | 8 +- config/paths.ts | 1 + package.json | 1 + public/data/image-meta.json | 1447 +++++++++++++++++++++++++ scripts/generateImageMeta.ts | 72 ++ utils/content/gallery.ts | 3 + utils/content/imageMeta.ts | 22 + 10 files changed, 1605 insertions(+), 21 deletions(-) create mode 100644 public/data/image-meta.json create mode 100644 scripts/generateImageMeta.ts create mode 100644 utils/content/imageMeta.ts diff --git a/components/posts/MarkdownContent.tsx b/components/posts/MarkdownContent.tsx index d90a7246..6ce55c98 100644 --- a/components/posts/MarkdownContent.tsx +++ b/components/posts/MarkdownContent.tsx @@ -5,7 +5,12 @@ import { isSafeSlug } from "@/config/paths"; import { getPostPreviewData } from "@/utils/content/preview"; import CopyButton from "./CopyButton"; import PostLinkPreview from "./PostLinkPreview"; -import { baseComponents, remarkPlugins, rehypePlugins } from "./markdownConfig"; +import { getImageMeta } from "@/utils/content/imageMeta"; +import { + createBaseComponents, + remarkPlugins, + rehypePlugins, +} from "./markdownConfig"; // Internal post links get a hover preview card. Matches relative and absolute // forms; anything else falls through to a plain anchor. @@ -49,7 +54,7 @@ async function CodeBlock({ } const components: Components = { - ...baseComponents, + ...createBaseComponents(getImageMeta), a({ href, children }) { const slug = href ? postSlugFromHref(href) : null; const preview = slug ? getPostPreviewData(slug) : null; diff --git a/components/posts/PostImage.tsx b/components/posts/PostImage.tsx index 9b8b9c92..54e7e533 100644 --- a/components/posts/PostImage.tsx +++ b/components/posts/PostImage.tsx @@ -2,9 +2,21 @@ import Image from "next/image"; import { useState } from "react"; +import type { ImageMeta } from "@/utils/content/imageMeta"; -export default function PostImage({ src, alt }: { src: string; alt: string }) { +export default function PostImage({ + src, + alt, + meta, +}: { + src: string; + alt: string; + meta?: ImageMeta | null; +}) { const [loaded, setLoaded] = useState(false); + // Without a blur placeholder (drafts, unknown images), fall back to the + // opacity fade so images never pop in abruptly. + const fadeIn = !meta?.blurDataURL; return (
@@ -12,11 +24,17 @@ export default function PostImage({ src, alt }: { src: string; alt: string }) { {alt} setLoaded(true)} - className={`w-full h-auto transition-opacity duration-500 ease-[cubic-bezier(0.23,1,0.32,1)] ${loaded ? "opacity-100" : "opacity-0"}`} + className={`w-full h-auto ${ + fadeIn + ? `transition-opacity duration-500 ease-[cubic-bezier(0.23,1,0.32,1)] ${loaded ? "opacity-100" : "opacity-0"}` + : "" + }`} /> {alt && ( diff --git a/components/posts/markdownConfig.tsx b/components/posts/markdownConfig.tsx index 6528716c..a46e06ed 100644 --- a/components/posts/markdownConfig.tsx +++ b/components/posts/markdownConfig.tsx @@ -5,6 +5,7 @@ import remarkMath from "remark-math"; import rehypeKatex from "rehype-katex"; import remarkGfm from "remark-gfm"; import PostImage from "./PostImage"; +import type { ImageMeta } from "@/utils/content/imageMeta"; import "katex/dist/katex.min.css"; export const remarkPlugins: PluggableList = [remarkMath, remarkGfm]; @@ -13,16 +14,26 @@ export const rehypePlugins: PluggableList = [ [rehypeKatex, { strict: false }], ]; -export const baseComponents: Components = { - p({ node, children }) { - const first = node?.children[0] as - | { tagName?: string; properties?: Record } - | undefined; - if (first?.tagName === "img") { - const src = first.properties?.src as string; - const alt = (first.properties?.alt as string) ?? ""; - return ; - } - return

{children}

; - }, -}; +// `getImageMeta` is only available server-side (it reads the manifest from +// disk), so the server MarkdownContent passes it and the client admin +// preview renders without dimensions or blur. +export function createBaseComponents( + getImageMeta?: (src: string) => ImageMeta | null +): Components { + return { + p({ node, children }) { + const first = node?.children[0] as + | { tagName?: string; properties?: Record } + | undefined; + if (first?.tagName === "img") { + const src = first.properties?.src as string; + const alt = (first.properties?.alt as string) ?? ""; + const meta = getImageMeta?.(src) ?? null; + return ; + } + return

{children}

; + }, + }; +} + +export const baseComponents: Components = createBaseComponents(); diff --git a/components/visualizations/Gallery.tsx b/components/visualizations/Gallery.tsx index 5b1c7d6b..7a8e2c0b 100644 --- a/components/visualizations/Gallery.tsx +++ b/components/visualizations/Gallery.tsx @@ -97,6 +97,8 @@ function Tile({ alt={post?.title ?? image.filename} fill sizes={sizes} + placeholder={image.meta ? "blur" : "empty"} + blurDataURL={image.meta?.blurDataURL} className="object-cover" /> @@ -104,9 +106,11 @@ function Tile({ {post?.title )} diff --git a/config/paths.ts b/config/paths.ts index 6578cb4e..002b5ebb 100644 --- a/config/paths.ts +++ b/config/paths.ts @@ -11,6 +11,7 @@ export const IMAGES_DIR = path.join(PUBLIC_DIR, "images"); export const IMAGES_DRAFTS_DIR = path.join(IMAGES_DIR, "drafts"); export const DATA_DIR = path.join(PUBLIC_DIR, "data"); export const KNOWLEDGE_MAP_JSON = path.join(DATA_DIR, "knowledge-map.json"); +export const IMAGE_META_JSON = path.join(DATA_DIR, "image-meta.json"); export const LIBRARY_MD = path.join( ROOT_DIR, diff --git a/package.json b/package.json index 0253be96..b0deec3a 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "format": "prettier --write .", "format:check": "prettier --check .", "generate:knowledge-map": "tsx scripts/generateKnowledgeMap.ts", + "generate:image-meta": "tsx scripts/generateImageMeta.ts", "prebuild": "pnpm run generate:knowledge-map", "postbuild": "next-sitemap", "generate-embeddings": "tsx scripts/generateEmbeddings.ts", diff --git a/public/data/image-meta.json b/public/data/image-meta.json new file mode 100644 index 00000000..f0a173a6 --- /dev/null +++ b/public/data/image-meta.json @@ -0,0 +1,1447 @@ +{ + "010126-hopper-rooms.jpg": { + "width": 1000, + "height": 734, + "blurDataURL": "data:image/webp;base64,UklGRl4AAABXRUJQVlA4IFIAAADQAQCdASoMAAkAAsBMJaACdADLtgICAAD5BB4MvUxnLSUiZZjEvYdAhjaRVKI6mxOlCYu8wAc4XhyxfZCnxep7mucyGAgVOzTga7BOomF8MSAA" + }, + "011125-beefsoup.jpeg": { + "width": 768, + "height": 1024, + "blurDataURL": "data:image/webp;base64,UklGRmYAAABXRUJQVlA4IFoAAADwAQCdASoJAAwAAsBMJagCdAEQCpHWjQAA/rycOo3ZaaG8Z2VyZDAeIKI6M6XSiLYGTsDdn6Wkn4g3WLOdAekR4t/K/9UFZf+O+R9j2F1k4uTJ1bjtNIqMgAA=" + }, + "011125-redtrees.jpg": { + "width": 1200, + "height": 1599, + "blurDataURL": "data:image/webp;base64,UklGRmAAAABXRUJQVlA4IFQAAADQAQCdASoJAAwAAsBMJaACdADZmpwxAAD+a2CU+K+ucbkiYCCPOtiOp6JnXs4VLa2Qhuaed/zug42LdrCaAS6dkYfC4uGPw/F4B/n6lIZCZNgAAAA=" + }, + "011125-seattlekatsu.jpg": { + "width": 1600, + "height": 2133, + "blurDataURL": "data:image/webp;base64,UklGRnYAAABXRUJQVlA4IGoAAACQAgCdASoJAAwAAsBMJZgCdBHAX5mtTeziiv0YAAD+3hsOlIfyrsyXzD2fKGimtjjtYJAWda0BdoVJwDM3QElSEBnuCuxy5Y5AuK9fYU3sX4CUSGItODMc4JwjIklGZM11ARCPpNfvAAAA" + }, + "020126-bridge.jpg": { + "width": 1600, + "height": 2133, + "blurDataURL": "data:image/webp;base64,UklGRjgAAABXRUJQVlA4ICwAAACQAQCdASoJAAwAAsBMJaQAAuUupQAA/vtn5gwMKXvvBDkNse/vICcOiAAAAA==" + }, + "021125-udon_udub.jpg": { + "width": 1600, + "height": 1200, + "blurDataURL": "data:image/webp;base64,UklGRmwAAABXRUJQVlA4IGAAAABQAgCdASoMAAkAAsBMJbACdLoAEIgTftz+1AAA/l8yIQ+0Se2lJhdVSW24uElRtml8/Z8Mg1a0tCse5ZozNIntbEwOJPTmc6VusgBhkeylABNDHRS1we8NiwzEqlvNwAA=" + }, + "030126-battlehall.jpg": { + "width": 1600, + "height": 2133, + "blurDataURL": "data:image/webp;base64,UklGRmIAAABXRUJQVlA4IFYAAADwAQCdASoJAAwAAsBMJYgCdADcSDPo/AAA9kdBHEgXcZflmKTJkfwcWSpM1dg11jo4cj7kJhLX8nB/XFlUSc7KtGu6QRWgwcOkWNNajIWt/JS8twAAAA==" + }, + "040126-sign.jpg": { + "width": 1600, + "height": 2133, + "blurDataURL": "data:image/webp;base64,UklGRlIAAABXRUJQVlA4IEYAAADwAQCdASoJAAwAAsBMJZQC7AEPC3+4dWAA/vJy9ZKksq7Sjj2ZyGJ6gL/bzNqis6xNkAXWS0413bExoLJAoAaUphDwa+AA" + }, + "050126-x100s.jpg": { + "width": 1600, + "height": 901, + "blurDataURL": "data:image/webp;base64,UklGRloAAABXRUJQVlA4IE4AAADwAQCdASoMAAcAAsBMJaQAAsaY/+MVcAAA4nHS2K5p4EbCjHxe9SGNMcGKk+I1OHNISqEdX9PgoRLE8SY1S1K9cjxBYlCA7ERWqSzgAAA=" + }, + "060126-monarch.jpg": { + "width": 1206, + "height": 2622, + "blurDataURL": "data:image/webp;base64,UklGRjwAAABXRUJQVlA4IDAAAACwAQCdASoGAAwAAsBMJYwAAudLlEAAAP74tbtSp92d+Z8DSVOLzX3J77s1G6XAAAA=" + }, + "061125-jaguarxk8.jpg": { + "width": 1600, + "height": 2133, + "blurDataURL": "data:image/webp;base64,UklGRl4AAABXRUJQVlA4IFIAAADQAQCdASoJAAwAAsBMJQBOgBsvHuuBAAD+WH7Cs9IGxXgZQV2IoDrC2dLHOwVWl2KJ1FT/BVXcVUcXtTphjdRmBJo7F+NPlPEQR91e+A6K3IAA" + }, + "061125-mazdamiata.jpg": { + "width": 1536, + "height": 2048, + "blurDataURL": "data:image/webp;base64,UklGRmgAAABXRUJQVlA4IFwAAAAQAgCdASoJAAwAAsBMJbACdAD0stf6CcgAAP7qXdlEhx6ZH82hOSZQCBlnr1n8qPXvmvlMU4m2sKrwNpwxY93iOScHSoP4D4ZN+evZMR+k8oT4C+gGCigUTikwAA==" + }, + "070126-momsmeal.jpg": { + "width": 1600, + "height": 2133, + "blurDataURL": "data:image/webp;base64,UklGRmAAAABXRUJQVlA4IFQAAADwAQCdASoJAAwAAsBMJZgCdAEfUZrTzAAA/lt3PxJVUQsauRh0SsdV6nRa/HFfdJuiMmgjtPU3NHb5b7igJ7aM2d8XmvSIKuqoxwxTZVTXw2YAAAA=" + }, + "071225-ccc-austin.jpg": { + "width": 1600, + "height": 2133, + "blurDataURL": "data:image/webp;base64,UklGRlgAAABXRUJQVlA4IEwAAADwAQCdASoJAAwAAsBMJZACdADb7RlCjQAA/cGPN7e7e8pbQ7mBa1n42DVF/+KLJ5BX/TdpT9aDGwNuWTSfdIAF3++sygN89XaIAAAA" + }, + "080126-bikeride.jpg": { + "width": 1600, + "height": 2133, + "blurDataURL": "data:image/webp;base64,UklGRlAAAABXRUJQVlA4IEQAAADwAQCdASoJAAwAAsBMJYwCdAD5i4gF4wAA/txlwkQN3RZe0I9t0SKbAP4B0eZJe1FLdw7DzW4TjxSGPshugYclDAAAAA==" + }, + "090126-xteinkx4.jpg": { + "width": 1164, + "height": 646, + "blurDataURL": "data:image/webp;base64,UklGRjgAAABXRUJQVlA4ICwAAABwAQCdASoMAAcAAsBMJaVefAGIAAD+9oPOw/ylbOZLycrU9VcOpkjY7z0AAA==" + }, + "091125-hyatt-regency.jpg": { + "width": 1600, + "height": 2133, + "blurDataURL": "data:image/webp;base64,UklGRkwAAABXRUJQVlA4IEAAAADwAQCdASoJAAwAAsBMJYwCdAD0sOnsGUAA/vWRp4nriz7zcYUV1MtsLjZwI8UtQZb28svTUlOIG/mD4mWihpAA" + }, + "100126-apl.jpg": { + "width": 1600, + "height": 2133, + "blurDataURL": "data:image/webp;base64,UklGRmwAAABXRUJQVlA4IGAAAAAQAgCdASoJAAwAAsBMJagCdAEWPXEOmjtwAP7Bvx4gZOHZKJvo6ujfHlnYC7XuXYUG45kfY3G+5aHi20n7IvU7szbONfDLIq3YNwGQeOrqgDPnjKNE9xQ8Xdg0q8GAAAA=" + }, + "110126-notes.jpg": { + "width": 1600, + "height": 2133, + "blurDataURL": "data:image/webp;base64,UklGRk4AAABXRUJQVlA4IEIAAACwAQCdASoJAAwAAsBMJZwAAl2sJ6qAAP7qMKhWFf2Uw9iguKy5LCIXMU8CKAvXxTr9fTusTs8qLcjXslX6Zv3i4AA=" + }, + "120126-yoshi.jpg": { + "width": 1200, + "height": 654, + "blurDataURL": "data:image/webp;base64,UklGRl4AAABXRUJQVlA4IFIAAAAwAgCdASoMAAYAAsBMJbACdEf/geGoZOnoAAD+th+nbElMpzrPQuU8rmJUwhJeKWBRPy56QxHx4VYjQdRPpp+Zpk3uHuBOasMDTiU6L3iPdIAA" + }, + "121125-courage-to-climb.jpg": { + "width": 487, + "height": 479, + "blurDataURL": "data:image/webp;base64,UklGRl4AAABXRUJQVlA4IFIAAAAQAgCdASoMAAwAAsBMJagCdADhX9q4kWyAAPsjrGPN7OntxskzdtsSt0Dfou6/+P5bKcs2vvi+/tU6AIZeb8Ag6XLJf7JgzZuQSWKEEYXeN3AA" + }, + "130126-americans.jpg": { + "width": 1019, + "height": 701, + "blurDataURL": "data:image/webp;base64,UklGRkYAAABXRUJQVlA4IDoAAADwAQCdASoMAAgAAsBMJZQCsAD0unHFeEAA/vVExKEXZZxWcTIsSnjiJL0V8DPoa4OlY5l2NP1E6gAA" + }, + "140126.jpg": { + "width": 814, + "height": 606, + "blurDataURL": "data:image/webp;base64,UklGRjwAAABXRUJQVlA4IDAAAAAwAQCdASoMAAkAAsBMJaQAA3AA/vY6F4koJYHPsDmVyid9ZtribqqDOVGb0vnmAAA=" + }, + "141225-crandon-beach.jpg": { + "width": 1600, + "height": 2400, + "blurDataURL": "data:image/webp;base64,UklGRlYAAABXRUJQVlA4IEoAAADQAQCdASoIAAwAAsBMJQBWAMW+yINU0gD+9uMO1/X1DRWhInFvVxz7xoVn6WdjWmuDHgZxUy4uvffbpu1suJhR78UrUEytyQAAAA==" + }, + "150126-bladeii.jpg": { + "width": 700, + "height": 1070, + "blurDataURL": "data:image/webp;base64,UklGRmIAAABXRUJQVlA4IFYAAAAQAgCdASoIAAwAAsBMJZQCdAEeggFhlfKgAP7KvPm13r0cAfcKptL/Pd758SfusiPG7Oq/Qo92Mvdi5nxWx8uOZD4TiMp330YDvU+zmBVVCrsBX2AAAA==" + }, + "160126-austin-public-library.jpg": { + "width": 1536, + "height": 2048, + "blurDataURL": "data:image/webp;base64,UklGRmgAAABXRUJQVlA4IFwAAAAwAgCdASoJAAwAAsBMJZgCdAD5jxPBir2AAAD97o+KZnu5FjFLNPcdPsoD7srwV50aa5NtFlN5gN1yhpYYDV5FMFT2xUNnBUBHNeYdBNs2NJo9oO8YSiTJU+sAAA==" + }, + "170126-fridge.jpg": { + "width": 768, + "height": 1024, + "blurDataURL": "data:image/webp;base64,UklGRkoAAABXRUJQVlA4ID4AAACQAQCdASoJAAwAAsBMJaQAApeMOIAA/tXG3W9Afe4yq+qlg3VLhPvmhEuY3Q60a52usN+wF1syKIzbwwAAAA==" + }, + "180126-houndstooth.jpg": { + "width": 768, + "height": 1024, + "blurDataURL": "data:image/webp;base64,UklGRmoAAABXRUJQVlA4IF4AAAAQAgCdASoJAAwAAsBMJYwC7AYrnmw0uSAAAOJ8TCH+Uzjx8i8fs7xr2Q5q82M7Si/gVlHWLEMfrJFSrrqQonO5fLP4420dM68NQtbc3uykTpEBc2bOhzL4Y2Sg0AAA" + }, + "181125-chinese-evergreen.jpg": { + "width": 1600, + "height": 2133, + "blurDataURL": "data:image/webp;base64,UklGRlgAAABXRUJQVlA4IEwAAACQAQCdASoJAAwAAsBMJQBOgBsXBIAA+Uhy3IX7JvTCKBQRpXnz+Fqr9xUcNtEpGcqyvk+VGmUA7qorrsHc7rM/soO1seLBoR7wnAAA" + }, + "190126-local-cafe.jpg": { + "width": 768, + "height": 1024, + "blurDataURL": "data:image/webp;base64,UklGRlAAAABXRUJQVlA4IEQAAADQAQCdASoJAAwAAsBMJbACdADb6iUcIADLMzP0qZN5k9hqUxNdu7bNqZmeNhhKuQ352utSBMdCp1yNOODc7JOcn3AAAA==" + }, + "201125-ct-release.jpg": { + "width": 732, + "height": 580, + "blurDataURL": "data:image/webp;base64,UklGRjwAAABXRUJQVlA4IDAAAACQAQCdASoMAAkAAsBMJZwAAuZE4AAA/u8ugYtmGyymsWjrLd/1cGvzp56l8MulAAA=" + }, + "2023.jpeg": { + "width": 960, + "height": 672, + "blurDataURL": "data:image/webp;base64,UklGRlIAAABXRUJQVlA4IEYAAADQAQCdASoMAAgAAsBMJYgCdAEVvAdFoAD+7u38pls3L5z3cfN96vdF7q0TKamsK44g3KMSww0/g7e62aThw1DTchiiQAAA" + }, + "210126-acl.jpg": { + "width": 768, + "height": 1024, + "blurDataURL": "data:image/webp;base64,UklGRkYAAABXRUJQVlA4IDoAAADwAQCdASoJAAwAAsBMJZwC7AEO9AChBYAA/vrpCnWUh0YSjTEp19kkaDJqswzCtKRzZHhy/7LvYAAA" + }, + "211225-zilker-botanical.jpg": { + "width": 1600, + "height": 2133, + "blurDataURL": "data:image/webp;base64,UklGRlwAAABXRUJQVlA4IFAAAADQAQCdASoJAAwAAsBMJbACdADWp2JrgAD+0gasAwEWXmTD9IHM47f9pod7hFFvFmu+qpUejxuv/k9D68UE5/QtqRH52pbye8jne6HE7DgAAA==" + }, + "220126-gas-station.jpg": { + "width": 1600, + "height": 2133, + "blurDataURL": "data:image/webp;base64,UklGRlwAAABXRUJQVlA4IFAAAADwAQCdASoJAAwAAsBMJYwCdAELXpEhYgAA/vSgJif3rr5pcTBGFwYbUsWISgM8jzCUU8rhk8PWZB9Pnt1cQSj9a/v3m/ZvrptAb9w0WwAAAA==" + }, + "230126-thumbnail-isometric-nyc.jpg": { + "width": 1600, + "height": 889, + "blurDataURL": "data:image/webp;base64,UklGRjoAAABXRUJQVlA4IC4AAADQAQCdASoMAAcAAsBMJYwCdAEO9uPOAAD+y2vzUGMCxDC4kUKBIMEcLJ/kSZ4A" + }, + "231225-alamo.jpg": { + "width": 1600, + "height": 1067, + "blurDataURL": "data:image/webp;base64,UklGRlgAAABXRUJQVlA4IEwAAABQAgCdASoMAAgAAsBMJbACdAYtpwkZzmfauGAA/lvdP+8IaSBZ+YaVmpU2OVAgj9TCK5beK7E/qoBCIA1H4CA34mrJKR+xDyAsLDwA" + }, + "240126-bambi.jpg": { + "width": 1280, + "height": 959, + "blurDataURL": "data:image/webp;base64,UklGRloAAABXRUJQVlA4IE4AAAAQAgCdASoMAAkAAsBMJbACdAD0kSDqAYYAAP5s694N4R+C7NCwN7YOJyd4NGcFIyzJBgGqmjk3pQCqEH/bJ6HX/YuGfddvHJvmVyKnAAA=" + }, + "250126-austin-snow.jpg": { + "width": 1600, + "height": 2400, + "blurDataURL": "data:image/webp;base64,UklGRkwAAABXRUJQVlA4IEAAAADwAQCdASoIAAwAAsBMJZQCdAD0RxeP3wAA/vaZR4A80o6bxwYvZ4gF/tVrErzk5Hww0HP38kEBnKX0Bb7d2VQA" + }, + "251225-fireplace.jpg": { + "width": 1600, + "height": 1067, + "blurDataURL": "data:image/webp;base64,UklGRlIAAABXRUJQVlA4IEYAAADwAQCdASoMAAgAAsBMJQBOgCHgPr2TPoAA/vharRpTavB4YcCV37O4JHJn7qq75dHo/Q1PoDZ+eoISL7gXxTJY//EqAAAA" + }, + "261024.jpeg": { + "width": 749, + "height": 1332, + "blurDataURL": "data:image/webp;base64,UklGRlwAAABXRUJQVlA4IFAAAADwAQCdASoHAAwAAsBMJQBOgCHhAPVM6AAA/of3Z/jyGcT4jbTlDZe1/woHUu0tm51xrf0KbEgNn9sMUmP+IN8MSn6EPQ64GiMimyMf5CAAAA==" + }, + "261125-livra-austin.jpg": { + "width": 1600, + "height": 1200, + "blurDataURL": "data:image/webp;base64,UklGRlwAAABXRUJQVlA4IFAAAADwAQCdASoMAAkAAsBMJZACdADcXHLZ6XwA9l+NkO2TdbIPL3Amhod8GP6p/fkJb1zcbaa249r85wtMkvPEZ2srBj+VdYlDTbCTwd8iscYgAA==" + }, + "261125-mayfield-lake.jpg": { + "width": 1600, + "height": 1200, + "blurDataURL": "data:image/webp;base64,UklGRk4AAABXRUJQVlA4IEIAAADwAQCdASoMAAkAAsBMJYwCdADdU89X3AAA/vUjUWe/OSvL2Q3N6F0uHLLOC3NX59rd4vz7Ff9lJzQ8r4mCLvZFlAA=" + }, + "261125-mozartcoffee.jpg": { + "width": 1600, + "height": 1200, + "blurDataURL": "data:image/webp;base64,UklGRloAAABXRUJQVlA4IE4AAADwAQCdASoMAAkAAsBMJYgCdAEegi4DC0AA/uDXtQf0PYU1rDx8bcbfVQ65Je3uafWG0HmslTK7RI15JsusxFlEqIi1EWurObtVRyGLYAA=" + }, + "261225-ice.jpg": { + "width": 1600, + "height": 2133, + "blurDataURL": "data:image/webp;base64,UklGRmgAAABXRUJQVlA4IFwAAAAQAgCdASoJAAwAAsBMJQBOj+ACc5wjUm/AAP7rwMdzIHsKeV6O18xqhWQNWVod1eujyH1gmeJhP+by4Xhm7j3egsxZPJ80ePo+4DiSzOG4dV7QTYyVyKP+fFkAAA==" + }, + "261225-museum-native-arts.jpg": { + "width": 1600, + "height": 1067, + "blurDataURL": "data:image/webp;base64,UklGRlQAAABXRUJQVlA4IEgAAAAQAgCdASoMAAgAAsBMJQBOgCLXFbMHprYAAP7U7fhwkwJlUqvJFkAbtX566Ez97Jn6AGhA6QIoGod9/vI2UIInhFm2ZgcJ4AA=" + }, + "261225-steerskull.jpg": { + "width": 1600, + "height": 2133, + "blurDataURL": "data:image/webp;base64,UklGRmoAAABXRUJQVlA4IF4AAADwAQCdASoJAAwAAsBMJYwCdAYqDZhhgAAA+GKMrUMp9kdegrefJ8Huss97oanpZ+wvCQV4qCiTOTLiF5QSIPq5Kos/2o1AQ49AXed+yZaEY5eO1Eus1SD4uXKbcMAA" + }, + "270126-the-most-delicious-bowl-of-clams-in-the-world.jpg": { + "width": 1600, + "height": 2133, + "blurDataURL": "data:image/webp;base64,UklGRmQAAABXRUJQVlA4IFgAAADQAQCdASoJAAwAAsBMJQBOgCKKPtueoAD+X2/ksqJ5kMG7U/uYkx+/iRTxXr8yMme6YHaAbUvJ6AHyEqM7jsbHMlQsddqguSo1egpdJ+K8cjYzq/PNuAAA" + }, + "271125-thanksgiving-hotpot.jpg": { + "width": 1600, + "height": 2133, + "blurDataURL": "data:image/webp;base64,UklGRmYAAABXRUJQVlA4IFoAAAAQAgCdASoJAAwAAsBMJZgCdAEegks9IbPAAPvR3o/wKBz9sl+Ms6SDMCf03Ehnbm4wNiBJ8/IKHaVOQar9smlClR2Ruxjc+rZ6X1LskmGsHFu0ajVbnZgAAAA=" + }, + "271225-seolleongtang.jpg": { + "width": 1600, + "height": 2133, + "blurDataURL": "data:image/webp;base64,UklGRmoAAABXRUJQVlA4IF4AAABQAgCdASoJAAwAAsBMJZgCdAYr7baNMl3Q1AAA/uRrYMOaMp1gaqSVAZI3qwUtmVWQEaPMfbE4opfT0TTJf38Z2q8MUZTbs/xhkCq1giB0O7vDu7p3EeOyxp54AAAA" + }, + "281125-alamo.jpg": { + "width": 1600, + "height": 2133, + "blurDataURL": "data:image/webp;base64,UklGRlQAAABXRUJQVlA4IEgAAADwAQCdASoJAAwAAsBMJYwC7AEOPQhAmogA/vKBOJ+fLq0MBZGNkHUXfCJfk15nS5FH2ECwrdYwMqx+sQwFyOCp3XwizYQAAAA=" + }, + "281125-steamed-fish.jpg": { + "width": 1600, + "height": 2133, + "blurDataURL": "data:image/webp;base64,UklGRmIAAABXRUJQVlA4IFYAAAAwAgCdASoJAAwAAsBMJZgCdAEPD2hm4K/gAAD+1ir0ZXowIw1AUqN+8fnnAO067d6S5kbxNAOurg+4/hRpg7VKEW4uwj+R5HEtrdeqhI3fK2l9ggAAAA==" + }, + "281225-dallasmuseum.jpg": { + "width": 1600, + "height": 2134, + "blurDataURL": "data:image/webp;base64,UklGRk4AAABXRUJQVlA4IEIAAADQAQCdASoJAAwAAsBMJQBOgCFr2Z53AAD+3xapIf88oBHe4cjQVHyrakpKmxfSZT54RKA9yYYsxlfRtF0rY1gAAAA=" + }, + "281225-first-baptist-dallas.jpg": { + "width": 1600, + "height": 1200, + "blurDataURL": "data:image/webp;base64,UklGRlgAAABXRUJQVlA4IEwAAABwAgCdASoMAAkAAsBMJYwCdIExgjywwqLF9/MAAP7OAAo+r6KvXnJbmDtffN9NKhkIwiovgoHtcm+KhulN5puWRgK3qNwKNgavMAAA" + }, + "281225-lamp.jpg": { + "width": 1600, + "height": 2133, + "blurDataURL": "data:image/webp;base64,UklGRmoAAABXRUJQVlA4IF4AAABQAgCdASoJAAwAAsBMJbACdAYt9vue+boQ9wAA/vG6eNCtZMKLO3gSGPL883xNnYreli9BrPz4jyMdaztV4Pr9Ru0DvNt7RoxA+T3/OY/9Lrqll+hRwOP/J4Y9REAA" + }, + "281225-mansion.jpg": { + "width": 1600, + "height": 2133, + "blurDataURL": "data:image/webp;base64,UklGRloAAABXRUJQVlA4IE4AAADQAQCdASoJAAwAAsBMJQBOgB6IJMZ6gAD8jgP9vOo1FtHEQ+zbATuFbrdzUCefgJgSfQGjd9kh5dd+kv19pq8JFmERgulhhD8lqCcgAAA=" + }, + "281225-thanksgiving-square.jpg": { + "width": 1600, + "height": 2133, + "blurDataURL": "data:image/webp;base64,UklGRloAAABXRUJQVlA4IE4AAADwAQCdASoJAAwAAsBMJaACdADcYJjmvAAA/XdqZK9S6SnQLCUg908Z+L58uvXcg53RLhe9jvo2ZoGcfoiAX1T7/ZOXuqmV3J3hH6MgAAA=" + }, + "290126-marina-motel.jpg": { + "width": 1600, + "height": 1200, + "blurDataURL": "data:image/webp;base64,UklGRloAAABXRUJQVlA4IE4AAACwAQCdASoMAAkAAsBMJZQC7ADZiZPYAP7YQWneyMtEXwsSTx3xkpZIfAl800n1rK73OrSqW/vnKr4uaTIbz2I11lWzIg0RXpnp89UgAAA=" + }, + "291125-loren-hotel.jpg": { + "width": 1600, + "height": 2133, + "blurDataURL": "data:image/webp;base64,UklGRlQAAABXRUJQVlA4IEgAAADwAQCdASoJAAwAAsBMJYwCdADbHOPGQAAA/veGBdn1iav797PgI2Wu29ZkjLfaw3EoTN+tA7Kkf8b9tgJwrWaTYB6HSMcAAAA=" + }, + "291125-psalms-deer.jpg": { + "width": 1404, + "height": 1872, + "blurDataURL": "data:image/webp;base64,UklGRlQAAABXRUJQVlA4IEgAAADQAQCdASoJAAwAAsBMJaQAAuc/t1LG0AD+hgRLSiVuWx8QoUwgKDSzbqHGYYGGylas2xNU1y/P4Y7opwonvfD9M/xYsMAAAAA=" + }, + "291225-terryblacks.jpg": { + "width": 1600, + "height": 2133, + "blurDataURL": "data:image/webp;base64,UklGRmoAAABXRUJQVlA4IF4AAAAQAgCdASoJAAwAAsBMJbACdAYuvyQ/Mu4AAP7CTaHstj7+6bp0Ic4/Bgk4fbmF1cdI8A79Y6sOx2hV7LkZbOUNYnCh2ExsTKMv1He1pqvXNr+uVofxE+DC85jHQAAA" + }, + "301225-fabled.jpg": { + "width": 1600, + "height": 2133, + "blurDataURL": "data:image/webp;base64,UklGRmAAAABXRUJQVlA4IFQAAADwAQCdASoJAAwAAsBMJQBOgCPQMO3K7gAA/ubcrUAWei0jZCZNPbE6mgi3G4F4bDNbZS9VGUcWkQWpOaONslfE3JRhy7eo7mCMW6E8Wab9Mk4cgAA=" + }, + "310126-moody-vintage.jpg": { + "width": 1600, + "height": 1200, + "blurDataURL": "data:image/webp;base64,UklGRlQAAABXRUJQVlA4IEgAAADQAQCdASoMAAkAAsBMJZgCdAC2q6wTgAD+aceQ48GeDYXqwJNJxQbrfkUzHw1PV+zYFjy74m/o7fW/XSYAZS1aRFjMHKwAAAA=" + }, + "311225-2025.jpg": { + "width": 1600, + "height": 1200, + "blurDataURL": "data:image/webp;base64,UklGRjQAAABXRUJQVlA4ICgAAACwAQCdASoMAAkAAsBMJaQAAude1IwAAP766n1c/RZb530rkxbhH4AA" + }, + "311225-austin.jpg": { + "width": 1600, + "height": 1200, + "blurDataURL": "data:image/webp;base64,UklGRlQAAABXRUJQVlA4IEgAAAAQAgCdASoMAAkAAsBMJYwCdEf/gcJF1KNgAP3fwSF3vfGr74v2Ruk/pLRx4LCqtO66WHsyHCpcFmYpmIPIPj1+bFnNmerwAAA=" + }, + "311225-boston.jpg": { + "width": 1600, + "height": 1200, + "blurDataURL": "data:image/webp;base64,UklGRkQAAABXRUJQVlA4IDgAAAAwAgCdASoMAAkAAsBMJZQCdH8AGX4c/TXEgADeZV3eZWm1sAQHW15uJIvApbRZ2yRCPkqep4AAAA==" + }, + "311225-ctmatch.jpg": { + "width": 1600, + "height": 1625, + "blurDataURL": "data:image/webp;base64,UklGRjgAAABXRUJQVlA4ICwAAABwAQCdASoMAAwAAsBMJZ1efAGIAAD+9mTJg8GS1w1YPmTCw1qALW4Z8IAAAA==" + }, + "311225-harrisonst.jpg": { + "width": 1200, + "height": 1599, + "blurDataURL": "data:image/webp;base64,UklGRmAAAABXRUJQVlA4IFQAAADQAQCdASoJAAwAAsBMJaACdADZmpwxAAD+a2CU+K+ucbkeEBi554d0n0TOvZwqW1shGef6xD+1P9jh/YngEtydENf/etMVr8XgdaS2qljdR00AAAA=" + }, + "311225-keybiscane.jpg": { + "width": 1600, + "height": 2400, + "blurDataURL": "data:image/webp;base64,UklGRlYAAABXRUJQVlA4IEoAAADQAQCdASoIAAwAAsBMJQBWAMW+yINU0gD+9uMO1/X1DRWhInFvVxz7xoVn6WdjWmuDHgZxUy4uvffbpu1suJhR78UrUEytyQAAAA==" + }, + "311225-mazda.jpg": { + "width": 1600, + "height": 2133, + "blurDataURL": "data:image/webp;base64,UklGRmYAAABXRUJQVlA4IFoAAAAQAgCdASoJAAwAAsBMJYgCdAEO55wYFXnAAP7qXc+csuFmncPLwnkgydO6lzpEgaDJgIYYxd0Ras1yUXFlsouc5WGTOuaaoFloRqxfvWaWYmSgtzoPwOQAAAA=" + }, + "311225-santafe-museum.jpg": { + "width": 1600, + "height": 1067, + "blurDataURL": "data:image/webp;base64,UklGRlQAAABXRUJQVlA4IEgAAAAQAgCdASoMAAgAAsBMJQBOgCLXFbMHprYAAP7U7fhwkwJlUqvJFkAbtX566Ez97Jn6AGhA6QIoGod9/vI2UIInhFm2ZgcJ4AA=" + }, + "311225-sf2025.jpg": { + "width": 1600, + "height": 951, + "blurDataURL": "data:image/webp;base64,UklGRjwAAABXRUJQVlA4IDAAAAAwAgCdASoMAAcAAsBMJYgCdAEfcfpOqkc0AAD+8mOtdIy4y5cz52dy5ZZgjt88AAA=" + }, + "311225-smithsonian.jpg": { + "width": 1600, + "height": 1200, + "blurDataURL": "data:image/webp;base64,UklGRlQAAABXRUJQVlA4IEgAAADQAQCdASoMAAkAAsBMJZQAAmhfaVqi4AD+JYVXXLC+u8yM5fGgTyg9bt073C/GOCrT1r2gpIwKC4+OD0WXCgI5GpPc4Aa3AAA=" + }, + "311225-taiwan.jpg": { + "width": 1600, + "height": 902, + "blurDataURL": "data:image/webp;base64,UklGRlwAAABXRUJQVlA4IFAAAABQAgCdASoMAAcAAsBMJZACdAYrnvuroLGYUIAA/icpVC5Lzzkxqf5Mev7pvbP9rH6mlWN9idezt0oV6GtXh/ay3jhBAY9jW+HdZYwVWoAAAA==" + }, + "aapm.jpeg": { + "width": 1112, + "height": 416, + "blurDataURL": "data:image/webp;base64,UklGRkwAAABXRUJQVlA4IEAAAADwAQCdASoMAAQAAsBMJaACdEf/gY56Y3AA/pvm392fFUJu0A+lkB6t4+Av4srHebDhuzWiHIpQsy0wgxXPogAA" + }, + "advice.jpeg": { + "width": 2000, + "height": 2687, + "blurDataURL": "data:image/webp;base64,UklGRlAAAABXRUJQVlA4IEQAAAAQAgCdASoJAAwAAsBMJZQCdAERHfe3ewAAAP71JD8LiCqLOms0JFcygY+Rfr7EofBe/zhE/bDn9NKwPRkaq6G2lQAAAA==" + }, + "ailandscape.jpeg": { + "width": 1920, + "height": 3914, + "blurDataURL": "data:image/webp;base64,UklGRlIAAABXRUJQVlA4IEYAAAAQAgCdASoGAAwAAsBMJaACdAEfbdT7LA0AAM49OI6MRn+YGDRXJp9PExhI0dL7J60v0lgxdvZbDhj2WlMwxlDHlA1yHAAA" + }, + "airflow-summit.jpeg": { + "width": 1024, + "height": 768, + "blurDataURL": "data:image/webp;base64,UklGRmAAAABXRUJQVlA4IFQAAADwAQCdASoMAAkAAsBMJZACdAEVjUlURoAA/qp7k7rr+LqEIK3nfvK6cPMnG9KUJd3q1cmTQ4KnE3iaIvDYDTuKcee/5Ob5C/YwF6EyAKWEs3YAAAA=" + }, + "alexandria.jpeg": { + "width": 590, + "height": 600, + "blurDataURL": "data:image/webp;base64,UklGRlAAAABXRUJQVlA4IEQAAADwAQCdASoMAAwAAsBMJaQAAxa4bfdzYAAA+VjOpOdK/kYnfT5SGfzpcgjrIQXsbk9InLbJYFJ+k8S8gy/pH2vAli4AAA==" + }, + "ambassadors.jpg": { + "width": 2000, + "height": 1971, + "blurDataURL": "data:image/webp;base64,UklGRmAAAABXRUJQVlA4IFQAAADwAQCdASoMAAwAAsBMJQBOgMWbyNMrfAAA/vGn0fJvrAeI7F3VXyxNuKkJSLLpZAs+hPyraXcmXpZe9nnlyl8m+SAr33AO2Hj2iQhsMHjdLI9gAAA=" + }, + "annunciation.jpg": { + "width": 1920, + "height": 1617, + "blurDataURL": "data:image/webp;base64,UklGRmgAAABXRUJQVlA4IFwAAADwAQCdASoMAAoAAsBMJaACdAYtfbNvNIAA/ktMLtdqQPiQQAaCN/nBoNcpy1ARFm7VNv9zsdq23Oe40feTRUMBfo9+aATk74KHx31wV4vGnq7fAMCGxuhD5oAAAA==" + }, + "apple_carbon.png": { + "width": 1024, + "height": 794, + "blurDataURL": "data:image/webp;base64,UklGRkYAAABXRUJQVlA4IDoAAADwAQCdASoMAAkAAsBMJYgCdAEN2qO5rgAA/vgYqHMp4w/1nmWYNZTBu55WRCVcb9mX0E3fT1nUAAAA" + }, + "archimedes.jpeg": { + "width": 1364, + "height": 1818, + "blurDataURL": "data:image/webp;base64,UklGRmAAAABXRUJQVlA4IFQAAAAQAgCdASoJAAwAAsBMJQBOj+BSAAfsKzmAAP73sj40TWd6lg2QFharXfQauw0VebXfpHaO+L/gder+MmjzD1dmb/K4lkMjqqVhYUITV0n4YLC+AAA=" + }, + "art.jpg": { + "width": 2000, + "height": 1587, + "blurDataURL": "data:image/webp;base64,UklGRl4AAABXRUJQVlA4IFIAAADwAQCdASoMAAoAAsBMJagCdACnu+IzocAA/Y4vQf66qkchDzEuRmVIeLyMUqW1Dhw6cm/xd9kDMQmL5GFwabXXZCNc/EXWBbnb1tulhhSSQAAA" + }, + "astronomer.jpg": { + "width": 2000, + "height": 2272, + "blurDataURL": "data:image/webp;base64,UklGRkQAAABXRUJQVlA4IDgAAACwAQCdASoLAAwAAsBMJYwCdADy1CAAAP725h8HornchuDdfzL8eVEOpb+DuE7b/pZMc4SDyZMAAA==" + }, + "athens.jpeg": { + "width": 1280, + "height": 993, + "blurDataURL": "data:image/webp;base64,UklGRlgAAABXRUJQVlA4IEwAAADQAQCdASoMAAkAAsBMJQBOgBwvqdVbYAD5dwnOLqchZwZvz9jTJSmQFJoBdevHNjl0gxGnb3/lE7qmodva9/tXXC2wQ/39k884sAAA" + }, + "aurora_nagoya.jpeg": { + "width": 2000, + "height": 1565, + "blurDataURL": "data:image/webp;base64,UklGRkIAAABXRUJQVlA4IDYAAACwAQCdASoMAAkAAsBMJYgCdADszVMAAP7ELloaZTGylz33UlEcjB2modcXNAANJaItH9YAAAA=" + }, + "austin.png": { + "width": 768, + "height": 1024, + "blurDataURL": "data:image/webp;base64,UklGRloAAABXRUJQVlA4IE4AAADwAQCdASoJAAwAAsBMJZQCdADdoN6MawAA/sKyN7TqwETgYQptLiJilGXSQ5FSHyxuR/Hy3Cv+S/1WWFgmuXvm46xFbeUMXKiJVlgrAAA=" + }, + "bacchus.jpg": { + "width": 2000, + "height": 1810, + "blurDataURL": "data:image/webp;base64,UklGRlYAAABXRUJQVlA4IEoAAADwAQCdASoMAAsAAsBMJQBOgCIEn9ldfMAA+8xNpEQPZl+/3/lwzbMxJGgFQMDLoa8KATt2LyMD9RkwoRbtU2GJZJSIbLKCc4AAAA==" + }, + "badgermole.jpeg": { + "width": 1125, + "height": 2436, + "blurDataURL": "data:image/webp;base64,UklGRlAAAABXRUJQVlA4IEQAAACwAQCdASoGAAwAAsBMJQAAXOFO6JsAAPqL+/WeIuE73hfBp/gEAuuZPzkK0eDagJjgMgT1jgUSGn38JssufVGnXgAAAA==" + }, + "bluesound.jpeg": { + "width": 2000, + "height": 1703, + "blurDataURL": "data:image/webp;base64,UklGRl4AAABXRUJQVlA4IFIAAADwAQCdASoMAAoAAsBMJQBOkBx2AAb6cCAA/rgAemeG5Asl4hToc5eabXeSzkrzFrh24KBSGwmWMRpVJ690Kx2VwKkIjPVXnZmFdN99KSLMt4AA" + }, + "books.jpeg": { + "width": 600, + "height": 473, + "blurDataURL": "data:image/webp;base64,UklGRk4AAABXRUJQVlA4IEIAAADwAQCdASoMAAkAAsBMJbACdAERHCqgA0AA9yyXyYAg/XNSNytfcU7txHcimyu25WG5M2vr7lgndgwt5HPnxFUTUAA=" + }, + "bookskull.jpeg": { + "width": 2000, + "height": 1628, + "blurDataURL": "data:image/webp;base64,UklGRlYAAABXRUJQVlA4IEoAAAAwAgCdASoMAAoAAsBMJYwCdAEUpUyXvbdgAAD+9ffIDeVxYL2Kat4LENGnUS0PzFufVGHpGQVAa8cMsp9XjH/mhmJNUZt4MeAAAA==" + }, + "bookstoread.jpeg": { + "width": 1000, + "height": 3313, + "blurDataURL": "data:image/webp;base64,UklGRjoAAABXRUJQVlA4IC4AAADQAQCdASoEAAwAAsBMJYwCdAEf+7wXQAD+8HHonSjD6EFoMblTO6YxGGflkAAA" + }, + "boston1.jpeg": { + "width": 1536, + "height": 2048, + "blurDataURL": "data:image/webp;base64,UklGRkwAAABXRUJQVlA4IEAAAADQAQCdASoJAAwAAsBMJQBdgCHerPRYQAD++d17G9zOhD63R1P0kvacB9BuAPqCPk6ZPFRcpLlDvB4ILa6JAAAA" + }, + "boypipe.jpg": { + "width": 1286, + "height": 1600, + "blurDataURL": "data:image/webp;base64,UklGRlIAAABXRUJQVlA4IEYAAAAQAgCdASoKAAwAAsBMJaACdAELM8R4dxlAAP7sTZnswZH/IWherqoAq1onggpH2htYcWIj8Lu8REN8mY0WfDjZA6Gs9gAA" + }, + "boys.jpeg": { + "width": 2000, + "height": 1367, + "blurDataURL": "data:image/webp;base64,UklGRkoAAABXRUJQVlA4ID4AAADwAQCdASoMAAgAAsBMJZgCdAEUoMSH1IAA/VPnRjBDulgtbA3RLvtfq+LPKXKmOxJVu+7tK5fW7lDotowAAA==" + }, + "bridge.jpg": { + "width": 728, + "height": 410, + "blurDataURL": "data:image/webp;base64,UklGRj4AAABXRUJQVlA4IDIAAACwAQCdASoMAAcAAsBMJQBOgBu0IpQAAP0ru7iOBcRBJ85CBaBn2KmfjaRUeRSJb0EAAA==" + }, + "broadway_boogie.jpg": { + "width": 2000, + "height": 2003, + "blurDataURL": "data:image/webp;base64,UklGRmIAAABXRUJQVlA4IFYAAAAQAgCdASoMAAwAAsBMJaACdAEDndMe4HNAAP7tr7UcYP8P1Gn/gpNZYYeRvBMphl6XTtaQetne9v1XTO9dSzdteZVU1yMNAiYPm3lALEp43W0mfIAAAA==" + }, + "calmsea.jpeg": { + "width": 1280, + "height": 1044, + "blurDataURL": "data:image/webp;base64,UklGRkYAAABXRUJQVlA4IDoAAAAQAgCdASoMAAoAAsBMJZgCdAEfk+M0WxAAAP6yJYDkKCUEzMEgrH4rwe9f/nTpx52GE+Tyx3zwAAAA" + }, + "capturemoment.jpeg": { + "width": 2000, + "height": 1320, + "blurDataURL": "data:image/webp;base64,UklGRkgAAABXRUJQVlA4IDwAAADQAQCdASoMAAgAAsBMJagCdAD5acl3gAD+1vbrOcRZNdieYWsZjdW/miT9HwMJgrghPxRUpkXqicgAAAA=" + }, + "childhood.jpeg": { + "width": 1920, + "height": 1297, + "blurDataURL": "data:image/webp;base64,UklGRkwAAABXRUJQVlA4IEAAAAAQAgCdASoMAAgAAsBMJYgCdADdSoUtdbIAAP7zMNZQbLjPaA4vdT7XuXxIjti1OOfnWcVu3vTGZuGuVeyX95AA" + }, + "childrensgame.jpg": { + "width": 1487, + "height": 1080, + "blurDataURL": "data:image/webp;base64,UklGRlgAAABXRUJQVlA4IEwAAACwAQCdASoMAAkAAsBMJagCdADWwIgAAP7Aa7Jr0QwPXpSbAeNZAYB7Oodm5oW+ylT+TGiHWf7RcyIsJy8zzbyN7KseHhNS+5AoAAAA" + }, + "chinatown.jpeg": { + "width": 768, + "height": 1024, + "blurDataURL": "data:image/webp;base64,UklGRlgAAABXRUJQVlA4IEwAAAAQAgCdASoJAAwAAsBMJbACdADdrsEKQacAAPuSb5VRIRvnIv+z39JXTQP9FJEs7vb/pL6szgXKgo6YflXEwR/3JSe+fjuqyvopKAAA" + }, + "chinatownhacks_posters.jpeg": { + "width": 2000, + "height": 1272, + "blurDataURL": "data:image/webp;base64,UklGRmAAAABXRUJQVlA4IFQAAAAwAgCdASoMAAgAAsBMJQBOgMVz3FAJ5Ys2AAD+4NmgUidkGahB4Vmi+sQoe3bs2qqeDJ7IUFfvfMVpbvLv67ZU26ethcqcXwlw1JhEEtt6dnt6AAA=" + }, + "christboat.jpeg": { + "width": 2000, + "height": 2485, + "blurDataURL": "data:image/webp;base64,UklGRlIAAABXRUJQVlA4IEYAAAAQAgCdASoKAAwAAsBMJYwCdAEQ/PMipMAAAP7dvopvluqtlcjGc+cREHcjUJG80c1EEDsV8nhbB5SlDaXvvzAVeiEmLVAA" + }, + "clock.jpeg": { + "width": 1008, + "height": 1080, + "blurDataURL": "data:image/webp;base64,UklGRmIAAABXRUJQVlA4IFYAAAAwAgCdASoLAAwAAsBMJZACdAELYSVrHu3ggAD+5kr3saChPmAZvka2XPuDiXH4Y7NfMt97/Iniv2ySd2Ff5NitSm7AC+Cdljl3ZTM62LHBy8bpcQAAAA==" + }, + "cny_parade_25.jpeg": { + "width": 3024, + "height": 4032, + "blurDataURL": "data:image/webp;base64,UklGRmgAAABXRUJQVlA4IFwAAAAQAgCdASoJAAwAAsBMJYgCdEf/gcFaU3UwAP75VGiuv+LHOWElW2pVhSLUDaSkO5mRzndTyAx/kD3RFKTf3lJjhWhZUXEg/C6O0EAG3/0/YG2CpnfZU+NLcAAAAA==" + }, + "commonplace.jpg": { + "width": 1024, + "height": 896, + "blurDataURL": "data:image/webp;base64,UklGRk4AAABXRUJQVlA4IEIAAADQAQCdASoMAAsAAsBMJZQCdAEPAQELIAD+CyN2B1vawFhyEPm2m/D1AiyhQweV2kT+dv4xs7jlb1fcR7dwrGvLAAA=" + }, + "composition.jpg": { + "width": 1000, + "height": 657, + "blurDataURL": "data:image/webp;base64,UklGRmIAAABXRUJQVlA4IFYAAADwAQCdASoMAAgAAsBMJbACdAYq1bVhONAA8RajIwNNuWqj7vEBsCldC2JfGqCUmrS2sLShbU3MBCsyUHf3+MmM7fKmgNuBZPMs+7bCMLLVpkF8o6s4AA==" + }, + "conversation.jpg": { + "width": 710, + "height": 575, + "blurDataURL": "data:image/webp;base64,UklGRmIAAABXRUJQVlA4IFYAAADwAQCdASoMAAoAAsBMJbACdADciNqDrgAA/n6Y1xp6I7Fz0pfoQHX07Q/TifgB/V4VaPIB2rlRFZ7BNfg0d0Zm33sqMSMffYv/8G++ZO2gAYAnArXaAA==" + }, + "conversationpark.jpg": { + "width": 1200, + "height": 1376, + "blurDataURL": "data:image/webp;base64,UklGRlYAAABXRUJQVlA4IEoAAAAwAgCdASoKAAwAAsBMJZgCdAEWYKxD/E7AAAD+7qzQsEIHgtBIEKDRZn5gRV6xcGGC0sQASiKjNKBLBXiNuIp25ZGObhIwiK/AAA==" + }, + "convocation.jpeg": { + "width": 2000, + "height": 1719, + "blurDataURL": "data:image/webp;base64,UklGRkQAAABXRUJQVlA4IDgAAADwAQCdASoMAAoAAsBMJZwAAuyho1xWC8AA/vKIKR38F65gjm/IfVKtuoG8RIz1ajn4Nkhk94uAAA==" + }, + "convoy.jpg": { + "width": 472, + "height": 348, + "blurDataURL": "data:image/webp;base64,UklGRlgAAABXRUJQVlA4IEwAAADQAQCdASoMAAkAAsBMJYgCdAD5ixgVgAD+0PtSQaO0TPHFjja72flrREjzxo7IF7NbMry60O/e+IRgs1rDBEdJbEYMmWPS5DbxSIAA" + }, + "courage.jpeg": { + "width": 1522, + "height": 2000, + "blurDataURL": "data:image/webp;base64,UklGRlQAAABXRUJQVlA4IEgAAAAQAgCdASoJAAwAAsBMJagCdAD0kAZtQcgoAP74k/aheK1VhwDq02CxOXVUZfqz2lleqV2qI9802UcIza0j3OcehPCnuWrAAAA=" + }, + "creation.jpeg": { + "width": 642, + "height": 498, + "blurDataURL": "data:image/webp;base64,UklGRlAAAABXRUJQVlA4IEQAAACwAQCdASoMAAkAAsBMJQBOgBuklbfIAP71uVM5/YoW7ogcwqsH8AIV4R8qdELfj3Rqr/TUVtjfVmlrD5MbHcaOUiAAAA==" + }, + "critic.jpeg": { + "width": 1875, + "height": 2166, + "blurDataURL": "data:image/webp;base64,UklGRmYAAABXRUJQVlA4IFoAAADwAQCdASoKAAwAAsBMJZACdAD0Zp8L52AA/sHMeVqv9IfNojYjCBDcAAL/LXIZ2Pp+TDktcJFjkqweoMF1cVoIXYZzEh+i/b5aDMhDP5CSqqttWl6ZBbwcAAA=" + }, + "curius.png": { + "width": 653, + "height": 655, + "blurDataURL": "data:image/webp;base64,UklGRj4AAABXRUJQVlA4IDIAAADQAQCdASoMAAwAAsBMJZwAAu1/PaewAAD++rSlNX+2tXbM/tgsQar25ufcv+/2QNwAAA==" + }, + "curseddreams.jpeg": { + "width": 1920, + "height": 1036, + "blurDataURL": "data:image/webp;base64,UklGRkgAAABXRUJQVlA4IDwAAAAQAgCdASoMAAYAAsBMJYgCdAEDoTmT2ZAAAP6+HAX0nEyRAH1LWsJzfOG4HNKqw9cLZuIrZc2LYOEAAAA=" + }, + "dance.jpg": { + "width": 874, + "height": 575, + "blurDataURL": "data:image/webp;base64,UklGRk4AAABXRUJQVlA4IEIAAADQAQCdASoMAAgAAsBMJYgCw7DdpcinvAD+5SMpgtHahlYVw3ysE7XmnqhSo4FwAyxDKXLMKdGFAv04dHPcBcOQAAA=" + }, + "danceoflife.jpg": { + "width": 2000, + "height": 1313, + "blurDataURL": "data:image/webp;base64,UklGRlwAAABXRUJQVlA4IFAAAAAQAgCdASoMAAgAAsBMJQBOgCMCMPhwsvMAAP5Lacn+kf8BPJgeq7n16iMS46RCmY/Q1K5ZqvIqH5LPX5EpztRnnIDIlDwHlcNNZiEQWxgAAA==" + }, + "desa.jpg": { + "width": 2000, + "height": 2667, + "blurDataURL": "data:image/webp;base64,UklGRk4AAABXRUJQVlA4IEIAAAAQAgCdASoJAAwAAsBMJYwCdAELZB/QwxYAAP7v9SDWn1KXn6dc9wAeymQJUnp9Q0B0PVSF42vuM3Df2bQKlYAgAAA=" + }, + "dinnertable.jpeg": { + "width": 2000, + "height": 1460, + "blurDataURL": "data:image/webp;base64,UklGRmQAAABXRUJQVlA4IFgAAAAQAgCdASoMAAkAAsBMJagCdAEDfqFcWAYAAP73yJ2EUxfRozWoq8CCx4gNeLp1k9ZX+5bUsWtDN+Nfz1jAzOPOoS/L8mi+9cCCSkISn8gZcGEN6UbYAAAA" + }, + "distributed2.jpeg": { + "width": 507, + "height": 640, + "blurDataURL": "data:image/webp;base64,UklGRjIAAABXRUJQVlA4ICYAAACwAQCdASoJAAwAAsBMJaQAAuaZkjAAAP7qttmvf+m67OC/xwAAAA==" + }, + "dog.jpg": { + "width": 2560, + "height": 1667, + "blurDataURL": "data:image/webp;base64,UklGRmQAAABXRUJQVlA4IFgAAADwAQCdASoMAAgAAsBMJZwAAxU3K3hHF7AA/q3kXuNJ8qKESyvSPQnLez83Hx39GhuMHPl3TAd4u3aFwEOdUMKW/HjMY7mhGdf5w7cjRZIP6ilmu+L+uyAA" + }, + "ejiri.jpeg": { + "width": 2000, + "height": 1339, + "blurDataURL": "data:image/webp;base64,UklGRkgAAABXRUJQVlA4IDwAAADQAQCdASoMAAgAAsBMJQBOgCICTr0hIAD+8BQF5crkUS733UPTMxhCvr2fgkS9xk/dk9RS5wsQAOg1QAA=" + }, + "experimentbooks.jpg": { + "width": 2000, + "height": 1500, + "blurDataURL": "data:image/webp;base64,UklGRlYAAABXRUJQVlA4IEoAAACwAQCdASoMAAkAAsBMJQBOgBsrHAOAAPwwZu5Onu2++8GjF+XKP+EoqFmE1p+DfWufhIzOBl6rhC0+9mIzSgu1ezAHUbTh8aAAAA==" + }, + "farmhouse.jpg": { + "width": 1432, + "height": 1080, + "blurDataURL": "data:image/webp;base64,UklGRloAAABXRUJQVlA4IE4AAADQAQCdASoMAAkAAsBMJbACdAEfg3zzYAD+sjmGVasSdNtCXlSmRBcb0JkFt+XvlChnZkxY9e142AnWQ8yLmxnyfHETfnqneQFlmcHtwAA=" + }, + "finlandclouds.jpg": { + "width": 1800, + "height": 1598, + "blurDataURL": "data:image/webp;base64,UklGRlwAAABXRUJQVlA4IFAAAACwAQCdASoMAAsAAsBMJZACdABsEc9AAPatHwlkwl3sxI3YgJbCDwBYGON/tGkL7/RpUGEIpRWbJB5UGVmDEsHxMK/cZ/xCpZokNgtHVa3QAA==" + }, + "fire.jpeg": { + "width": 1076, + "height": 730, + "blurDataURL": "data:image/webp;base64,UklGRlwAAABXRUJQVlA4IFAAAADQAQCdASoMAAgAAsBMJagCdADJfC67AAD9waJOnx1T7KY+JS2XUMKF7fZFzbYdTNw4kIYpz+AT6wyh0pLxeu9wk9cLZYE/b43+bnWaKgAAAA==" + }, + "firsthackathon.png": { + "width": 1920, + "height": 1080, + "blurDataURL": "data:image/webp;base64,UklGRkoAAABXRUJQVlA4ID4AAACwAQCdASoMAAcAAsBMJZQAApsyJ84AAP7vqtCvbkztYtirZt/gMip81twmnN4DGYZ12UvhK+vb4MDhiNwEAA==" + }, + "flowers.jpg": { + "width": 1209, + "height": 1536, + "blurDataURL": "data:image/webp;base64,UklGRlIAAABXRUJQVlA4IEYAAADQAQCdASoJAAwAAsBMJYwCdADygmKgAAD++KmOhVTjd2KSh4VCn+nt9Sjv7PSusi2wreciD1vGWzQvU7WlNbZiJX7B5QAA" + }, + "fool.jpg": { + "width": 746, + "height": 1302, + "blurDataURL": "data:image/webp;base64,UklGRmAAAABXRUJQVlA4IFQAAAAQAgCdASoHAAwAAsBMJbACdAD0jOdDrMAAAP7h7OfSWXSHiD1dKwyniKibv4ftsy1kzJtT6gLpILxt9l9ODYN//3MiOxfPcVv/ockKjVZXLDwAAAA=" + }, + "friendshipforces.jpeg": { + "width": 2000, + "height": 2233, + "blurDataURL": "data:image/webp;base64,UklGRlIAAABXRUJQVlA4IEYAAAAQAgCdASoLAAwAAsBMJZQCdAEPEMcvulEAAP3Ds36uN4H7iQjU8XbbERZ9B+yweTFQ64RYJkPtVY4kgWAKNm4xwfCREAAA" + }, + "garden.jpeg": { + "width": 1024, + "height": 583, + "blurDataURL": "data:image/webp;base64,UklGRlQAAABXRUJQVlA4IEgAAADQAQCdASoMAAcAAsBMJagCdADdieIAwAD+eQ7S7DYRsEUHgKXFUrusEI+0bq56K5J0WCfNjHTaYI98PDvj0ILOsC8kegV4AAA=" + }, + "geoffrin.jpg": { + "width": 1400, + "height": 904, + "blurDataURL": "data:image/webp;base64,UklGRkgAAABXRUJQVlA4IDwAAADwAQCdASoMAAgAAsBMJZQCdAEVuyNEu3AA/vEb24n6F6mouJ6SfTak/By/UuisSDWegzTOZZWYloAAAAA=" + }, + "gift.jpeg": { + "width": 2000, + "height": 993, + "blurDataURL": "data:image/webp;base64,UklGRkwAAABXRUJQVlA4IEAAAADQAQCdASoMAAYAAsBMJZgCdADcTXyeoADeVZKPrK2oXxegXhUsxmBZae3+VpOcRqCxmLhj8PkdAhyRBGqlAAAA" + }, + "giverny.jpg": { + "width": 977, + "height": 871, + "blurDataURL": "data:image/webp;base64,UklGRkwAAABXRUJQVlA4IEAAAACwAQCdASoMAAsAAsBMJQBOgBrENdoAAP7kWtw3E9PJOxSXP8GjJkvah84HIx3e+zgk1LsO2gBCERgUKj5ICBAA" + }, + "gothigh.jpg": { + "width": 600, + "height": 800, + "blurDataURL": "data:image/webp;base64,UklGRlwAAABXRUJQVlA4IFAAAAAQAgCdASoJAAwAAsBMJbACdBHABfpXbouQAP6hXOqqsjv1INLS5qj7B66E2WwMpPBNfxmjL/JmJeQu5TuX9dtdb8Z7fAOPxzmd7z3sLtgAAA==" + }, + "grad.jpeg": { + "width": 960, + "height": 1280, + "blurDataURL": "data:image/webp;base64,UklGRm4AAABXRUJQVlA4IGIAAADwAQCdASoJAAwAAsBMJYgCdADdguEjGUAAyxsfdqTzqcBH7MciW4P3zAI6pf78fI5THniarLxwockg9hvXkTAu3RW3hEr498Llg079aAYrwzCOQ2UzNGXm6uB4VyK+t0AAAA==" + }, + "gradceremony.jpeg": { + "width": 1200, + "height": 1152, + "blurDataURL": "data:image/webp;base64,UklGRl4AAABXRUJQVlA4IFIAAADQAQCdASoMAAwAAsBMJZgCdAEOW7Ak0AD+8XueibKX+Tejase0JiSITdapMNk5g+6HnbwEZ95QZqUIkTcZLcBxHIEty1vELNFsT616z/X/bKAA" + }, + "greendress.jpeg": { + "width": 1402, + "height": 2161, + "blurDataURL": "data:image/webp;base64,UklGRj4AAABXRUJQVlA4IDIAAADwAQCdASoIAAwAAsBMJYgCdAEUo59SMAAA/vVwjtzOnc1uqxCpd6jr7clEaDPu+AAAAA==" + }, + "greeninterior.jpeg": { + "width": 1200, + "height": 1811, + "blurDataURL": "data:image/webp;base64,UklGRkIAAABXRUJQVlA4IDYAAADwAQCdASoIAAwAAsBMJZAC7AEO/hpEVwAA/qJ9Rn+QF1JeFnpS1eh7fh6Z2ygz16LBis75AAA=" + }, + "harbourmarseilles.jpeg": { + "width": 1200, + "height": 993, + "blurDataURL": "data:image/webp;base64,UklGRjgAAABXRUJQVlA4ICwAAACwAQCdASoMAAoAAsBMJQBOgCHgbmH4AP7v7kKIo949+A20letFA50bUAAAAA==" + }, + "havetea.jpeg": { + "width": 564, + "height": 297, + "blurDataURL": "data:image/webp;base64,UklGRlIAAABXRUJQVlA4IEYAAADwAQCdASoMAAYAAsBMJQBOgBus36CyNgAA/Ms0qWrBbVoj6NJzsgEhTE7FZfQQxe9OwL4L3gSTeLJpaDK+T/KBE3DQwAAA" + }, + "here.jpg": { + "width": 1428, + "height": 2160, + "blurDataURL": "data:image/webp;base64,UklGRkgAAABXRUJQVlA4IDwAAAAQAgCdASoIAAwAAsBMJZQCdAD5jrcMRRLYAP3SPassijaS0JkYcCp0H4gI8ZHy/dOkLaFfDy5GGfq8AAA=" + }, + "hk1.jpeg": { + "width": 1200, + "height": 1389, + "blurDataURL": "data:image/webp;base64,UklGRloAAABXRUJQVlA4IE4AAADQAQCdASoKAAwAAsBMJQBOgBstYwnfQAD+9Fx1XAbd2fRQ2PcCzehFRd3pPSU2QluXWzpx0Wb7i5Y7YGS2DMPv/60DtAtOL+gDRcpgAAA=" + }, + "hk2.jpeg": { + "width": 1200, + "height": 987, + "blurDataURL": "data:image/webp;base64,UklGRk4AAABXRUJQVlA4IEIAAADwAQCdASoMAAoAAsBMJYwCdAEOzLharAAA/uhMU52Nocfp/eq6VuMu89YRQubz/uQSxQvk4OQFSVBeWO/FjE/gAAA=" + }, + "hkday4.jpg": { + "width": 2000, + "height": 1500, + "blurDataURL": "data:image/webp;base64,UklGRlIAAABXRUJQVlA4IEYAAADQAQCdASoMAAkAAsBMJZACdAD0Fim8gAD45M8rETAMjzlWrMFlJ+l6NqKKuc/MaMKRwzI8JEAtdtPPLyEk+wn8OE4LxngA" + }, + "hkpier.jpg": { + "width": 2000, + "height": 1500, + "blurDataURL": "data:image/webp;base64,UklGRlgAAABXRUJQVlA4IEwAAADQAQCdASoMAAkAAsBMJYgCsAC2TQUrgAD+9d2kSi5RYBbxZgmZE+Yj+AQ8+mwwQ4kWOjRZ/TvnyhZX1cEv1N1UMQqL8w7HPvohgYgA" + }, + "home.jpeg": { + "width": 5088, + "height": 3032, + "blurDataURL": "data:image/webp;base64,UklGRloAAABXRUJQVlA4IE4AAADwAQCdASoMAAcAAsBMJbACdAENpSo3m2AA/vZ6XX1+MUEkB03r3QguXdiN3U3Fvncwy+GVVpXydq35zLghM+/WPfFKHkuQK/uXmSQAAAA=" + }, + "home.png": { + "width": 1616, + "height": 848, + "blurDataURL": "data:image/webp;base64,UklGRnYAAABXRUJQVlA4WAoAAAAQAAAACwAABQAAQUxQSA0AAAABD9D/iAgMQkT/QwAAAFZQOCBCAAAAEAIAnQEqDAAGAALATCWMAnR/ABgftxm8AAD+68AyjZEaC9Ee4qyzWUgo7Lnk5wOQvkb+Znqnd1vctShlglU8wAAA" + }, + "hope.jpeg": { + "width": 2000, + "height": 2000, + "blurDataURL": "data:image/webp;base64,UklGRlIAAABXRUJQVlA4IEYAAADwAQCdASoMAAwAAsBMJbACdAD609bz94AAzFAV5VVHecsJNA7oVfrBa7t1CyZKYVjzCxDGIC9etLUDCF5MlF8J60cEtAAA" + }, + "huntersnow.jpg": { + "width": 2000, + "height": 1423, + "blurDataURL": "data:image/webp;base64,UklGRlAAAABXRUJQVlA4IEQAAADQAQCdASoMAAgAAsBMJQBOgBuEoV2OsAD+2p9W49PqI2i4NM75Vhn8bIbg8H36wupLnT+/Ixwc4juWqeqc3g4xaAAAAA==" + }, + "ina.jpg": { + "width": 2000, + "height": 1127, + "blurDataURL": "data:image/webp;base64,UklGRk4AAABXRUJQVlA4IEIAAADQAQCdASoMAAcAAsBMJYwCdAEOaFfcUAD+6D9aOL49coRnT2ZoRlV2ICSh/0J3YRpnZKAo5iNxYUXc+uuOmaYAAAA=" + }, + "inbed.jpg": { + "width": 2362, + "height": 1821, + "blurDataURL": "data:image/webp;base64,UklGRlwAAABXRUJQVlA4IFAAAADQAQCdASoMAAkAAsBMJYgCdAEDeAv1YAD+m/mWoaPQpt8lvU7Yg9whf5SUUjrCdM2d22Fm+vx86BFiTWteooQy/KXi4TVMsc1GBZC9QyMAAA==" + }, + "inti.png": { + "width": 768, + "height": 1024, + "blurDataURL": "data:image/webp;base64,UklGRm4AAABXRUJQVlA4IGIAAAAwAgCdASoJAAwAAsBMJZgCdAYrxbZ2Hx43gAD5CGC+QmlrPQ/y5fMHaKvRi6n+ejRVxh2WvqpHItl/fP5bv2iNK06qOkysMPRtYkS146VsP59GDV8yYX237bIjLWGVzgAAAA==" + }, + "ios.jpeg": { + "width": 1125, + "height": 1218, + "blurDataURL": "data:image/webp;base64,UklGRmoAAABXRUJQVlA4IF4AAADwAQCdASoLAAwAAsBMJZwAD4oxduia1sAA/u9pu6Xs/wfd/vYe8YXrkpW8hErcB4aQZAlJqjzs9/m+P9NEcQh1uz+MQg8lmLXLzNBlKGTWEiC9AyUJkP+wFti0QWAA" + }, + "iowaroom.jpeg": { + "width": 1280, + "height": 960, + "blurDataURL": "data:image/webp;base64,UklGRmIAAABXRUJQVlA4IFYAAADwAQCdASoMAAkAAsBMJagCdADcqlC8QQAA/SVHJn9uV5JgMRdNp0svkPOeO5SDXCbFg8y24hDxAPdLapPN27aibkZM57j2yL6W2CEjM3L5kpi1REQAAA==" + }, + "ironmill.jpg": { + "width": 2000, + "height": 1241, + "blurDataURL": "data:image/webp;base64,UklGRj4AAABXRUJQVlA4IDIAAADwAQCdASoMAAcAAsBMJYwCdAD5atmD3QAA/uy/ZpootzlOr5qHa+XsrYN7tSTdOAAAAA==" + }, + "isabella.jpeg": { + "width": 1200, + "height": 1600, + "blurDataURL": "data:image/webp;base64,UklGRl4AAABXRUJQVlA4IFIAAADwAQCdASoJAAwAAsBMJYwC7ADb7RVKPsAA/QJjmgGc049GqEsk001aY1moneRRU0pnMQSsCW4pH9DtZ9AP8nvn36txCfnOzMpQmso+65QhQgAA" + }, + "isugame.jpeg": { + "width": 960, + "height": 1280, + "blurDataURL": "data:image/webp;base64,UklGRloAAABXRUJQVlA4IE4AAAAwAgCdASoJAAwAAsBMJQBOj+ADA3YhHp2HqAD+8uqdKUI0m97Hty90BFLnjsec30fqbaj/cSo5zN/ERzmxvZgTQZ8pnpLApQzIFdhSQAA=" + }, + "italian_garden.jpeg": { + "width": 1200, + "height": 1205, + "blurDataURL": "data:image/webp;base64,UklGRjgAAABXRUJQVlA4ICwAAACQAQCdASoMAAwAAsBMJQBdgBHmfoAAyTCPbnCF+pNb5Y1K4V2LPdNydugAAA==" + }, + "jdp_design.png": { + "width": 1088, + "height": 688, + "blurDataURL": "data:image/webp;base64,UklGRkIAAABXRUJQVlA4IDYAAADQAQCdASoMAAgAAsBMJZwAAu0e3sQ7AAD++ZZSSAA6NE7T+8jITsdMLPiti1Vv3UZX6Vsw7gA=" + }, + "jerome.jpg": { + "width": 1200, + "height": 1562, + "blurDataURL": "data:image/webp;base64,UklGRkwAAABXRUJQVlA4IEAAAACwAQCdASoJAAwAAsBMJaQAAvhPJxkAAP5HTOiz03XRSydJYtCVg9hrhUVCbsL1gQazdMXCBBJK5vnZF/P7gAAA" + }, + "joyce.jpeg": { + "width": 557, + "height": 800, + "blurDataURL": "data:image/webp;base64,UklGRloAAABXRUJQVlA4IE4AAAAQAgCdASoIAAwAAsBMJYgCdAD0UC7VxQ6gAP7qTb/YZFLk5YnFlm6Z9l6FXCGF+J+bka8SXtyyq0MEcsWI7CjGFuvpfVxh3b6yzMIeAAA=" + }, + "kl.jpg": { + "width": 1400, + "height": 875, + "blurDataURL": "data:image/webp;base64,UklGRkoAAABXRUJQVlA4ID4AAADQAQCdASoMAAcAAsBMJQBOgB6M8hc5uAD+8hC4mojJmxMEz9ez+gur0L83whJGhPqCnS8wijQYg8/Ka6QQAA==" + }, + "la_grande_jatte.jpg": { + "width": 2000, + "height": 1345, + "blurDataURL": "data:image/webp;base64,UklGRlAAAABXRUJQVlA4IEQAAADwAQCdASoMAAgAAsBMJYwCdAD5gG0w94AA/rP/foSXbntOGV+4itVXZLqnAkoBT+MRlKNirX02G7nRFCfpDCv+nVngAA==" + }, + "legionofhonor.jpeg": { + "width": 1200, + "height": 900, + "blurDataURL": "data:image/webp;base64,UklGRlIAAABXRUJQVlA4IEYAAABQAgCdASoMAAkAAsBMJZgCdGuAt/8C3c0VRcAA/UpbtU46cCBGzZB1Asqs+J8A7QymLkjPhnTJb6IUs/yG4kh/IRNQ0AAA" + }, + "lemoulin.jpg": { + "width": 1740, + "height": 1293, + "blurDataURL": "data:image/webp;base64,UklGRlwAAABXRUJQVlA4IFAAAAAQAgCdASoMAAkAAsBMJZQC7AYsFZvPR4IAAP67VaLRCgF95aARcfgrxmHVLE19+4oId1XUWgXt6z3eAvehYwzLY5myFUWOXeEWz6KgOIAAAA==" + }, + "leostar.jpeg": { + "width": 1690, + "height": 2000, + "blurDataURL": "data:image/webp;base64,UklGRk4AAABXRUJQVlA4IEIAAAAQAgCdASoKAAwAAsBMJYgCdADblSCH6oAAAP7h4PCFqiBdwr2LsHUAAtMrgexV17DRBQDr0jrjc2vZfkjGnvByAAA=" + }, + "letter.jpg": { + "width": 705, + "height": 900, + "blurDataURL": "data:image/webp;base64,UklGRlYAAABXRUJQVlA4IEoAAAAQAgCdASoJAAwAAsBMJYgCdAD5g4efQCMAAP7pLDK49DKa/H+m7LPiI0ACFWbLVfC+kdPfXW2CiQCoSlVHHzHLrhf4EJPV8rAAAA==" + }, + "life_mountain.jpg": { + "width": 1536, + "height": 942, + "blurDataURL": "data:image/webp;base64,UklGRlAAAABXRUJQVlA4IEQAAAAQAgCdASoMAAcAAsBMJYwCw7DdtqoAteloAP5rYiroRYU8eEhE9Lc5FweaqLaMeRWSo9RZRZaIRX5hyqyXgiEsqUAAAA==" + }, + "lilyrose.jpg": { + "width": 2000, + "height": 2259, + "blurDataURL": "data:image/webp;base64,UklGRmgAAABXRUJQVlA4IFwAAAAQAgCdASoLAAwAAsBMJYwCdAD8BnCdq4AAAP7qLRlFqW12mXo+YaXLGiHroGCXjHb6jd+kP/ThmBCfo9bSdxVgGmLCd175vtTXG/80XK75PJofSj6ousviJEAAAA==" + }, + "listen.jpg": { + "width": 2000, + "height": 1529, + "blurDataURL": "data:image/webp;base64,UklGRlYAAABXRUJQVlA4IEoAAADQAQCdASoMAAkAAsBMJZQAAxRGVUB0cAD+woPhEYOXZOody2PKl1wA6q/V8/9gWwqrylycbH23Be7bdbNqwQPeclxKkaRZuo0AAA==" + }, + "littlejoys.jpeg": { + "width": 1200, + "height": 1578, + "blurDataURL": "data:image/webp;base64,UklGRlYAAABXRUJQVlA4IEoAAAAQAgCdASoJAAwAAsBMJZgCdAEUpAtYlkMAAP6w7++bs0w5jD/0IwbWQ8gCBb8iPvYH890CjUUd2BK3ayQE17tb4yKPwZLdkMAAAA==" + }, + "loutherbourg.jpg": { + "width": 2048, + "height": 1309, + "blurDataURL": "data:image/webp;base64,UklGRloAAABXRUJQVlA4IE4AAADwAQCdASoMAAgAAsBMJYgCdAEaEWru/lgA/vMrhPfq5lM0dRFYatD21+GntL2ezbLVjVdfV4yLYK34om/PrUximfLjRdRJJzpEBbaAAAA=" + }, + "luxe.jpg": { + "width": 1779, + "height": 1467, + "blurDataURL": "data:image/webp;base64,UklGRkgAAABXRUJQVlA4IDwAAADQAQCdASoMAAoAAsBMJQBOgCP7jyzPAAD+8n00BvX5VRVsloyC887WV50uc69+93z0BF6+QyhNlI2QAAA=" + }, + "magnolias.jpeg": { + "width": 1200, + "height": 800, + "blurDataURL": "data:image/webp;base64,UklGRkoAAABXRUJQVlA4ID4AAADQAQCdASoMAAgAAsBMJQBOgCP7PpYoAAD+jVRzbH0DBdSYqF3uSp1YRZ5pbitCcVl2vlsLmHHsyKHH4QAAAA==" + }, + "magpie.jpg": { + "width": 1592, + "height": 1080, + "blurDataURL": "data:image/webp;base64,UklGRkQAAABXRUJQVlA4IDgAAADwAQCdASoMAAgAAsBMJZQC7AD5hTRcVwAA/utqRMkoYYexIChjVsIQXiJuvy4VaLApVdXpNsAAAA==" + }, + "matrixcolor.jpeg": { + "width": 1030, + "height": 1200, + "blurDataURL": "data:image/webp;base64,UklGRnAAAABXRUJQVlA4IGQAAACwAQCdASoKAAwAAsBMJQBWAB9h8OVoAP4/uZfLq4ZFn1gTx/dQJg5n6dTs9NL7vRhRuBNVrP6ywYftHtwxf1vbGiPjgFq8fnuaBAfS+2BRxF6zDdAXH81eu+1IjYBNIQgt90AA" + }, + "medusa-raft.jpg": { + "width": 2000, + "height": 1365, + "blurDataURL": "data:image/webp;base64,UklGRkwAAABXRUJQVlA4IEAAAADwAQCdASoMAAgAAsBMJQBOgCLKHKjKoYAA/uoce45LX9p6fGlfWCjQNg4i3l0lR9EHql5rIEezsMJf87J3iAAA" + }, + "melancholy.jpeg": { + "width": 2000, + "height": 1548, + "blurDataURL": "data:image/webp;base64,UklGRloAAABXRUJQVlA4IE4AAAAQAgCdASoMAAkAAsBMJZACdAEWfs3TqJ0AAP7vbYNOaFAPXFu9p9UP5AVHYZ8AzUWKqIP5CmLDw7dV5LHLvGwwmFBRk7nY67R2vZAAAAA=" + }, + "melancholy.jpg": { + "width": 848, + "height": 569, + "blurDataURL": "data:image/webp;base64,UklGRloAAABXRUJQVlA4IE4AAADQAQCdASoMAAgAAsBMJQBWACIfOnyggADLGoh3lxsCDle1pqNqxoi55e/8Ngs4t+v/o+g8TF9cPQUQ6lC1/R4Qea7IDcZ3+ol2MbyUgAA=" + }, + "melencolia.jpg": { + "width": 1200, + "height": 1516, + "blurDataURL": "data:image/webp;base64,UklGRlAAAABXRUJQVlA4IEQAAAAQAgCdASoKAAwAAsBMJZQCdADdjSoKCxUAAP7HZ88t6VMNXXOaadSJUwI7fNl5oJeA723hwmr+DXXuJJ2rBDfa/V4AAA==" + }, + "memories.jpeg": { + "width": 720, + "height": 540, + "blurDataURL": "data:image/webp;base64,UklGRk4AAABXRUJQVlA4IEIAAADQAQCdASoMAAkAAsBMJaQAAlychrYoAAD+9dxrgQrXZLvvxX4L+ZO1aCHhkhJB67cS4laBCjj3bxjhQ6EJTQZkAAA=" + }, + "miami.png": { + "width": 1536, + "height": 2048, + "blurDataURL": "data:image/webp;base64,UklGRlwAAABXRUJQVlA4IFAAAABQAgCdASoJAAwAAsBMJZQCdIExGZCEw+aH5QAA/phDwMhCF5k5IZIwFAB+aVNSh4rO3sluWYobIlDlgYp2cZ6WD6GsoESz+SQclv1gwAAAAA==" + }, + "milkmaid.jpeg": { + "width": 500, + "height": 500, + "blurDataURL": "data:image/webp;base64,UklGRlwAAABXRUJQVlA4IFAAAADwAQCdASoMAAwAAsBMJQBOgCPOjvjGCRAA/uo8x83Cd73TGMVjd5jdjGH5kGJSqnhaivqNoAf4Qd362aKJ0A5OKUO9k6ZluSG2o8/tiAAAAA==" + }, + "minitable.jpeg": { + "width": 1200, + "height": 1632, + "blurDataURL": "data:image/webp;base64,UklGRlgAAABXRUJQVlA4IEwAAAAQAgCdASoJAAwAAsBMJYwCdAD5jaVAF9woAOINF/Zbw0Dygb+q/So220t4447XWHRFuvMZf2xbHAeKhWhPhW0UC3Ui8M6+NyH4AAAA" + }, + "mit.jpeg": { + "width": 1200, + "height": 1600, + "blurDataURL": "data:image/webp;base64,UklGRlgAAABXRUJQVlA4IEwAAADQAQCdASoJAAwAAsBMJQBOgBujNZsOQAD+4pflHzBYgMTWLgTVpzbaGIjbrgZLbzGURl+T/EqdNnBYbf4fxUUuqlQsi9l26h2xAAAA" + }, + "monetwaterloo.jpeg": { + "width": 2000, + "height": 1279, + "blurDataURL": "data:image/webp;base64,UklGRj4AAABXRUJQVlA4IDIAAACwAQCdASoMAAgAAsBMJYwCdAEO+KbQAP4nX0Dgg/vG0IHRU3wf5Gk0tJLPjU+yokVQAA==" + }, + "monk.jpg": { + "width": 2000, + "height": 1272, + "blurDataURL": "data:image/webp;base64,UklGRkQAAABXRUJQVlA4IDgAAADQAQCdASoMAAgAAsBMJYwCdAEOuz0viAD+x1+VDjmdMPpTxZiaMBbrvL7AeG80GWeQ3GduATzcAA==" + }, + "moonrisesea.jpg": { + "width": 1349, + "height": 1080, + "blurDataURL": "data:image/webp;base64,UklGRkIAAABXRUJQVlA4IDYAAADQAQCdASoMAAoAAsBMJZACdAENWL+joAD2P+If7qFB79/r6NrGOQULrt/jxRLHaynBsB8VAAA=" + }, + "morning.jpeg": { + "width": 948, + "height": 657, + "blurDataURL": "data:image/webp;base64,UklGRlYAAABXRUJQVlA4IEoAAADQAQCdASoMAAgAAsBMJZQCsADg/f35AADN87cFh0bWf8CmLjjqavxfmVICZiHqihRm3cpw3lwVVDHFzQTbWFgUtTKhDT0yf3AAAA==" + }, + "mother.png": { + "width": 500, + "height": 500, + "blurDataURL": "data:image/webp;base64,UklGRmgAAABXRUJQVlA4IFwAAAAQAgCdASoMAAwAAsBMJbACdAYsjYU8sPQAAPxeBkuc78f9xixuAoeQyJiLvMy0Fw+Iy78UtB0i7vW4d2uMvBtVhWLjYLYZDHzEgpMRNcO1VSuS1tarA3jcodAAAA==" + }, + "mucha.jpeg": { + "width": 2046, + "height": 2717, + "blurDataURL": "data:image/webp;base64,UklGRloAAABXRUJQVlA4IE4AAADwAQCdASoJAAwAAsBMJagCdADdImNeoAAA+VgeiMMklcxs4YkwOcgfCkGDQjZtOLBXqgOAgW40ogVncjV4XS1Y/schy1pHzynpfciGAAA=" + }, + "munyee.jpeg": { + "width": 892, + "height": 776, + "blurDataURL": "data:image/webp;base64,UklGRkgAAABXRUJQVlA4IDwAAADwAQCdASoMAAoAAsBMJZwAAvaegsLSjAAA/vJpmiYOffcb73ubUzNoRL/5c3acVpcveVmObmisiPwAAAA=" + }, + "musicians.jpg": { + "width": 2000, + "height": 1800, + "blurDataURL": "data:image/webp;base64,UklGRlgAAABXRUJQVlA4IEwAAADwAQCdASoMAAsAAsBMJYgCdAD0miNwSgAA/vG59ui3Tm+uLqwm02AXwGnPiekIMBMry3tAFQmRtGu9AxyM64sGbFv4f33EZatJQAAA" + }, + "mybike.jpg": { + "width": 2000, + "height": 1499, + "blurDataURL": "data:image/webp;base64,UklGRlYAAABXRUJQVlA4IEoAAADQAQCdASoMAAkAAsBMJQBOgBt1UZWoAAD9nL00MDj6hbAiyP6dbi+N1F0ALw4bXpINchSG8yi2K82yfzdZjPEy6pgMeHpk2rAAAA==" + }, + "niceday.jpeg": { + "width": 1838, + "height": 739, + "blurDataURL": "data:image/webp;base64,UklGRkAAAABXRUJQVlA4IDQAAADwAQCdASoMAAUAAsBMJZgCdAD7FKRKlwAAyoDGhANuuQYBB+eyjJO99ll/DHVZ+BP7gAAA" + }, + "nighthawks.jpg": { + "width": 2000, + "height": 1091, + "blurDataURL": "data:image/webp;base64,UklGRlIAAABXRUJQVlA4IEYAAADQAQCdASoMAAcAAsBMJZACdAELKA0+AAD+9JjkBsM8crwtrIpyi8l0VlYN33g8ufVzO5yFPU/ynXvicL8MELdESFdaO0AA" + }, + "nightscandles.jpeg": { + "width": 944, + "height": 759, + "blurDataURL": "data:image/webp;base64,UklGRmAAAABXRUJQVlA4IFQAAABQAgCdASoMAAoAAsBMJYwCdAYvDWcAK/ybQmAA/qFG7WfQAmslm32oTPpqWftc3x41zh9j1eJC1tULdCULdaePk6UoPywMG1aBSaXfb85tGej0AAA=" + }, + "nightwatch.jpg": { + "width": 2578, + "height": 2160, + "blurDataURL": "data:image/webp;base64,UklGRkQAAABXRUJQVlA4IDgAAAAwAgCdASoMAAoAAsBMJYwCdAELZS+yz1VzAAD++E611uxwmIheIt9qm2uXJ4PRtlLVIw1i064AAA==" + }, + "norham.jpg": { + "width": 1536, + "height": 1133, + "blurDataURL": "data:image/webp;base64,UklGRkQAAABXRUJQVlA4IDgAAAAQAgCdASoMAAkAAsBMJQBdj+AC4u9B9jEAAP7iJ46sMRLZrPB6zNTQn0pWMwPMB0NTKBpuGgAAAA==" + }, + "olivetrees.jpeg": { + "width": 1036, + "height": 840, + "blurDataURL": "data:image/webp;base64,UklGRmIAAABXRUJQVlA4IFYAAADwAQCdASoMAAoAAsBMJbACdADbgYEeIAAA/pqxgy/2b62Kbp0M1oeqrv1JSggFvi4ajCT0+PpJ0zCPuLYx63ffov7330fAW1fYs49qiFiKXySeMzkAAA==" + }, + "orange-red-yellow.jpg": { + "width": 691, + "height": 792, + "blurDataURL": "data:image/webp;base64,UklGRkoAAABXRUJQVlA4ID4AAAAQAgCdASoKAAwAAsBMJbACdLoAAwbAdvIAAP1Qqk0ot4j0t3wPKVcZv3bsR+kDCa4tbx/44m24iXKLegAAAA==" + }, + "paperfigure.png": { + "width": 2172, + "height": 1056, + "blurDataURL": "data:image/webp;base64,UklGRjgAAABXRUJQVlA4ICwAAAAwAQCdASoMAAYAAsBMJaQAA3AA/vJdvFe1SFZaErO8gBOQBcWpizAhuQAAAA==" + }, + "parade_street_25.jpeg": { + "width": 1200, + "height": 1600, + "blurDataURL": "data:image/webp;base64,UklGRl4AAABXRUJQVlA4IFIAAAAQAgCdASoJAAwAAsBMJZgCdAELZZzhDZTAAP74bWiBvhP509qIwx9BHUcRhCaabFOvJGTYHWj5jqA+pa0ugjjqUPUU/IBOuSqyuvbjg27178AA" + }, + "parliament.jpeg": { + "width": 1200, + "height": 1061, + "blurDataURL": "data:image/webp;base64,UklGRjAAAABXRUJQVlA4ICQAAACQAQCdASoMAAsAAsBMJZQC7ABfwNAA3Y822zWcLiyDmnrBQAA=" + }, + "party.jpg": { + "width": 2000, + "height": 1476, + "blurDataURL": "data:image/webp;base64,UklGRlwAAABXRUJQVlA4IFAAAAAQAgCdASoMAAkAAsBMJQBOgMWMtayzFQwAAPKOo1rtrbdR78wM97qaLHgD8DuX6NkntFhfNf7J2dbWp1kUfjVj6m3D3qdZdSrlCsIHFyQAAA==" + }, + "pastures.jpg": { + "width": 2048, + "height": 1520, + "blurDataURL": "data:image/webp;base64,UklGRkQAAABXRUJQVlA4IDgAAACwAQCdASoMAAkAAsBMJYgCdAEOV388AP71B+/45oow5cNytDZD2rj6ODD7eFIc4qNqkBLTXMAAAA==" + }, + "phosphorus.jpeg": { + "width": 1579, + "height": 2048, + "blurDataURL": "data:image/webp;base64,UklGRlYAAABXRUJQVlA4IEoAAADwAQCdASoJAAwAAsBMJZQC7AEPD7gE7tAA/vLl0xnVVKBaD2kqtWeKhoQXqyo1Dmn0AHeTIOOXrJpn2oFLARR1zQj28IN/FoAAAA==" + }, + "picasso.jpeg": { + "width": 1216, + "height": 1536, + "blurDataURL": "data:image/webp;base64,UklGRlwAAABXRUJQVlA4IFAAAADwAQCdASoKAAwAAsBMJZwCdAEYEdOmtgAA/mZXNr9tbUnf6P85y/k4ph8NmCbex1W+mlnRD61PPvRT+6DqiOPmizymi7gXEy9TBvufsjwAAA==" + }, + "pingpong.jpeg": { + "width": 895, + "height": 994, + "blurDataURL": "data:image/webp;base64,UklGRnQAAABXRUJQVlA4IGgAAAAQAgCdASoLAAwAAsBMJaACsAEO5gCLvloAAP7nrdBVS6p0bxB8ViTBs9gAg+wSbQ/vv616mGjdtzf+n35Q7N3LShswjXXjr2QlnCsaROQ3ukjhxwz+d+EIZa11Oiv+ApMT28s4nySgAA==" + }, + "pinkpeach.jpeg": { + "width": 1200, + "height": 1626, + "blurDataURL": "data:image/webp;base64,UklGRkYAAABXRUJQVlA4IDoAAADQAQCdASoJAAwAAsBMJQBOgCPOlR8awAD+lrMZLZc0CLouiuAE6VL8eqU2CmlJpdez6YfOUOWsQAAA" + }, + "polyphemus.jpg": { + "width": 1920, + "height": 1200, + "blurDataURL": "data:image/webp;base64,UklGRlYAAABXRUJQVlA4IEoAAADQAQCdASoMAAgAAsBMJagCdADznx/lAAD+yYK7uho6JHs4QD65dOzyyAKCGvh8zhsSTOPFezmtUzxjtV5Qx3dxUcVtMQMbO0AAAA==" + }, + "poppy.png": { + "width": 1200, + "height": 643, + "blurDataURL": "data:image/webp;base64,UklGRj4AAABXRUJQVlA4IDIAAADwAQCdASoMAAYAAsBMJYwCdADhZW5l4QAA/bZgBuXIh3dE7Dg83MPN8qDT0lAkJsxAAA==" + }, + "praiseofshadows.jpg": { + "width": 1000, + "height": 764, + "blurDataURL": "data:image/webp;base64,UklGRlYAAABXRUJQVlA4IEoAAACwAQCdASoMAAkAAsBMJZACdADyNFjAAP7zpBuAeOlzU2MVQBaxm0euKIht7330G6HiFIWe5p5cJjhpYkmOqti+vzEopTO30QAAAA==" + }, + "praying_hands.jpg": { + "width": 1484, + "height": 2160, + "blurDataURL": "data:image/webp;base64,UklGRjoAAABXRUJQVlA4IC4AAADwAQCdASoIAAwAAsBMJYgCdAEPB+/A+AAA/m6WlvdcdtomB/AZbapPXFzZDeAA" + }, + "primarygrad.jpeg": { + "width": 937, + "height": 1280, + "blurDataURL": "data:image/webp;base64,UklGRkoAAABXRUJQVlA4ID4AAACwAQCdASoJAAwAAsBMJaQAAlE3EfwAAP7oTVSLa6ROA5r1b1FOqc7SO+wbhf+aiUXPc5UUMhNUzR/4rLkAAA==" + }, + "printemps.jpg": { + "width": 647, + "height": 500, + "blurDataURL": "data:image/webp;base64,UklGRkYAAABXRUJQVlA4IDoAAADwAQCdASoMAAkAAsBMJYwCdAEDeaPVKcAA/qNsptGEifQGxtH/3tigHhuj8+mfI6rGHmjroxIiqAAA" + }, + "prodigalson.jpg": { + "width": 1655, + "height": 2160, + "blurDataURL": "data:image/webp;base64,UklGRkgAAABXRUJQVlA4IDwAAADQAQCdASoJAAwAAsBMJZACdAEOPSfv4AD++cTi09HnQN+K5NYYrxfyPXL2zd+Kd0tM7qdVj/I5d0FAAAA=" + }, + "proust.jpeg": { + "width": 1024, + "height": 1010, + "blurDataURL": "data:image/webp;base64,UklGRm4AAABXRUJQVlA4IGIAAABwAgCdASoMAAwAAsBMJZQCdAYtVyA5YX4dTTEAAP7p9h2WvkMPgf8Vz904/+1N+rxdITNCys9xeg8qPrJMJ1Z5cznb9TePQlXcBCyIpjN8kKa/pQ53PtdaJpDt9LbpnyAAAA==" + }, + "pythagoras.jpeg": { + "width": 488, + "height": 571, + "blurDataURL": "data:image/webp;base64,UklGRmgAAABXRUJQVlA4IFwAAADQAQCdASoKAAwAAsBMJZgCdADhANo+vADOKCXwlhA7h+rScDh2GQ31AT3Efg59MbT7MeZgYijzyhNkkasJLsW9KKjdtirkjuajSsz6VVL8+ufkZin2eJRc3SeoAA==" + }, + "rain.jpg": { + "width": 2000, + "height": 1555, + "blurDataURL": "data:image/webp;base64,UklGRkAAAABXRUJQVlA4IDQAAADwAQCdASoMAAkAAsBMJYwC7AD5fUzjngAA/rI6x+iW9JPrplu6G4uBqedLJNm1/p/Ih0AA" + }, + "rainyctown.jpeg": { + "width": 1200, + "height": 1098, + "blurDataURL": "data:image/webp;base64,UklGRmYAAABXRUJQVlA4IFoAAADwAQCdASoMAAsAAsBMJQBOgCB0FoM+U1AA/s9f6tm1Nn/zsOy1X6D56mGcPMzpm2apG1EECoFvhxD7uE7HkSBUryQJ1m6MoR08uKUuvpxvKjew47GECALwAAA=" + }, + "rave.png": { + "width": 788, + "height": 1058, + "blurDataURL": "data:image/webp;base64,UklGRlwAAABXRUJQVlA4IFAAAADwAQCdASoJAAwAAsBMJbACdAELZEDQIAAA/vn014f0l6UoYQ61DBVJgLUtk+/GSCTvw9z1NlPnVPCP3WCDwWflVX/gkql+jDs2GqesnAAAAA==" + }, + "reading.jpg": { + "width": 1256, + "height": 2355, + "blurDataURL": "data:image/webp;base64,UklGRkoAAABXRUJQVlA4ID4AAADwAQCdASoGAAwAAsBMJZACdAD0oT23tAAA/un3kUBiJ1p2G37uG9sfIS5eJlAizJWd69alHC/uBJmOdtAAAA==" + }, + "redhousemonet.jpeg": { + "width": 1268, + "height": 1024, + "blurDataURL": "data:image/webp;base64,UklGRlgAAABXRUJQVlA4IEwAAAAQAgCdASoMAAoAAsBMJYgCdAEOgrVDCUGAAPfZQEB2LAcpmcCge93ADQ0Ewqy3NrQXkMNFe9OUsa31IgitgBLABRNt4KHRB3md8AAA" + }, + "redroom.jpeg": { + "width": 1020, + "height": 814, + "blurDataURL": "data:image/webp;base64,UklGRmwAAABXRUJQVlA4IGAAAABQAgCdASoMAAoAAsBMJbACdAEWUvROuzNMIAAA/a7S4wSS3QUhAx48jd+Tq6qj+dTggf5zB0kNR3e2KN1FmXiNMgzg/hv3ixX8gY2wnRvt6+ZRan6TB8/MpiST87ZGAAA=" + }, + "redstudio.jpeg": { + "width": 900, + "height": 741, + "blurDataURL": "data:image/webp;base64,UklGRmwAAABXRUJQVlA4IGAAAADQAQCdASoMAAoAAsBMJbACdLoAAmb1FAD9U6vpb9wRAoWQ616xdxvOX8y+nmbTZhzLjJdkK73mkmGZd0HXThynxLA6wUmi7AIH/ui+xWNS/+CETIPLrq5Jp8tKGt4AAAA=" + }, + "redtree.jpeg": { + "width": 1200, + "height": 847, + "blurDataURL": "data:image/webp;base64,UklGRkoAAABXRUJQVlA4ID4AAADQAQCdASoMAAgAAsBMJbACdAEfXBe0AAD+z2UoFlR9ZPicR1ZiYKu9KGwaQ15Ht08XewjCKUxRMbckJfAAAA==" + }, + "regulus.jpeg": { + "width": 1536, + "height": 1122, + "blurDataURL": "data:image/webp;base64,UklGRlAAAABXRUJQVlA4IEQAAADwAQCdASoMAAkAAsBMJYgCdAEIjEa6vAAA/sqSf8vE+lIKpGuHCOcKGV6duNgzIIQ9v5G8uzIG4eODQKPG6yxgSAAAAA==" + }, + "sainttropez.jpeg": { + "width": 1200, + "height": 954, + "blurDataURL": "data:image/webp;base64,UklGRlYAAABXRUJQVlA4IEoAAAAQAgCdASoMAAoAAsBMJQBOgCFsaTrSbI2AAP7uJMbfrScZh0AC8oAqe04RptOQOyQaug8D/BINI9OnrTsMQjip31THDpxHwQAAAA==" + }, + "samaritan.jpeg": { + "width": 613, + "height": 767, + "blurDataURL": "data:image/webp;base64,UklGRlwAAABXRUJQVlA4IFAAAAAQAgCdASoKAAwAAsBMJagCdADcVxqKcBAAAPwpdNTF17NsJd3cXj5x8eSVYJFpavGJKHTgGLaOzGjlPxpvLSS2bQJTAievfp7jDgylfNEAAA==" + }, + "scream.jpg": { + "width": 2000, + "height": 2482, + "blurDataURL": "data:image/webp;base64,UklGRkgAAABXRUJQVlA4IDwAAADwAQCdASoKAAwAAsBMJYgCdAEQN3jBRYAA/h199ZfRU4MYmdG1jB5aT4TWpEL61HLk0hvetASTGg6EAAA=" + }, + "seacliff.jpg": { + "width": 2000, + "height": 1430, + "blurDataURL": "data:image/webp;base64,UklGRkAAAABXRUJQVlA4IDQAAADQAQCdASoMAAkAAsBMJQBdgCKe58X4wAD+sUztq258aUlCA8sqKS11RbbBu7ATKYDMkAAA" + }, + "seinesunflowers.jpg": { + "width": 1598, + "height": 2048, + "blurDataURL": "data:image/webp;base64,UklGRlAAAABXRUJQVlA4IEQAAADwAQCdASoJAAwAAsBMJZQCsAELKa6re0AA/eOPnf1kcLeC+P1j0ItuH+S1sj80RXPDr78HBpRhdDGfyBLAdDUUdzgAAA==" + }, + "sesshu.jpg": { + "width": 1325, + "height": 2048, + "blurDataURL": "data:image/webp;base64,UklGRkQAAABXRUJQVlA4IDgAAADwAQCdASoIAAwAAsBMJQBOgB5wbdEoAAAA/tO07jX5HHiyhlkMNNcpKzP1wqkPLM4V7KFqCcgAAA==" + }, + "sf_alphabets.jpeg": { + "width": 1200, + "height": 1931, + "blurDataURL": "data:image/webp;base64,UklGRj4AAABXRUJQVlA4IDIAAACwAQCdASoHAAwAAsBMJZwAAtxfE3dAAP7v+ou+gV1759+s5GPSu/kLvzsJUBsoHgAAAA==" + }, + "sf.jpeg": { + "width": 4032, + "height": 3024, + "blurDataURL": "data:image/webp;base64,UklGRkAAAABXRUJQVlA4IDQAAADQAQCdASoMAAkAAsBMJYwCdAEJ1oDlOAD+Wy/s7AHQ7vOJxvUBwsNh6cZXCxuCd0RfAAAA" + }, + "sfchinatown.jpeg": { + "width": 1200, + "height": 900, + "blurDataURL": "data:image/webp;base64,UklGRlQAAABXRUJQVlA4IEgAAADwAQCdASoMAAkAAsBMJYgCdADhcnWIqaAA/XXOrTC+ubMTqOlKjzqsE19C/6g8sMaGYqayYyXarweQIGiLqXZ7vctsUj7r0AA=" + }, + "sfgatefog.jpg": { + "width": 1200, + "height": 780, + "blurDataURL": "data:image/webp;base64,UklGRkYAAABXRUJQVlA4IDoAAADQAQCdASoMAAgAAsBMJQBOgCHcMEI+AAD+6rcnnZgPG0pGgS6nFao5E37NTsNfWQ3QN/xw8paBheAA" + }, + "sketchheads.jpeg": { + "width": 2002, + "height": 1119, + "blurDataURL": "data:image/webp;base64,UklGRlQAAABXRUJQVlA4IEgAAAAwAgCdASoMAAcAAsBMJbACdEf/gfjDgDXMcAD93+rprfMedS1abqsIvT89KlkF7H+EUxK6xD5pb+tyrHWvFHpwWJid/A1gAAA=" + }, + "skull.jpg": { + "width": 1629, + "height": 2160, + "blurDataURL": "data:image/webp;base64,UklGRlgAAABXRUJQVlA4IEwAAAAQAgCdASoJAAwAAsBMJYgCdAEUpP24IbMAAP7tK5OWLcbd46lnX7gJz/rJtPKvjzJsaMtG1E52w6t1CYfkJx+juHFzj1xiG4QrIAAA" + }, + "somethingwonderful.png": { + "width": 1606, + "height": 1039, + "blurDataURL": "data:image/webp;base64,UklGRkgAAABXRUJQVlA4IDwAAAAQAgCdASoMAAgAAsBMJZQCsAEf/vnJxqIAAP7kUxb5yb55aq5tyN/WV2/aJDu+OyGLSlJDSh6MZhgAAAA=" + }, + "stilllife.jpeg": { + "width": 1200, + "height": 950, + "blurDataURL": "data:image/webp;base64,UklGRlIAAABXRUJQVlA4IEYAAADQAQCdASoMAAkAAsBMJagCdAEDGzrUAAD+64u8hfUdxHqe7mTJInOOptrXfx2L7JpZRVIi9FIb3aFzsMInViY96vxCAAAA" + }, + "stillness.jpeg": { + "width": 1200, + "height": 935, + "blurDataURL": "data:image/webp;base64,UklGRkIAAABXRUJQVlA4IDYAAACwAQCdASoMAAkAAsBMJZQCdADc3E4cAOIGfoiDRJiu+lCDT6lzlK6wk8kDPmPjWUKxSZn8AAA=" + }, + "stormysea.jpeg": { + "width": 1063, + "height": 1471, + "blurDataURL": "data:image/webp;base64,UklGRlAAAABXRUJQVlA4IEQAAADQAQCdASoJAAwAAsBMJYgCdAEPCG16AAD+tuZ/GCs5I64/LVVMyqT70D76oi5BvrKC0BZg/sC6aTiApSKBsmhBTGgAAA==" + }, + "sunflower.jpg": { + "width": 2024, + "height": 2531, + "blurDataURL": "data:image/webp;base64,UklGRmAAAABXRUJQVlA4IFQAAADQAQCdASoKAAwAAsBMJbACdADc71nYAAD+4c8MwWxyAD7qbE2ajdpYwmGVQInavtMV7muPM4tf6YNaPaAO7+Wf2rnAMOKD8eNMwHMqq57WkNQAAAA=" + }, + "sunset1900.jpg": { + "width": 1603, + "height": 1188, + "blurDataURL": "data:image/webp;base64,UklGRlAAAABXRUJQVlA4IEQAAADQAQCdASoMAAkAAsBMJbACdACynmjjgADgy7GewwHzOeecEV1JGHsoB7g/TEX/BySdgLxpK7/ievkP919/JchPagAAAA==" + }, + "surgery.jpeg": { + "width": 1080, + "height": 810, + "blurDataURL": "data:image/webp;base64,UklGRmIAAABXRUJQVlA4IFYAAADwAQCdASoMAAkAAsBMJagCdAD0OwY5vcAA/gc4edATHQSJjbNaGmU7by/G5zFjOgRsRDxxm/a6XtQYBNJk023ZT6UdUN9hbyMhsTJl7xdwgbxPBsAAAA==" + }, + "swift.jpeg": { + "width": 3840, + "height": 2160, + "blurDataURL": "data:image/webp;base64,UklGRmAAAABXRUJQVlA4IFQAAAAQAgCdASoMAAcAAsBMJQBOiP/wPqaIcgAAAP71XzdR3DUTxPVjq/W/7tsYFteLCb3OUtyPOrf2W1QWR2MEUKW7/DxCGt6HnCKyd1vdN1Ib/vcAAAA=" + }, + "sz2.jpg": { + "width": 2000, + "height": 2666, + "blurDataURL": "data:image/webp;base64,UklGRlYAAABXRUJQVlA4IEoAAAAQAgCdASoJAAwAAsBMJYgCdAD5j19OsQAAAP4Aegng2WtEMVk+ZkMbU8yG6XpzDPEz7doBY55A3ztDeP6WskpXNYa1mVOWZuy8AA==" + }, + "szday1.jpg": { + "width": 2000, + "height": 1499, + "blurDataURL": "data:image/webp;base64,UklGRmAAAABXRUJQVlA4IFQAAADwAQCdASoMAAkAAsBMJbACdAEO0j7MoAAA/pvaoFmBXLlAZpEodsz753SixDNjNOe+0pVa0E0ua+UFfJQy0XZtzVamjuuu2D+EvBGXFTo3e4MpAAA=" + }, + "teenageengineering.jpeg": { + "width": 1024, + "height": 760, + "blurDataURL": "data:image/webp;base64,UklGRkoAAABXRUJQVlA4ID4AAAAQAgCdASoMAAkAAsBMJZQCdH8AE72YAqkAAP7039ZUBZCaOu6StPYV8DqWcBDBWetuL43bBR3zCqCh5+OAAA==" + }, + "tesla2022.jpg": { + "width": 1942, + "height": 2588, + "blurDataURL": "data:image/webp;base64,UklGRmQAAABXRUJQVlA4IFgAAAAQAgCdASoJAAwAAsBMJbACdEf/gbfb44IAAP5bq84VXwE9Tvy0Uz8nRt/pPECXMK0LdtOrdg0xLx2/xT+mMdxkaFi6Qnl41XnVf8t8QSB+4NzH4B+RAAAA" + }, + "thepond.jpeg": { + "width": 1536, + "height": 1157, + "blurDataURL": "data:image/webp;base64,UklGRkQAAABXRUJQVlA4IDgAAADwAQCdASoMAAkAAsBMJZQCdAEO/kLrIAAA/uIPcnJlGascXiOHCpV+uWJ5IIZ7ogdLDPaM74gAAA==" + }, + "thesun.png": { + "width": 1181, + "height": 695, + "blurDataURL": "data:image/webp;base64,UklGRm4AAABXRUJQVlA4WAoAAAAQAAAACwAABgAAQUxQSBMAAAABD9D/iAgICQgP/F+r2RDR/0wWAFZQOCA0AAAA0AEAnQEqDAAHAALATCUAToAinmBRnAAA/gjNYgCRN7ad6mdVKjGJzBk3JpGQGYZvrogAAA==" + }, + "tooth.jpg": { + "width": 1170, + "height": 763, + "blurDataURL": "data:image/webp;base64,UklGRkoAAABXRUJQVlA4ID4AAADwAQCdASoMAAgAAsBMJZQCsAEUpNja7VAA/vbhqzsBe4gx4ExERUFHgjpbH+JbDGGCTraidl8Gwx9o0LcAAA==" + }, + "toronto.jpeg": { + "width": 1536, + "height": 2048, + "blurDataURL": "data:image/webp;base64,UklGRlQAAABXRUJQVlA4IEgAAAAQAgCdASoJAAwAAsBMJQBOgCLv2Zap48QAAPk+ZeQD0gCi6jhqawnZdMvoS+j+fXGzwQZ5FSkkDVhsCwihl4TqpBrRrZeAAAA=" + }, + "torontopic.jpeg": { + "width": 907, + "height": 907, + "blurDataURL": "data:image/webp;base64,UklGRmIAAABXRUJQVlA4IFYAAAAQAgCdASoMAAwAAsBMJZgCdADdsK6asHQAAP7rMxVYGvrHunYE9LYaVR5vPU/2bCZMy+J+NFltnGBxjoJnnlU9gdHkS3cMt+9lC+D9edWy03FVzEAAAA==" + }, + "transamerica.jpeg": { + "width": 853, + "height": 1280, + "blurDataURL": "data:image/webp;base64,UklGRkwAAABXRUJQVlA4IEAAAAAQAgCdASoIAAwAAsBMJZwCdAEfhysYbf3AAP7v5WPnGhH4gti4MuPqbD0cXfa/bsmPGRTRNPEJ0uHFIOY9AAAA" + }, + "transamericabus.jpeg": { + "width": 1200, + "height": 1800, + "blurDataURL": "data:image/webp;base64,UklGRlAAAABXRUJQVlA4IEQAAADQAQCdASoIAAwAAsBMJZQCdADcR3Xx4AD+6xs22xPAWQjmjvUpIZFEzD862a5wuFix5ezH5RVRZ0JbRhhA4UsL0RAAAA==" + }, + "twday1.jpeg": { + "width": 1200, + "height": 1554, + "blurDataURL": "data:image/webp;base64,UklGRlQAAABXRUJQVlA4IEgAAAAQAgCdASoJAAwAAsBMJYgCdAEO8RAfmgAAAP75FHILyx1EH58oY9h4BL+WpUPWSVRcbdLOYQ/jYKgT3E1LpRJCRYxumw8AAAA=" + }, + "twday2.jpeg": { + "width": 1200, + "height": 1248, + "blurDataURL": "data:image/webp;base64,UklGRj4AAABXRUJQVlA4IDIAAADQAQCdASoMAAwAAsBMJZwC7AEPDeu1gAD+9JwugGOInoG4i7mraPd1msRF4dSbqjIAAA==" + }, + "twday3.jpeg": { + "width": 1200, + "height": 900, + "blurDataURL": "data:image/webp;base64,UklGRkwAAABXRUJQVlA4IEAAAAAQAgCdASoMAAkAAsBMJYwCdAEf3D7cneegAPyOjtC2S/6Rbw+vJ75n8W0BdXkXtXTsVbmztiPXxgs1gOgDaAAA" + }, + "twday4.jpeg": { + "width": 1200, + "height": 771, + "blurDataURL": "data:image/webp;base64,UklGRmYAAABXRUJQVlA4IFoAAADQAQCdASoMAAgAAsBMJagCdAEJS1PrAAD+7vOLH85jp8ixBVYRYuNeD8PF2unQbhfC+BmK7pXtclmMzZoK6IXQigTn9ndoiuYUQ5ZwiksoCK6oU5rMjRpwAAA=" + }, + "twday5.jpeg": { + "width": 1200, + "height": 1405, + "blurDataURL": "data:image/webp;base64,UklGRlQAAABXRUJQVlA4IEgAAADwAQCdASoKAAwAAsBMJYwCdAEO9dvEHQAA/vnW1f/iarpBBSobHaDq6pUs+GLkKPL6i9OXodONvSg7si3G+e0Nu9/jJxaAAAA=" + }, + "twday6.jpeg": { + "width": 2000, + "height": 1325, + "blurDataURL": "data:image/webp;base64,UklGRmAAAABXRUJQVlA4IFQAAABQAgCdASoMAAgAAsBMJbACdAYs3uKVx7vUzgAA/vGn+0Gy52Dtw2WPBBR/+YAfvAtBmg0A9nBxeivdEBUNpijV2B/nD11HB/zgGU084m2HhdOOAAA=" + }, + "twomen.jpg": { + "width": 2000, + "height": 1601, + "blurDataURL": "data:image/webp;base64,UklGRlQAAABXRUJQVlA4IEgAAAAQAgCdASoMAAoAAsBMJYgCdAEQE5XON+2gAP7voqxiTkI8vbhN+wWL4UBcVy/18Pzs9HKYN8sPJnrSlVjBrwaA6t8YHjOYQAA=" + }, + "ucsf.jpeg": { + "width": 1280, + "height": 960, + "blurDataURL": "data:image/webp;base64,UklGRmYAAABXRUJQVlA4IFoAAADwAQCdASoMAAkAAsBMJaACdAEfblTb7XQA/YvkkU1/yFxOdAQm2zcFkzuHaLjmkdLAO7ANjYycFNSIiTpugEIBJw0hREApi/+BvAXeE7D/krayGML7JEkQKAA=" + }, + "veronese.jpeg": { + "width": 2000, + "height": 1600, + "blurDataURL": "data:image/webp;base64,UklGRmgAAABXRUJQVlA4IFwAAAAQAgCdASoMAAoAAsBMJYgCdAErP2DoZwAAAPw66kfJz7WbIRTbm0vWQ9Yxo4i6X39djkE3v2u3PWnaP66IU9JVHH3dnIxSm03tF9/hvAgJi2DzetOZSE30LAAAAA==" + }, + "void.jpeg": { + "width": 660, + "height": 1012, + "blurDataURL": "data:image/webp;base64,UklGRlQAAABXRUJQVlA4IEgAAADQAQCdASoIAAwAAsBMJaQAAudbBaS0AAD+inVMCXa+00YtshWS8y3MNk4imGr+wWVgFkdpaxRdV9BTX3aiaI56use7gPgAAAA=" + }, + "volunteerggp.jpeg": { + "width": 1280, + "height": 960, + "blurDataURL": "data:image/webp;base64,UklGRlgAAABXRUJQVlA4IEwAAACwAQCdASoMAAkAAsBMJYwCdADzVMtAAP6tcKh4p8q0B67ZwZ0GtBkUfUWHFVk4MRTwfkzlelGOfBfbpWMQ95659k0IQlQ5VLK0AAAA" + }, + "wave.jpeg": { + "width": 2000, + "height": 1368, + "blurDataURL": "data:image/webp;base64,UklGRlAAAABXRUJQVlA4IEQAAAAQAgCdASoMAAgAAsBMJYwCdAEPSVXQ3lQAAP7HZblrLQNIVw1MRIfrwXwl+aXvVieSI7TlSoZanWrmubAiGeZpFAAAAA==" + }, + "wave.jpg": { + "width": 2000, + "height": 1230, + "blurDataURL": "data:image/webp;base64,UklGRlQAAABXRUJQVlA4IEgAAAAwAgCdASoMAAcAAsBMJQBdgMWR5er862ufAAD+wpvBvPvzGN7Su8jNC8yRbBjrVCXM0AVYF98JDFyPHOaZhkACQCO7TmyAAAA=" + }, + "wavebygustave.jpeg": { + "width": 1280, + "height": 1004, + "blurDataURL": "data:image/webp;base64,UklGRlQAAABXRUJQVlA4IEgAAADQAQCdASoMAAkAAsBMJZQAAq9dP1JtAAD+BK1PrUfEfCyawcAYIPe4GB4NM+Y+IO4ZH5P1UKBXbMlTp17dQsShD6gTP0uAAAA=" + }, + "wavesbyclaude.jpg": { + "width": 1000, + "height": 728, + "blurDataURL": "data:image/webp;base64,UklGRkQAAABXRUJQVlA4IDgAAACwAQCdASoMAAkAAsBMJYgCdADV1UoAAP3PKBcPREaGFPIzhqpFEmqRHgjd8F2Ia5irNn5CIcAAAA==" + }, + "waveseattle.jpeg": { + "width": 960, + "height": 1280, + "blurDataURL": "data:image/webp;base64,UklGRlQAAABXRUJQVlA4IEgAAACwAQCdASoJAAwAAsBMJZACdADyM+QAAPa9mGCVmp9cBM8631TFlYgnjbLP9mBPDBoZug2D2lcdL2gfyde7sB2OY2o5nubAAAA=" + }, + "weppr.jpeg": { + "width": 960, + "height": 1280, + "blurDataURL": "data:image/webp;base64,UklGRm4AAABXRUJQVlA4IGIAAAAwAgCdASoJAAwAAsBMJbACdAYuluJKbsb8AAD9+JedCwirvIa/zyvaeJbFQMjtAt/iLTVFl/5Bs+LQzT5MvDxn/iYg19g2JHzLZp7qJHnGAtqgi3Opr+ArwtMJkHyPG6AAAA==" + }, + "wesley.jpeg": { + "width": 684, + "height": 912, + "blurDataURL": "data:image/webp;base64,UklGRlQAAABXRUJQVlA4IEgAAADwAQCdASoJAAwAAsBMJQBOgCKd3puepQAA9ke6ITondJe1CAQiZOoXv2SAMCQF4N26PG9424D4oOWfIznJv3EfpeWmwDhPAAA=" + }, + "whiteonwhite.png": { + "width": 1200, + "height": 1200, + "blurDataURL": "data:image/webp;base64,UklGRjQAAABXRUJQVlA4ICgAAADQAQCdASoMAAwAAsBMJYwCdAEPDq+PAAD+89hg4re9oA2oPizVtAAA" + }, + "whitepainting.jpeg": { + "width": 2000, + "height": 1491, + "blurDataURL": "data:image/webp;base64,UklGRigAAABXRUJQVlA4IBwAAAAwAQCdASoMAAkABABMJZwAA3AA/vLfoz+iBwAA" + }, + "window.jpg": { + "width": 498, + "height": 600, + "blurDataURL": "data:image/webp;base64,UklGRloAAABXRUJQVlA4IE4AAADwAQCdASoKAAwAAsBMJbACdAEegEX0KYAAzfIAPGnHbt9yQo0k0KkRlhzjwur01X0KkcPI4/qQ8InwmFJ+YxmGJy2wzm7rai5cFw1WAAA=" + }, + "windrises.png": { + "width": 1200, + "height": 612, + "blurDataURL": "data:image/webp;base64,UklGRkoAAABXRUJQVlA4ID4AAADwAQCdASoMAAYAAsBMJagCdADcpxju9AAA/pg0XL2+zbdG3/XYUdXtzxrPQZpGzCoE9csJTnA6r940BugAAA==" + }, + "womanwriting.png": { + "width": 603, + "height": 456, + "blurDataURL": "data:image/webp;base64,UklGRlAAAABXRUJQVlA4IEQAAADwAQCdASoMAAkAAsBMJaACdADhWAx3EAAA+/yBdU0PbXE6Qw8FxoU5KAwl2O3qKGJjecodal7rDCKSAF/lPS+w+PAAAA==" + }, + "x100s.jpeg": { + "width": 717, + "height": 635, + "blurDataURL": "data:image/webp;base64,UklGRmQAAABXRUJQVlA4IFgAAAAwAgCdASoMAAsAAsBMJYwCdAYuHk0B0zmUIAD+3b0t+8ohRVqWhMoMLUtlcUD1UVzZXzKKY897GreCuVcKI7e9A72Xn5RYCdRAKVI0ZICeKU+QU0JteQAA" + }, + "zayn.jpeg": { + "width": 1200, + "height": 1200, + "blurDataURL": "data:image/webp;base64,UklGRlgAAABXRUJQVlA4IEwAAADQAQCdASoMAAwAAsBMJZQAAxPBQymy4AD8aA9XrKrcfxafZNCc2L2PkEyrT/6wKdIQLnpx5S8VpvrOEVhz6BwOefzCvburz236HwAA" + } +} diff --git a/scripts/generateImageMeta.ts b/scripts/generateImageMeta.ts new file mode 100644 index 00000000..dfc99be5 --- /dev/null +++ b/scripts/generateImageMeta.ts @@ -0,0 +1,72 @@ +import "dotenv/config"; +import fs from "fs"; +import sharp from "sharp"; +import { r2ListImages, r2GetImage } from "../utils/r2"; +import { DATA_DIR, IMAGE_META_JSON } from "../config/paths"; + +interface ImageMeta { + width: number; + height: number; + blurDataURL: string; +} + +// Incremental: only downloads images missing from the manifest and drops +// entries for images deleted from the bucket. Rerun after publishing images: +// pnpm generate:image-meta +async function main() { + const existing: Record = fs.existsSync(IMAGE_META_JSON) + ? JSON.parse(fs.readFileSync(IMAGE_META_JSON, "utf8")) + : {}; + + const filenames = (await r2ListImages()).filter( + (name) => !name.includes("/") && /\.(jpg|jpeg|png|gif|webp)$/i.test(name) + ); + + const manifest: Record = {}; + let added = 0; + + for (const name of filenames) { + if (existing[name]) { + manifest[name] = existing[name]; + continue; + } + try { + const buffer = await r2GetImage(name); + const image = sharp(buffer); + const { width, height } = await image.metadata(); + if (!width || !height) continue; + + const blur = await image + .resize(12, 12, { fit: "inside" }) + .webp({ quality: 50 }) + .toBuffer(); + + manifest[name] = { + width, + height, + blurDataURL: `data:image/webp;base64,${blur.toString("base64")}`, + }; + added++; + } catch (error) { + console.warn(`⚠️ Skipping ${name}:`, (error as Error).message); + } + } + + const removed = + Object.keys(existing).length - (Object.keys(manifest).length - added); + + fs.mkdirSync(DATA_DIR, { recursive: true }); + const sorted = Object.fromEntries( + Object.entries(manifest).sort(([a], [b]) => a.localeCompare(b)) + ); + fs.writeFileSync(IMAGE_META_JSON, JSON.stringify(sorted, null, 1) + "\n"); + + console.log( + `✓ ${Object.keys(manifest).length} images (${added} added, ${removed} removed)` + ); +} + +main().catch((error) => { + console.error(error); + process.exit(1); +}); diff --git a/utils/content/gallery.ts b/utils/content/gallery.ts index 1c1f4406..35ca15bb 100644 --- a/utils/content/gallery.ts +++ b/utils/content/gallery.ts @@ -1,11 +1,13 @@ import { POSTS_DIR } from "@/config/paths"; import { scanMarkdownDir } from "./markdown"; +import { getImageMeta, type ImageMeta } from "./imageMeta"; import { r2ListImages } from "@/utils/r2"; export interface GalleryImage { filename: string; path: string; usedInPosts: { slug: string; title: string; date: string }[]; + meta: ImageMeta | null; } // Published images live in R2; the gallery lists the bucket at build time. @@ -46,6 +48,7 @@ export async function getGalleryImages(): Promise { filename, path: `/images/${filename}`, usedInPosts: imageToPostsMap.get(filename) || [], + meta: getImageMeta(`/images/${filename}`), })); // Chronological like a photo library: oldest at the top, newest at the diff --git a/utils/content/imageMeta.ts b/utils/content/imageMeta.ts new file mode 100644 index 00000000..2a7804c2 --- /dev/null +++ b/utils/content/imageMeta.ts @@ -0,0 +1,22 @@ +import fs from "fs"; +import { IMAGE_META_JSON } from "@/config/paths"; + +export interface ImageMeta { + width: number; + height: number; + blurDataURL: string; +} + +// filename → meta, generated by scripts/generateImageMeta.ts from the R2 +// bucket. Loaded once per server process; drafts and unknown images miss. +let manifest: Record | null = null; + +export function getImageMeta(src: string): ImageMeta | null { + if (!manifest) { + manifest = fs.existsSync(IMAGE_META_JSON) + ? JSON.parse(fs.readFileSync(IMAGE_META_JSON, "utf8")) + : {}; + } + const match = src.match(/^\/images\/([^/]+)$/); + return match ? (manifest![decodeURIComponent(match[1])] ?? null) : null; +}