main dcc8d8a70a3b cached
618 files
467.5 KB
165.8k tokens
94 symbols
1 requests
Download .txt
Showing preview only (591K chars total). Download the full file or copy to clipboard to get everything.
Repository: googlecreativelab/gemini-demos
Branch: main
Commit: dcc8d8a70a3b
Files: 618
Total size: 467.5 KB

Directory structure:
gitextract_zg4slyrs/

├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── image-to-code/
│   ├── .gcloudignore
│   ├── .gitignore
│   ├── CONTRIBUTING.md
│   ├── LICENSE
│   ├── README.md
│   ├── components/
│   │   ├── CodePreview.js
│   │   ├── Header.js
│   │   └── ToggleButton.js
│   ├── jsconfig.json
│   ├── next.config.mjs
│   ├── package.json
│   ├── pages/
│   │   ├── _app.js
│   │   ├── _document.js
│   │   ├── api/
│   │   │   └── hello.js
│   │   └── index.js
│   ├── postcss.config.mjs
│   ├── styles/
│   │   └── globals.css
│   ├── tailwind.config.js
│   └── tailwind.config.mjs
├── multimodal-embeddings/
│   ├── .gcloudignore
│   ├── .npmrc
│   ├── .prettierignore
│   ├── .prettierrc
│   ├── README.md
│   ├── app.yaml
│   ├── components.json
│   ├── cors.json
│   ├── emulator-export/
│   │   ├── firebase-export-metadata.json
│   │   ├── firestore_export/
│   │   │   ├── all_namespaces/
│   │   │   │   └── all_kinds/
│   │   │   │       ├── all_namespaces_all_kinds.export_metadata
│   │   │   │       └── output-0
│   │   │   └── firestore_export.overall_export_metadata
│   │   └── storage_export/
│   │       ├── blobs/
│   │       │   ├── 0001871f-3e7a-461d-b428-92efcd1ce0fd
│   │       │   ├── 03da0657-bb18-42fd-9831-7e48c0b723cf
│   │       │   ├── 03f9df1b-0c0d-4014-8a7d-3a5eccad3faf
│   │       │   ├── 04b454df-1216-4ec1-84fb-f59afd85fe90
│   │       │   ├── 04f6c107-9611-4db9-aba8-98841ba5ae6f
│   │       │   ├── 06640a30-4d8e-4812-890e-e0374ad30f58
│   │       │   ├── 06919cbe-0678-4bfd-8cec-4d09e8e2d51b
│   │       │   ├── 0a86afce-8076-4ab8-bd65-c1eaf5ec966f
│   │       │   ├── 0b286de2-4d59-442c-933e-76f0f8e3cd0b
│   │       │   ├── 0c96fb25-144b-46eb-bdf1-74c575ddb6e9
│   │       │   ├── 0cf49b23-1d83-41c8-85d3-5c31fbf7b123
│   │       │   ├── 0d5f8ef7-dd37-432a-a0eb-80ccb822abc5
│   │       │   ├── 0d961bbe-aa5c-4d0e-9e53-dc7a7ec2b96c
│   │       │   ├── 0e7ec18e-93a5-4d40-845b-92cf98040f13
│   │       │   ├── 0ea29a34-dbcf-487a-b0e4-dd1c4028c7e2
│   │       │   ├── 0fb276ab-ad9f-4cd4-95ea-335d18ea72fe
│   │       │   ├── 0ff12c88-f320-4ef7-9356-26fbb9f3590e
│   │       │   ├── 114b11eb-de0d-441b-85d9-d70db5353156
│   │       │   ├── 125f8010-6ab0-463f-8278-5565cfc9d618
│   │       │   ├── 1514936f-769c-40b4-bfe4-4746fbc79fcd
│   │       │   ├── 16227ec4-2585-40aa-a5fd-e25e0d227b66
│   │       │   ├── 17f5cac8-e8c5-45c8-b6b3-afaa11b556ff
│   │       │   ├── 18964cd0-de01-46bd-88c3-ffad0b15b020
│   │       │   ├── 1aca1226-11c8-42f4-8137-339fe674e55c
│   │       │   ├── 1b831e3c-a1e8-4eb4-b3d6-de18b656814a
│   │       │   ├── 1ba5a0d9-2902-4a7a-8f33-862cf0abcb38
│   │       │   ├── 1bd97095-c1d4-4104-ae2a-f6c0e56dde89
│   │       │   ├── 1ccff42b-89c8-4a66-9d8c-3c7f1c307625
│   │       │   ├── 1d363b0e-cea6-4e58-aa6f-17c005c32f60
│   │       │   ├── 1e2e00f2-eb8c-432d-91a9-1f49c9bb2087
│   │       │   ├── 1e72b424-5c06-42c0-99eb-140545880ccb
│   │       │   ├── 1e859368-8d5b-4ecc-b30f-116ec3377f39
│   │       │   ├── 1f67aea5-0f3e-4b12-9554-aae3a84d5354
│   │       │   ├── 1fb32b8f-72d0-43ac-8955-d3804be94bc2
│   │       │   ├── 2166725e-18e6-4982-aeb7-2f4925461bf1
│   │       │   ├── 21af1f86-eb45-421d-90ff-962fc5509c16
│   │       │   ├── 2883e822-976c-4d81-9601-2df44f96bcd7
│   │       │   ├── 28a96371-1742-4e03-ae5c-ba309216af49
│   │       │   ├── 2ae61d7e-7bc1-4695-bd44-3637adbef998
│   │       │   ├── 2c938160-fe51-4222-a7d1-8220ad4ee300
│   │       │   ├── 2de6149c-40aa-471f-94a1-2dd2824724d8
│   │       │   ├── 2eeccd3b-575d-4055-95d9-c5fbf26b3a8d
│   │       │   ├── 2efc3c4b-2601-4d8f-ba2b-8d84712c436e
│   │       │   ├── 2f4a0b48-dc3f-4fd4-be4d-726c56619302
│   │       │   ├── 30621326-86e9-4f15-b5ea-6eaad59947df
│   │       │   ├── 30d12518-b643-48cf-8608-7aa9771fed14
│   │       │   ├── 31500630-b5a2-4092-86b1-5f2565716d86
│   │       │   ├── 31719f53-507c-4a3f-8b29-0be61178f3e7
│   │       │   ├── 354b878a-20c1-4b79-8a41-2b96e63eedaf
│   │       │   ├── 362a4319-eac2-4157-82f8-4cc5624ab0ee
│   │       │   ├── 36a45009-4146-4860-ab0f-2d41d6e1b8d2
│   │       │   ├── 36b5a479-0181-4f1b-98f4-86a64d4e1191
│   │       │   ├── 37be70be-0250-4281-9532-401a7bf29f41
│   │       │   ├── 3954ab46-6a25-4bb6-ab32-f0d55c546cb2
│   │       │   ├── 3b33aa14-5d04-43bd-9ef6-e30b8861d7db
│   │       │   ├── 3b688492-90d3-4d82-b6fc-499bc09e56eb
│   │       │   ├── 3dccd76d-64a7-47c2-a9b5-eea9b2efa12f
│   │       │   ├── 3e64b976-d7b3-4356-92d7-0aeb15f45fd5
│   │       │   ├── 3e966f04-2910-4104-8f1e-412bf33917c0
│   │       │   ├── 412215ae-10af-413a-9f75-861667cf12fe
│   │       │   ├── 41e09631-0791-4051-96ce-4e18d05f2be9
│   │       │   ├── 4223ad2c-c8fc-4f31-8454-284312b22905
│   │       │   ├── 42694520-432b-4928-adce-006db533f6f8
│   │       │   ├── 4418a01d-24ec-4e4b-b29a-e0689b395969
│   │       │   ├── 45131a81-db3a-4f9b-9330-5e2eb2b3eb44
│   │       │   ├── 454a16c7-6ec4-4c29-838f-6d235d729c0d
│   │       │   ├── 45b0127e-7f92-437f-97e4-f96b50ca60f6
│   │       │   ├── 460d8563-7063-413d-aa9c-d50fb8c9a0a3
│   │       │   ├── 464ea502-b1a7-47a1-af48-7b4296b13896
│   │       │   ├── 477f1478-d154-44c1-9b3e-f7bc08b81b1b
│   │       │   ├── 47a173ba-dd3f-4e02-8409-e46bf5c831ca
│   │       │   ├── 47eb894d-5a60-4c64-b22a-f496f63a869e
│   │       │   ├── 487cbb33-22c6-41f6-8e6e-4125927e2f20
│   │       │   ├── 495964a6-f764-487d-aec8-a1c1c02d8be3
│   │       │   ├── 4ad91f5f-7c9e-40e4-9c4f-c03a22bd8b2f
│   │       │   ├── 5012b076-ef07-41c8-9da7-033e2af2f579
│   │       │   ├── 50b673c2-e1b9-4b84-bbcc-1c47cca0cace
│   │       │   ├── 530a9038-98b8-4925-b26b-f5c7776d882f
│   │       │   ├── 55e55a5c-a59a-4c7f-846a-73784ee2f25d
│   │       │   ├── 563a8d9a-0285-4496-aaba-59138c349dad
│   │       │   ├── 58852f43-76ea-4ad1-9c6a-a33c2c53ff56
│   │       │   ├── 5a3ce50b-2658-4f68-b12d-0eec92a7223a
│   │       │   ├── 5a3ecd67-d20b-405d-83f7-86ff772f6d6f
│   │       │   ├── 5b388511-e3b8-4d3f-b0bf-d085f75c7769
│   │       │   ├── 5b62fd41-e2a2-4ba6-b305-a854619a947b
│   │       │   ├── 5ef2346d-d39e-49ce-b26a-9e5069dba421
│   │       │   ├── 5fd6d66a-8bf1-4f81-b0eb-9895552a8ec4
│   │       │   ├── 61556f93-4dd2-43e5-bc4d-78cbe3809d42
│   │       │   ├── 620c1be4-e353-46d9-8dbd-c3079d5efd6e
│   │       │   ├── 62b85256-0f54-47cb-ae83-d45cd0a66030
│   │       │   ├── 64609c87-07e8-48a4-b8c2-a26210e1dd0b
│   │       │   ├── 64f13cdd-ee8c-4238-b66b-14c1baa578e3
│   │       │   ├── 65c4dee4-4429-4eae-9250-2e969f3c190a
│   │       │   ├── 66569702-2074-4047-a794-4f11e3b285f2
│   │       │   ├── 67aaca3d-2acc-4987-8ed9-3f2fbf075f7c
│   │       │   ├── 67b6aeb1-b7d0-4402-8a60-b2f9c0c8b447
│   │       │   ├── 686d4f0b-5c28-48f4-b656-b354a13981a7
│   │       │   ├── 69657785-7299-408d-8453-8cb32f848150
│   │       │   ├── 6b6f7c8b-a5b9-4436-80a0-f128c1eb3bcf
│   │       │   ├── 6d8f5f9c-fef6-4179-ba05-79e361503c7a
│   │       │   ├── 70772163-4c3b-493a-ad04-87b67ee35d71
│   │       │   ├── 70c43a85-254c-49b1-bf14-d13687913f2d
│   │       │   ├── 70db2153-5bbf-42f6-91bc-f3cb4249dc01
│   │       │   ├── 70ef85a5-fb7a-41ff-ac02-0d00927d0274
│   │       │   ├── 70fc8a82-bfeb-4bb7-bb95-2a654168ead1
│   │       │   ├── 71894824-0cd9-4acf-9178-abba58090e42
│   │       │   ├── 721bdd57-7850-42e4-9fb9-747525b187c8
│   │       │   ├── 7706c66e-3fd9-45eb-9df5-8308b84dd194
│   │       │   ├── 7846c694-8e7a-47dd-b8b8-a2448285dcc0
│   │       │   ├── 78a3c767-265f-419d-bb3f-c3eba6e22017
│   │       │   ├── 78dd9bfd-a0ca-4ac9-9473-45d0d051fb1e
│   │       │   ├── 799fcdd0-1054-4c53-a218-48cb8f3ed044
│   │       │   ├── 7a5a7379-d29b-412b-9a50-565e171ab712
│   │       │   ├── 7c12f79f-d474-446f-b5fe-f669e60f8227
│   │       │   ├── 7c4a2540-75b9-4e37-b4b1-a6d7f62830cb
│   │       │   ├── 7c689600-cf26-4953-8be5-ae58faa5cad0
│   │       │   ├── 7d321a59-d6c9-433e-bfcb-2ee10dcd2745
│   │       │   ├── 7ff005e0-3f17-423f-9a04-1d762447eb07
│   │       │   ├── 8278f4eb-708a-4054-b408-9b4a2a8d6b7a
│   │       │   ├── 828f697d-fd40-470e-8326-8a40dccf9096
│   │       │   ├── 832cacff-0ed7-4685-a383-a0d94e6a366e
│   │       │   ├── 84307d32-0903-4a1c-8599-9d3938995da6
│   │       │   ├── 84491769-76dd-4667-825d-95156d99ba3f
│   │       │   ├── 848c006e-a50c-4d24-9e96-f9b12ab5f66b
│   │       │   ├── 8628a1cb-e588-483c-b00f-ba449d2c27b1
│   │       │   ├── 87039e64-1d6f-4f28-92e5-322ae686133d
│   │       │   ├── 884b9432-28fb-465b-a826-35daec2593d7
│   │       │   ├── 8bc987b7-d22f-4331-8de5-7149d9b73361
│   │       │   ├── 8cd45f77-4225-412e-9c61-bb90285356c5
│   │       │   ├── 8e0d391e-c779-4a34-a8de-f6abccc701ab
│   │       │   ├── 8f014805-5f51-439d-9447-b686abf889fa
│   │       │   ├── 91006bcb-22a2-480d-83ba-5393a41c6558
│   │       │   ├── 91bbc49d-9748-4638-a75c-573f23ff7c5e
│   │       │   ├── 92e62795-a847-46bc-a983-8f2f975f4ac3
│   │       │   ├── 92e944f9-bcfa-4e3c-95ad-2d6619cc377b
│   │       │   ├── 934f914b-21f8-45e6-812c-ac29926508c3
│   │       │   ├── 96d4fbff-3d58-4cef-b6f0-393751f39a80
│   │       │   ├── 98ca7091-441b-471c-a3cc-7a7e94826534
│   │       │   ├── 991c80af-1b3f-454c-8716-c45ed7023269
│   │       │   ├── 9ab4a412-9175-410b-8281-65999c677106
│   │       │   ├── 9d4fbb56-2a44-4866-9489-03d9312fdd55
│   │       │   ├── 9edac21b-4d29-4a5a-a5cd-5aac086224df
│   │       │   ├── a0eb55dd-239b-4908-8acd-a89c2bf639c2
│   │       │   ├── a1539350-b2f4-4c95-a3d4-6b85d493f2b1
│   │       │   ├── a1daa863-1f24-4f91-964b-55e133f8c36d
│   │       │   ├── a1f4669b-2187-4feb-92dd-1a321a0d3023
│   │       │   ├── a3f79d63-f265-4971-997b-4e64a25f806f
│   │       │   ├── a3fcb879-7be9-4a4f-8099-d237cf97418f
│   │       │   ├── a764ed81-66b1-4d49-9013-b75c1c6ba383
│   │       │   ├── a7855fa7-b5be-4ac3-a4e5-d4893ad338f6
│   │       │   ├── a8c3e42a-8ebd-490f-b1da-d9046b7aa4ed
│   │       │   ├── a99818ab-a299-4e87-9662-265cbe8e1160
│   │       │   ├── ab183f61-767e-4020-bae5-928ca15abd23
│   │       │   ├── ad7b8aa9-f8f7-43d5-96cf-b222b5e57318
│   │       │   ├── ad8f7da2-4988-40ec-9042-85c3f4ca6404
│   │       │   ├── ae4d2687-9c0e-49b2-9401-271fb42e62e1
│   │       │   ├── b17a8866-876a-4d32-8b84-5e19b8bcc5f4
│   │       │   ├── b1d4c0bb-0181-45cc-a1d7-7f2832b49b6d
│   │       │   ├── b2e7394a-32cb-45ca-abea-73d0b2df628f
│   │       │   ├── b499dd2d-cd18-488c-9927-c2f1f786a762
│   │       │   ├── b7ab64f1-76c2-459d-b6a9-cc7d52e689d1
│   │       │   ├── b8008ef2-2fb5-40ed-8fef-211863635165
│   │       │   ├── b8f8d67b-85c4-4734-a413-7e1c5b1a7a9d
│   │       │   ├── ba5f66c2-65e8-4ecc-829d-28dd2ddf625a
│   │       │   ├── ba7eb319-928d-45ba-bce3-4edd8f3955bd
│   │       │   ├── ba9ba128-b58e-47c1-97ee-4b2f52524cdf
│   │       │   ├── bc45b1d1-ec5d-4b77-94d9-2ba6f83c9397
│   │       │   ├── c20333af-a455-4b2f-baf0-f852e684543b
│   │       │   ├── c27f43ab-cdee-4ea2-b993-85e04502d1e7
│   │       │   ├── c32a1d25-a547-46b5-9d66-b2cce1b62c6c
│   │       │   ├── c340aa08-9ea1-4b1e-9155-0ffc9c35f7d4
│   │       │   ├── c4005e1a-a820-4fc6-b4d7-36de986a6508
│   │       │   ├── c65e9606-9e1a-4aa3-a546-fd07eaba08a3
│   │       │   ├── ca44d9db-7998-4cf3-bc92-aa69d366900a
│   │       │   ├── cb8c98b6-f0f0-48d5-be12-e27ab75dbc89
│   │       │   ├── cc2b2031-0170-43c4-bf8a-7a7267d38a96
│   │       │   ├── cea1146f-f63d-421e-b778-5ed8f39c1304
│   │       │   ├── cf2d1050-806b-4d32-9a18-083649e9142c
│   │       │   ├── d0920669-7709-4aab-97df-dd5e6c6719f9
│   │       │   ├── d12b9178-857a-4567-a7ef-3660f81813b9
│   │       │   ├── d21827e3-c794-4fa8-8cbc-6b46bfff25d2
│   │       │   ├── d223daa7-afa8-4108-8965-2ac9c45d9bab
│   │       │   ├── d2efd3f2-cf9a-4d75-89ad-3c8d873a1ff1
│   │       │   ├── d35aeaf2-da34-4207-a602-a9b236d62fca
│   │       │   ├── d4bb491a-51aa-48ac-a946-faf94bdb98f3
│   │       │   ├── d51f715d-c5b7-485b-8718-7112b700252b
│   │       │   ├── d62ac9e8-14ff-4a51-a65c-13b0be4a382d
│   │       │   ├── d7400d59-6e7d-438d-a433-7e248a89d7ef
│   │       │   ├── d8efb7b3-3d17-47f7-b46a-d4d5933d1c6c
│   │       │   ├── daff4d68-e7ba-4876-a389-f6379792db29
│   │       │   ├── db685a34-6e9f-480c-998f-74d9dfa33ded
│   │       │   ├── dd83acba-c2c2-471f-96e6-02a7564ccdf2
│   │       │   ├── ddd82ca8-addd-461f-a409-10ba4f2384f2
│   │       │   ├── de2c3001-b81a-43cb-bc8d-430cc5f31ecd
│   │       │   ├── df252df6-207a-4b5c-b429-517a9188442a
│   │       │   ├── dfc781e1-8984-4900-9fd9-4d67a8d06165
│   │       │   ├── e1a86ae0-794e-48c7-a521-6184fe47baf7
│   │       │   ├── e24996a9-4e92-47da-b164-afe68646772e
│   │       │   ├── e4a1e47d-a111-4f8f-aa81-fa8305cacc02
│   │       │   ├── e5411091-9430-440b-b167-06666aaa6282
│   │       │   ├── e68b7951-4436-4b51-9352-b8478a7016a2
│   │       │   ├── e745dd10-3a36-4c3c-9f6d-a0df1af88db5
│   │       │   ├── e7f85be0-c8af-4658-ae23-37f0fec2d3e8
│   │       │   ├── e96f6208-3db5-4e59-92fd-13bcc17a219f
│   │       │   ├── ec636ad8-59af-4d37-899d-7e38b6820142
│   │       │   ├── eed1b24c-8d17-474c-a8c5-abbb1253f3ac
│   │       │   ├── efcf28ed-64c0-4fb0-889e-adb9f7826bd2
│   │       │   ├── f0c05fe7-cce3-4ae7-81a7-04eb885a858d
│   │       │   ├── f1ee8d78-1966-45ac-899b-0fb7fdbef35c
│   │       │   ├── f1fdb37a-b154-4165-9964-31831b40be8b
│   │       │   ├── f45cae23-5852-45c2-a36d-923768351808
│   │       │   ├── f4c6688d-2e98-47bb-9880-d8beb1569036
│   │       │   ├── f511acae-1e9a-4fea-a426-acb3fd6aa5bd
│   │       │   ├── f699b6ac-7812-4564-adb5-8260b225f33b
│   │       │   ├── f77367b4-cad3-4d6a-961a-f4f4d6e24817
│   │       │   ├── f7bae092-4e7b-40f5-adae-a5c89bd9065a
│   │       │   ├── f8c2b960-f80e-488d-8126-04fe12057048
│   │       │   ├── f9d73365-1492-4efa-aabd-b730650157d0
│   │       │   ├── faf1a8f8-0cdf-43ba-8af8-d53a2d1a060f
│   │       │   ├── fb7828b5-0a12-46a7-8c5c-6c220d116e36
│   │       │   ├── fb857ec0-d80d-4404-ba0e-1ba436305d7d
│   │       │   ├── fda16ac8-d1cf-49db-93b7-833c274cd0d2
│   │       │   ├── fe3a8d7c-3dff-489e-abca-0b515db9420c
│   │       │   ├── fe78e904-37eb-46de-9195-1264c9acc754
│   │       │   ├── ff05e63d-c45b-499f-bc6e-a507047b4f10
│   │       │   └── ffe18889-8e9a-4b8c-8a81-867a03a3c274
│   │       ├── buckets.json
│   │       └── metadata/
│   │           ├── 0001871f-3e7a-461d-b428-92efcd1ce0fd.json
│   │           ├── 03da0657-bb18-42fd-9831-7e48c0b723cf.json
│   │           ├── 03f9df1b-0c0d-4014-8a7d-3a5eccad3faf.json
│   │           ├── 04b454df-1216-4ec1-84fb-f59afd85fe90.json
│   │           ├── 04f6c107-9611-4db9-aba8-98841ba5ae6f.json
│   │           ├── 06640a30-4d8e-4812-890e-e0374ad30f58.json
│   │           ├── 06919cbe-0678-4bfd-8cec-4d09e8e2d51b.json
│   │           ├── 0a86afce-8076-4ab8-bd65-c1eaf5ec966f.json
│   │           ├── 0b286de2-4d59-442c-933e-76f0f8e3cd0b.json
│   │           ├── 0c96fb25-144b-46eb-bdf1-74c575ddb6e9.json
│   │           ├── 0cf49b23-1d83-41c8-85d3-5c31fbf7b123.json
│   │           ├── 0d5f8ef7-dd37-432a-a0eb-80ccb822abc5.json
│   │           ├── 0d961bbe-aa5c-4d0e-9e53-dc7a7ec2b96c.json
│   │           ├── 0e7ec18e-93a5-4d40-845b-92cf98040f13.json
│   │           ├── 0ea29a34-dbcf-487a-b0e4-dd1c4028c7e2.json
│   │           ├── 0fb276ab-ad9f-4cd4-95ea-335d18ea72fe.json
│   │           ├── 0ff12c88-f320-4ef7-9356-26fbb9f3590e.json
│   │           ├── 114b11eb-de0d-441b-85d9-d70db5353156.json
│   │           ├── 125f8010-6ab0-463f-8278-5565cfc9d618.json
│   │           ├── 1514936f-769c-40b4-bfe4-4746fbc79fcd.json
│   │           ├── 16227ec4-2585-40aa-a5fd-e25e0d227b66.json
│   │           ├── 17f5cac8-e8c5-45c8-b6b3-afaa11b556ff.json
│   │           ├── 18964cd0-de01-46bd-88c3-ffad0b15b020.json
│   │           ├── 1aca1226-11c8-42f4-8137-339fe674e55c.json
│   │           ├── 1b831e3c-a1e8-4eb4-b3d6-de18b656814a.json
│   │           ├── 1ba5a0d9-2902-4a7a-8f33-862cf0abcb38.json
│   │           ├── 1bd97095-c1d4-4104-ae2a-f6c0e56dde89.json
│   │           ├── 1ccff42b-89c8-4a66-9d8c-3c7f1c307625.json
│   │           ├── 1d363b0e-cea6-4e58-aa6f-17c005c32f60.json
│   │           ├── 1e2e00f2-eb8c-432d-91a9-1f49c9bb2087.json
│   │           ├── 1e72b424-5c06-42c0-99eb-140545880ccb.json
│   │           ├── 1e859368-8d5b-4ecc-b30f-116ec3377f39.json
│   │           ├── 1f67aea5-0f3e-4b12-9554-aae3a84d5354.json
│   │           ├── 1fb32b8f-72d0-43ac-8955-d3804be94bc2.json
│   │           ├── 2166725e-18e6-4982-aeb7-2f4925461bf1.json
│   │           ├── 21af1f86-eb45-421d-90ff-962fc5509c16.json
│   │           ├── 2883e822-976c-4d81-9601-2df44f96bcd7.json
│   │           ├── 28a96371-1742-4e03-ae5c-ba309216af49.json
│   │           ├── 2ae61d7e-7bc1-4695-bd44-3637adbef998.json
│   │           ├── 2c938160-fe51-4222-a7d1-8220ad4ee300.json
│   │           ├── 2de6149c-40aa-471f-94a1-2dd2824724d8.json
│   │           ├── 2eeccd3b-575d-4055-95d9-c5fbf26b3a8d.json
│   │           ├── 2efc3c4b-2601-4d8f-ba2b-8d84712c436e.json
│   │           ├── 2f4a0b48-dc3f-4fd4-be4d-726c56619302.json
│   │           ├── 30621326-86e9-4f15-b5ea-6eaad59947df.json
│   │           ├── 30d12518-b643-48cf-8608-7aa9771fed14.json
│   │           ├── 31500630-b5a2-4092-86b1-5f2565716d86.json
│   │           ├── 31719f53-507c-4a3f-8b29-0be61178f3e7.json
│   │           ├── 354b878a-20c1-4b79-8a41-2b96e63eedaf.json
│   │           ├── 362a4319-eac2-4157-82f8-4cc5624ab0ee.json
│   │           ├── 36a45009-4146-4860-ab0f-2d41d6e1b8d2.json
│   │           ├── 36b5a479-0181-4f1b-98f4-86a64d4e1191.json
│   │           ├── 37be70be-0250-4281-9532-401a7bf29f41.json
│   │           ├── 3954ab46-6a25-4bb6-ab32-f0d55c546cb2.json
│   │           ├── 3b33aa14-5d04-43bd-9ef6-e30b8861d7db.json
│   │           ├── 3b688492-90d3-4d82-b6fc-499bc09e56eb.json
│   │           ├── 3dccd76d-64a7-47c2-a9b5-eea9b2efa12f.json
│   │           ├── 3e64b976-d7b3-4356-92d7-0aeb15f45fd5.json
│   │           ├── 3e966f04-2910-4104-8f1e-412bf33917c0.json
│   │           ├── 412215ae-10af-413a-9f75-861667cf12fe.json
│   │           ├── 41e09631-0791-4051-96ce-4e18d05f2be9.json
│   │           ├── 4223ad2c-c8fc-4f31-8454-284312b22905.json
│   │           ├── 42694520-432b-4928-adce-006db533f6f8.json
│   │           ├── 4418a01d-24ec-4e4b-b29a-e0689b395969.json
│   │           ├── 45131a81-db3a-4f9b-9330-5e2eb2b3eb44.json
│   │           ├── 454a16c7-6ec4-4c29-838f-6d235d729c0d.json
│   │           ├── 45b0127e-7f92-437f-97e4-f96b50ca60f6.json
│   │           ├── 460d8563-7063-413d-aa9c-d50fb8c9a0a3.json
│   │           ├── 464ea502-b1a7-47a1-af48-7b4296b13896.json
│   │           ├── 477f1478-d154-44c1-9b3e-f7bc08b81b1b.json
│   │           ├── 47a173ba-dd3f-4e02-8409-e46bf5c831ca.json
│   │           ├── 47eb894d-5a60-4c64-b22a-f496f63a869e.json
│   │           ├── 487cbb33-22c6-41f6-8e6e-4125927e2f20.json
│   │           ├── 495964a6-f764-487d-aec8-a1c1c02d8be3.json
│   │           ├── 4ad91f5f-7c9e-40e4-9c4f-c03a22bd8b2f.json
│   │           ├── 5012b076-ef07-41c8-9da7-033e2af2f579.json
│   │           ├── 50b673c2-e1b9-4b84-bbcc-1c47cca0cace.json
│   │           ├── 530a9038-98b8-4925-b26b-f5c7776d882f.json
│   │           ├── 55e55a5c-a59a-4c7f-846a-73784ee2f25d.json
│   │           ├── 563a8d9a-0285-4496-aaba-59138c349dad.json
│   │           ├── 58852f43-76ea-4ad1-9c6a-a33c2c53ff56.json
│   │           ├── 5a3ce50b-2658-4f68-b12d-0eec92a7223a.json
│   │           ├── 5a3ecd67-d20b-405d-83f7-86ff772f6d6f.json
│   │           ├── 5b388511-e3b8-4d3f-b0bf-d085f75c7769.json
│   │           ├── 5b62fd41-e2a2-4ba6-b305-a854619a947b.json
│   │           ├── 5ef2346d-d39e-49ce-b26a-9e5069dba421.json
│   │           ├── 5fd6d66a-8bf1-4f81-b0eb-9895552a8ec4.json
│   │           ├── 61556f93-4dd2-43e5-bc4d-78cbe3809d42.json
│   │           ├── 620c1be4-e353-46d9-8dbd-c3079d5efd6e.json
│   │           ├── 62b85256-0f54-47cb-ae83-d45cd0a66030.json
│   │           ├── 64609c87-07e8-48a4-b8c2-a26210e1dd0b.json
│   │           ├── 64f13cdd-ee8c-4238-b66b-14c1baa578e3.json
│   │           ├── 65c4dee4-4429-4eae-9250-2e969f3c190a.json
│   │           ├── 66569702-2074-4047-a794-4f11e3b285f2.json
│   │           ├── 67aaca3d-2acc-4987-8ed9-3f2fbf075f7c.json
│   │           ├── 67b6aeb1-b7d0-4402-8a60-b2f9c0c8b447.json
│   │           ├── 686d4f0b-5c28-48f4-b656-b354a13981a7.json
│   │           ├── 69657785-7299-408d-8453-8cb32f848150.json
│   │           ├── 6b6f7c8b-a5b9-4436-80a0-f128c1eb3bcf.json
│   │           ├── 6d8f5f9c-fef6-4179-ba05-79e361503c7a.json
│   │           ├── 70772163-4c3b-493a-ad04-87b67ee35d71.json
│   │           ├── 70c43a85-254c-49b1-bf14-d13687913f2d.json
│   │           ├── 70db2153-5bbf-42f6-91bc-f3cb4249dc01.json
│   │           ├── 70ef85a5-fb7a-41ff-ac02-0d00927d0274.json
│   │           ├── 70fc8a82-bfeb-4bb7-bb95-2a654168ead1.json
│   │           ├── 71894824-0cd9-4acf-9178-abba58090e42.json
│   │           ├── 721bdd57-7850-42e4-9fb9-747525b187c8.json
│   │           ├── 7706c66e-3fd9-45eb-9df5-8308b84dd194.json
│   │           ├── 7846c694-8e7a-47dd-b8b8-a2448285dcc0.json
│   │           ├── 78a3c767-265f-419d-bb3f-c3eba6e22017.json
│   │           ├── 78dd9bfd-a0ca-4ac9-9473-45d0d051fb1e.json
│   │           ├── 799fcdd0-1054-4c53-a218-48cb8f3ed044.json
│   │           ├── 7a5a7379-d29b-412b-9a50-565e171ab712.json
│   │           ├── 7c12f79f-d474-446f-b5fe-f669e60f8227.json
│   │           ├── 7c4a2540-75b9-4e37-b4b1-a6d7f62830cb.json
│   │           ├── 7c689600-cf26-4953-8be5-ae58faa5cad0.json
│   │           ├── 7d321a59-d6c9-433e-bfcb-2ee10dcd2745.json
│   │           ├── 7ff005e0-3f17-423f-9a04-1d762447eb07.json
│   │           ├── 8278f4eb-708a-4054-b408-9b4a2a8d6b7a.json
│   │           ├── 828f697d-fd40-470e-8326-8a40dccf9096.json
│   │           ├── 832cacff-0ed7-4685-a383-a0d94e6a366e.json
│   │           ├── 84307d32-0903-4a1c-8599-9d3938995da6.json
│   │           ├── 84491769-76dd-4667-825d-95156d99ba3f.json
│   │           ├── 848c006e-a50c-4d24-9e96-f9b12ab5f66b.json
│   │           ├── 8628a1cb-e588-483c-b00f-ba449d2c27b1.json
│   │           ├── 87039e64-1d6f-4f28-92e5-322ae686133d.json
│   │           ├── 884b9432-28fb-465b-a826-35daec2593d7.json
│   │           ├── 8bc987b7-d22f-4331-8de5-7149d9b73361.json
│   │           ├── 8cd45f77-4225-412e-9c61-bb90285356c5.json
│   │           ├── 8e0d391e-c779-4a34-a8de-f6abccc701ab.json
│   │           ├── 8f014805-5f51-439d-9447-b686abf889fa.json
│   │           ├── 91006bcb-22a2-480d-83ba-5393a41c6558.json
│   │           ├── 91bbc49d-9748-4638-a75c-573f23ff7c5e.json
│   │           ├── 92e62795-a847-46bc-a983-8f2f975f4ac3.json
│   │           ├── 92e944f9-bcfa-4e3c-95ad-2d6619cc377b.json
│   │           ├── 934f914b-21f8-45e6-812c-ac29926508c3.json
│   │           ├── 96d4fbff-3d58-4cef-b6f0-393751f39a80.json
│   │           ├── 98ca7091-441b-471c-a3cc-7a7e94826534.json
│   │           ├── 991c80af-1b3f-454c-8716-c45ed7023269.json
│   │           ├── 9ab4a412-9175-410b-8281-65999c677106.json
│   │           ├── 9d4fbb56-2a44-4866-9489-03d9312fdd55.json
│   │           ├── 9edac21b-4d29-4a5a-a5cd-5aac086224df.json
│   │           ├── a0eb55dd-239b-4908-8acd-a89c2bf639c2.json
│   │           ├── a1539350-b2f4-4c95-a3d4-6b85d493f2b1.json
│   │           ├── a1daa863-1f24-4f91-964b-55e133f8c36d.json
│   │           ├── a1f4669b-2187-4feb-92dd-1a321a0d3023.json
│   │           ├── a3f79d63-f265-4971-997b-4e64a25f806f.json
│   │           ├── a3fcb879-7be9-4a4f-8099-d237cf97418f.json
│   │           ├── a764ed81-66b1-4d49-9013-b75c1c6ba383.json
│   │           ├── a7855fa7-b5be-4ac3-a4e5-d4893ad338f6.json
│   │           ├── a8c3e42a-8ebd-490f-b1da-d9046b7aa4ed.json
│   │           ├── a99818ab-a299-4e87-9662-265cbe8e1160.json
│   │           ├── ab183f61-767e-4020-bae5-928ca15abd23.json
│   │           ├── ad7b8aa9-f8f7-43d5-96cf-b222b5e57318.json
│   │           ├── ad8f7da2-4988-40ec-9042-85c3f4ca6404.json
│   │           ├── ae4d2687-9c0e-49b2-9401-271fb42e62e1.json
│   │           ├── b17a8866-876a-4d32-8b84-5e19b8bcc5f4.json
│   │           ├── b1d4c0bb-0181-45cc-a1d7-7f2832b49b6d.json
│   │           ├── b2e7394a-32cb-45ca-abea-73d0b2df628f.json
│   │           ├── b499dd2d-cd18-488c-9927-c2f1f786a762.json
│   │           ├── b7ab64f1-76c2-459d-b6a9-cc7d52e689d1.json
│   │           ├── b8008ef2-2fb5-40ed-8fef-211863635165.json
│   │           ├── b8f8d67b-85c4-4734-a413-7e1c5b1a7a9d.json
│   │           ├── ba5f66c2-65e8-4ecc-829d-28dd2ddf625a.json
│   │           ├── ba7eb319-928d-45ba-bce3-4edd8f3955bd.json
│   │           ├── ba9ba128-b58e-47c1-97ee-4b2f52524cdf.json
│   │           ├── bc45b1d1-ec5d-4b77-94d9-2ba6f83c9397.json
│   │           ├── c20333af-a455-4b2f-baf0-f852e684543b.json
│   │           ├── c27f43ab-cdee-4ea2-b993-85e04502d1e7.json
│   │           ├── c32a1d25-a547-46b5-9d66-b2cce1b62c6c.json
│   │           ├── c340aa08-9ea1-4b1e-9155-0ffc9c35f7d4.json
│   │           ├── c4005e1a-a820-4fc6-b4d7-36de986a6508.json
│   │           ├── c65e9606-9e1a-4aa3-a546-fd07eaba08a3.json
│   │           ├── ca44d9db-7998-4cf3-bc92-aa69d366900a.json
│   │           ├── cb8c98b6-f0f0-48d5-be12-e27ab75dbc89.json
│   │           ├── cc2b2031-0170-43c4-bf8a-7a7267d38a96.json
│   │           ├── cea1146f-f63d-421e-b778-5ed8f39c1304.json
│   │           ├── cf2d1050-806b-4d32-9a18-083649e9142c.json
│   │           ├── d0920669-7709-4aab-97df-dd5e6c6719f9.json
│   │           ├── d12b9178-857a-4567-a7ef-3660f81813b9.json
│   │           ├── d21827e3-c794-4fa8-8cbc-6b46bfff25d2.json
│   │           ├── d223daa7-afa8-4108-8965-2ac9c45d9bab.json
│   │           ├── d2efd3f2-cf9a-4d75-89ad-3c8d873a1ff1.json
│   │           ├── d35aeaf2-da34-4207-a602-a9b236d62fca.json
│   │           ├── d4bb491a-51aa-48ac-a946-faf94bdb98f3.json
│   │           ├── d51f715d-c5b7-485b-8718-7112b700252b.json
│   │           ├── d62ac9e8-14ff-4a51-a65c-13b0be4a382d.json
│   │           ├── d7400d59-6e7d-438d-a433-7e248a89d7ef.json
│   │           ├── d8efb7b3-3d17-47f7-b46a-d4d5933d1c6c.json
│   │           ├── daff4d68-e7ba-4876-a389-f6379792db29.json
│   │           ├── db685a34-6e9f-480c-998f-74d9dfa33ded.json
│   │           ├── dd83acba-c2c2-471f-96e6-02a7564ccdf2.json
│   │           ├── ddd82ca8-addd-461f-a409-10ba4f2384f2.json
│   │           ├── de2c3001-b81a-43cb-bc8d-430cc5f31ecd.json
│   │           ├── df252df6-207a-4b5c-b429-517a9188442a.json
│   │           ├── dfc781e1-8984-4900-9fd9-4d67a8d06165.json
│   │           ├── e1a86ae0-794e-48c7-a521-6184fe47baf7.json
│   │           ├── e24996a9-4e92-47da-b164-afe68646772e.json
│   │           ├── e4a1e47d-a111-4f8f-aa81-fa8305cacc02.json
│   │           ├── e5411091-9430-440b-b167-06666aaa6282.json
│   │           ├── e68b7951-4436-4b51-9352-b8478a7016a2.json
│   │           ├── e745dd10-3a36-4c3c-9f6d-a0df1af88db5.json
│   │           ├── e7f85be0-c8af-4658-ae23-37f0fec2d3e8.json
│   │           ├── e96f6208-3db5-4e59-92fd-13bcc17a219f.json
│   │           ├── ec636ad8-59af-4d37-899d-7e38b6820142.json
│   │           ├── eed1b24c-8d17-474c-a8c5-abbb1253f3ac.json
│   │           ├── efcf28ed-64c0-4fb0-889e-adb9f7826bd2.json
│   │           ├── f0c05fe7-cce3-4ae7-81a7-04eb885a858d.json
│   │           ├── f1ee8d78-1966-45ac-899b-0fb7fdbef35c.json
│   │           ├── f1fdb37a-b154-4165-9964-31831b40be8b.json
│   │           ├── f45cae23-5852-45c2-a36d-923768351808.json
│   │           ├── f4c6688d-2e98-47bb-9880-d8beb1569036.json
│   │           ├── f511acae-1e9a-4fea-a426-acb3fd6aa5bd.json
│   │           ├── f699b6ac-7812-4564-adb5-8260b225f33b.json
│   │           ├── f77367b4-cad3-4d6a-961a-f4f4d6e24817.json
│   │           ├── f7bae092-4e7b-40f5-adae-a5c89bd9065a.json
│   │           ├── f8c2b960-f80e-488d-8126-04fe12057048.json
│   │           ├── f9d73365-1492-4efa-aabd-b730650157d0.json
│   │           ├── faf1a8f8-0cdf-43ba-8af8-d53a2d1a060f.json
│   │           ├── fb7828b5-0a12-46a7-8c5c-6c220d116e36.json
│   │           ├── fb857ec0-d80d-4404-ba0e-1ba436305d7d.json
│   │           ├── fda16ac8-d1cf-49db-93b7-833c274cd0d2.json
│   │           ├── fe3a8d7c-3dff-489e-abca-0b515db9420c.json
│   │           ├── fe78e904-37eb-46de-9195-1264c9acc754.json
│   │           ├── ff05e63d-c45b-499f-bc6e-a507047b4f10.json
│   │           └── ffe18889-8e9a-4b8c-8a81-867a03a3c274.json
│   ├── eslint.config.js
│   ├── fb/
│   │   ├── .firebaserc
│   │   ├── README.md
│   │   ├── firebase.json
│   │   ├── functions/
│   │   │   ├── package.json
│   │   │   ├── src/
│   │   │   │   ├── gemini.ts
│   │   │   │   └── index.ts
│   │   │   └── tsconfig.json
│   │   └── storage.rules
│   ├── package.json
│   ├── postcss.config.js
│   ├── src/
│   │   ├── app.css
│   │   ├── app.d.ts
│   │   ├── app.html
│   │   ├── lib/
│   │   │   ├── api.ts
│   │   │   ├── cloud-firebase.ts
│   │   │   ├── components/
│   │   │   │   ├── CollectionsList.svelte
│   │   │   │   ├── Droppable.svelte
│   │   │   │   └── ui/
│   │   │   │       ├── button/
│   │   │   │       │   ├── button.svelte
│   │   │   │       │   └── index.ts
│   │   │   │       ├── dropdown-menu/
│   │   │   │       │   ├── dropdown-menu-checkbox-item.svelte
│   │   │   │       │   ├── dropdown-menu-content.svelte
│   │   │   │       │   ├── dropdown-menu-item.svelte
│   │   │   │       │   ├── dropdown-menu-label.svelte
│   │   │   │       │   ├── dropdown-menu-radio-group.svelte
│   │   │   │       │   ├── dropdown-menu-radio-item.svelte
│   │   │   │       │   ├── dropdown-menu-separator.svelte
│   │   │   │       │   ├── dropdown-menu-shortcut.svelte
│   │   │   │       │   ├── dropdown-menu-sub-content.svelte
│   │   │   │       │   ├── dropdown-menu-sub-trigger.svelte
│   │   │   │       │   └── index.ts
│   │   │   │       ├── input/
│   │   │   │       │   ├── index.ts
│   │   │   │       │   └── input.svelte
│   │   │   │       └── label/
│   │   │   │           ├── index.ts
│   │   │   │           └── label.svelte
│   │   │   ├── consts.ts
│   │   │   ├── embedder.ts
│   │   │   ├── firebase.ts
│   │   │   ├── store.ts
│   │   │   └── utils.ts
│   │   └── routes/
│   │       ├── +layout.svelte
│   │       ├── +page.svelte
│   │       ├── api/
│   │       │   ├── getEmbeddings/
│   │       │   │   └── +server.ts
│   │       │   ├── listCollections/
│   │       │   │   └── +server.ts
│   │       │   ├── search/
│   │       │   │   └── +server.ts
│   │       │   └── umap/
│   │       │       └── +server.ts
│   │       ├── search/
│   │       │   ├── +page.svelte
│   │       │   └── ImageResult.svelte
│   │       └── viz/
│   │           ├── +page.svelte
│   │           ├── Image.svelte
│   │           ├── Scene.svelte
│   │           ├── Settings.svelte
│   │           └── Viz.svelte
│   ├── svelte.config.js
│   ├── tailwind.config.ts
│   ├── tsconfig.json
│   └── vite.config.ts
├── video-scrubber/
│   ├── .eslintrc.cjs
│   ├── .gcloudignore
│   ├── LICENSE
│   ├── README.md
│   ├── app.yaml
│   ├── index.html
│   ├── package.json
│   ├── postcss.config.js
│   ├── server/
│   │   ├── gemini.js
│   │   └── index.js
│   ├── src/
│   │   ├── Annotations.tsx
│   │   ├── App.tsx
│   │   ├── ClickableTimestamps.tsx
│   │   ├── ClipTimeline.tsx
│   │   ├── Controls.tsx
│   │   ├── Gemini.tsx
│   │   ├── PlayTimeline.tsx
│   │   ├── Timelines.tsx
│   │   ├── TimestampText.tsx
│   │   ├── Video.tsx
│   │   ├── VideoInput.tsx
│   │   ├── VideoState.tsx
│   │   ├── atoms.tsx
│   │   ├── consts.tsx
│   │   ├── index.css
│   │   ├── main.tsx
│   │   ├── utils.tsx
│   │   └── vite-env.d.ts
│   ├── tailwind.config.js
│   ├── tsconfig.json
│   ├── tsconfig.node.json
│   └── vite.config.ts
└── voice-cursor/
    ├── .gcloudignore
    ├── .gitignore
    ├── CONTRIBUTING.md
    ├── LICENSE
    ├── README.md
    ├── components.json
    ├── next.config.mjs
    ├── package.json
    ├── postcss.config.js
    ├── src/
    │   ├── app/
    │   │   ├── default-value.ts
    │   │   ├── globals.css
    │   │   ├── layout.tsx
    │   │   ├── page.tsx
    │   │   ├── prosemirror.css
    │   │   └── test-audio/
    │   │       └── page.tsx
    │   ├── components/
    │   │   ├── editor/
    │   │   │   ├── advanced-editor.tsx
    │   │   │   ├── audio-menu.tsx
    │   │   │   ├── client-editor.tsx
    │   │   │   ├── extensions/
    │   │   │   │   └── audio-highlight.ts
    │   │   │   ├── extensions.ts
    │   │   │   ├── image-upload.ts
    │   │   │   ├── prompt-popover.tsx
    │   │   │   ├── selectors/
    │   │   │   │   └── voice-popover.tsx
    │   │   │   ├── slash-command.tsx
    │   │   │   └── unused-selectors/
    │   │   │       ├── color-selector.tsx
    │   │   │       ├── highlight-selector.tsx
    │   │   │       ├── link-selector.tsx
    │   │   │       ├── node-selector.tsx
    │   │   │       └── text-buttons.tsx
    │   │   ├── theme-provider.tsx
    │   │   ├── theme-toggle.tsx
    │   │   └── ui/
    │   │       ├── button.tsx
    │   │       ├── dropdown-menu.tsx
    │   │       ├── popover.tsx
    │   │       ├── separator.tsx
    │   │       ├── sonner.tsx
    │   │       └── tooltip.tsx
    │   └── lib/
    │       ├── tone-options.ts
    │       ├── utils.ts
    │       └── voice-options.ts
    ├── tailwind.config.ts
    └── tsconfig.json

================================================
FILE CONTENTS
================================================

================================================
FILE: CONTRIBUTING.md
================================================
# How to Contribute

We'd love to accept your patches and contributions to this project. There are
just a few small guidelines you need to follow.

## Contributor License Agreement

Contributions to this project must be accompanied by a Contributor License
Agreement. You (or your employer) retain the copyright to your contribution;
this simply gives us permission to use and redistribute your contributions as
part of the project. Head over to <https://cla.developers.google.com/> to see
your current agreements on file or to sign a new one.

You generally only need to submit a CLA once, so if you've already submitted one
(even if it was for a different project), you probably don't need to do it
again.

## Code reviews

All submissions, including submissions by project members, require review. We
use GitHub pull requests for this purpose. Consult
[GitHub Help](https://help.github.com/articles/about-pull-requests/) for more
information on using pull requests.

## Community Guidelines

This project follows [Google's Open Source Community
Guidelines](https://opensource.google.com/conduct/).

================================================
FILE: LICENSE
================================================
                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.


================================================
FILE: README.md
================================================
# Gemini API Demos

Hello! 👋 This is a repository of examples built with Google's Gemini API, which lets you build multimodal AI applications with text, images, and more.

## What You'll Find:

Examples: These demos show the latest Gemini models (Flash 1.5, Pro, and others) in action. Dive into projects that demonstrate:

- Image and Video understanding: Analyze content, classify objects, and even generate timestamped summaries.
- Multimodal interaction: Combine text and image inputs to create engaging user experiences.
- Technical Inspiration: Get hands-on with code examples that show you how to use the Gemini API effectively. Learn best practices for prompt engineering, caching and embedding, and integrating Gemini into your own applications.

## Getting Started:

1. Obtain an API Key: To use the Gemini API, you'll need an API key. You can get one [here](https://ai.google.dev/gemini-api/docs/api-key) or from [AI Studio](https://aistudio.google.com/app/apikey)
2. Explore the Docs: The official documentation is your comprehensive guide to the Gemini API: https://ai.google.dev/gemini-api/docs/
3. Dive into the Demos: Choose a demo that sparks your interest and follow the instructions in its README. You'll be up and running in no time!

## Important Notes:

1. API Usage Limits: Google may have usage limits and associated costs for the Gemini API. Be sure to review the details on their website.
2. Responsible AI: Please use the Gemini API responsibly and ethically. Avoid generating harmful or misleading content.
3. Feedback Welcome: We value your input! If you encounter issues, have suggestions, or want to share your creations, please open an issue or pull request.

## Current Projects

| Name                                            | Description                                                                                                                                                                                                                                                                                   | Tools                                                                                                                                                                                                        |
| ----------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| [Multimodal Embeddings](/multimodal-embeddings) | Using Gemini's new Multimodal Embeddings API, we'll explore high dimensional embedding space of text, images, and videos.                                                                                                                                                                     | [Multimodal Embeddings API](https://cloud.google.com/vertex-ai/generative-ai/docs/embeddings/get-multimodal-embeddings), [Firestore Vector Search](https://firebase.google.com/docs/firestore/vector-search) |
| [Gemini Video Scrubber](/video-scrubber)        | "GVS" is a prototype that uses Gemini's multimodal video understanding capabilities to create timestamped summaries of videos with a simple UI to play those timestamps back in sequence, giving you the ability to quickly scan videos for interesting moments, common occurences, and more! | Multimodal Gemini, File API, Caching                                                                                                                                                                         |
| [Voice Cursor](/voice-cursor)                    | An experimental text editor that lets you highlight phrases and instantly hear them spoken by Gemini 2.0 in different expressive styles. Simply select text, choose a tone, and hear AI-generated speech with customizable prompts. | [Gemini 2.0 Native Audio Output](https://ai.google.dev/gemini-api/docs/models/gemini-v2#speech-generation-early-accessallowlist)                                                                                                                                                                   |
| [Image to Code](/image-to-code)                  | An experimental site that uses Gemini 2.0 Flash to turn an image --> into a creative code sketch (p5.js). | [Gemini 2.0 Flash](https://deepmind.google/technologies/gemini/flash/) |

## Experiments for all

This is an experiment, not an official Google product. We'll do our best to support and maintain this experiment but your mileage may vary.

We encourage open sourcing projects as a way of learning from each other. Please respect our and other creators' rights, including copyright and trademark rights when present, when sharing these works and creating derivative work. If you want more info on Google's policy, you can find that [here](https://www.google.com/permissions/).


================================================
FILE: image-to-code/.gcloudignore
================================================
# This file specifies files that are *not* uploaded to Google Cloud
# using gcloud. It follows the same syntax as .gitignore, with the addition of
# "#!include" directives (which insert the entries of the given .gitignore-style
# file at that point).
#
# For more information, run:
#   $ gcloud topic gcloudignore
#
.gcloudignore
# If you would like to upload your .git directory, .gitignore file or files
# from your .gitignore file, remove the corresponding line
# below:
.git
.gitignore

# Node.js dependencies:
node_modules/

================================================
FILE: image-to-code/.gitignore
================================================
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.

# dependencies
/node_modules
/.pnp
.pnp.*
.yarn/*
!.yarn/patches
!.yarn/plugins
!.yarn/releases
!.yarn/versions

# testing
/coverage

# next.js
/.next/
/out/

# production
/build

# misc
.DS_Store
*.pem

# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.pnpm-debug.log*

# env files (can opt-in for committing if needed)
.env*
.env.local
# vercel
.vercel

# typescript
*.tsbuildinfo
next-env.d.ts

# app yaml
*.yaml
app.yaml



================================================
FILE: image-to-code/CONTRIBUTING.md
================================================
# How to contribute

We'd love to accept your patches and contributions to this project.

## Before you begin

Sign our Contributor License Agreement
Contributions to this project must be accompanied by a Contributor License Agreement (CLA). You (or your employer) retain the copyright to your contribution; this simply gives us permission to use and redistribute your contributions as part of the project.

If you or your current employer have already signed the Google CLA (even if it was for a different project), you probably don't need to do it again.

Visit https://cla.developers.google.com/ to see your current agreements or to sign a new one.

### Review our community guidelines
This project follows Google's Open Source Community Guidelines.

## Contribution process

###Code reviews
All submissions, including submissions by project members, require review. We use GitHub pull requests for this purpose. Consult GitHub Help for more information on using pull requests.

================================================
FILE: image-to-code/LICENSE
================================================

                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.

================================================
FILE: image-to-code/README.md
================================================
# Image to Code Generator 🎨

![image-to-code-sketch](./readme/smoke.gif)

Get started with [p5js](https://p5js.org/) sketches using [Gemini 2.0 Flash](https://deepmind.google/technologies/gemini/flash/). Upload any photo, and this web app uses [Gemini 2.0 Flash](https://deepmind.google/technologies/gemini/flash/) to generate a [p5.js](https://p5js.org/) sketch that captures the essence of the image in an interactive way.

## Getting Started

### 1. Clone this repository and install dependencies:

```
git clone https://github.com/googlecreativelab/gemini-demos/
cd image-to-code-sketch
npm install
```

### 2. Create a .env.local file with your AI Studio API key:

Get your API key from [Google AI Studio](https://aistudio.google.com/apikey). And create a `.env` file in the root of the project.

```
NEXT_PUBLIC_GEMINI_API_KEY=your_api_key_here
```

### 3. Start the development server:

```
npm run dev
```

Open http://localhost:3000 and start uploading images!

## Prompt Transparency

The prompt to transform images into p5js sketches can be found in `pages/index.js`.

```
You are a creative coding expert who turns images into clever code sketches using p5js. A user will upload an image and you will generate a interactive p5js sketch that represents the image. The code sketch always has some sort of interactive element that connects to the nature of the object in the real world.

## EXAMPLES

Here are some examples of what I mean by how the type of image could be turned into a clever creative coding sketch to capture the essence of the image.
- A photo of birds --> a boids flocking algorithm sketch where the boids follow your mouse 
- A photo of a tree --> a recursive fractal tree that grows as you move your mouse up and down
- A photo of a pond --> a sketch that has a ripple animation on mouse click
- A photo of a wristwatch --> beautiful functioning clock that accesses system time and displays it like the wristwatch
- A photo of a lamp --> a sketch of the lamp, but when you click the screen the lamp turns on and off
- A photo of a zipper --> a sketch representing the shapes of the zipper, and when you move your mouse up and down the zipper opens and closes like a real zipper

## PROCESS

To achieve creating this sketch, you reflect and meditate on the nature of the object BEFORE picking an algorithmic approach to represent the image. You are an agent that is thoughtful, clever, delightful, and playful.

Before you start, think about the image and the best way to represent it in p5js.

1. Describe the behavioral properties of the image. List some ways it behaves in the real world or some patterns it exhibits. Describe the colors and vibe of the image as well. 

2. Given the behavorial properties of the image, identify a common creative coding algorithm that can be paired up to this image to make a delightful p5js sketch.

3. State the bounding boxes of the important parts of the composition of the photo. We will need to use these bounding boxes to make sure our composition of our sketch resembles the composition of the photo uploaded. Our sketch's composition needs to resemble the composition of the uploaded photo.

4. Implement a algorithm in p5js, using the properties of the image described earlier. Use either mouseMoved() or mouseClicked() to make it interactive. Generate a SINGLE, COMPLETE code snippet. We parse out the response you generate, so we should have only ONE code snippet that incorporates all of the information from steps 1 (behavioral description), 2 (creative coding algorithm to bring this to life), 3 (bounding boxes to preserve compositional integrity).

## EXECUTION

Complete all of these steps. When you write your code, be sure to leave clear comments to describe the different parts of the code and what you are doing. 

Do not EVER try to load in external images or any other libraries. Everything must be self contained in the one file and code snippet.

And don't be too verbose.
```

## Credits

Code by [Trudy Painter](https://www.trudy.computer/). Design by [Jose Guizar](https://joseguizar.com/).

## Contributing 🤝

Contributions are welcome! See the `CONTRIBUTING.md` file for more information.

## Disclaimer

This is an experiment showcasing Gemini 2.0's capabilities, not an official Google product. We'll do our best to support and maintain this experiment but your mileage may vary. We encourage open sourcing projects as a way of learning from each other. Please respect our and other creators' rights, including copyright and trademark rights when present, when sharing these works and creating derivative work. If you want more info on Google's policy, you can find that [here](https://www.google.com/permissions/).

## License

Licensed under the Apache-2.0 license.

================================================
FILE: image-to-code/components/CodePreview.js
================================================
/**
 * Copyright 2025 Google LLC
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

import React, { useState } from 'react';
import { Code2, Play, Copy, Check, MessageCircle } from 'lucide-react';
import Editor from '@monaco-editor/react';
import ReactMarkdown from 'react-markdown';
import remarkGfm from 'remark-gfm';
import ToggleButton from './ToggleButton';

const CodePreview = ({ output, onCodeChange, fullResponse }) => {
  const [showCode, setShowCode] = useState(false);
  const [showReasoning, setShowReasoning] = useState(false);
  const [isCopied, setIsCopied] = useState(false);

  const handleCopy = async () => {
    try {
      await navigator.clipboard.writeText(output.code);
      setIsCopied(true);
      setTimeout(() => setIsCopied(false), 2000);
    } catch (err) {
      console.error('Failed to copy code:', err);
    }
  };

  const renderSketch = (code) => {
    // Make sure we're working with a string
    const codeString = typeof code === 'string' ? code : code.toString();
    
    const wrappedCode = codeString.includes('function setup()') ? codeString : `
      function setup() {
        createCanvas(500, 500);
        ${codeString}
      }

      function draw() {
        // Add default draw function if not present
        if (typeof window.draw !== 'function') {
          window.draw = function() {};
        }
      }
    `;

    const formattedCodeResponse = `
      <!DOCTYPE html>
      <html lang="en">
      <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.4.0/p5.js"></script>
        <title>p5.js Sketch</title>
        <style>
          body {
            padding: 0;
            margin: 0;
            display: flex;
            justify-content: center;
            align-items: center;
            min-height: 100vh;
            overflow: hidden;
          }
          canvas {
            max-width: 100% !important;
            height: auto !important;
          }
        </style>
      </head>
      <body>
        <script>
          try {
            ${wrappedCode}
            // Immediately call setup if it hasn't been called
            if (typeof window.setup === 'function') {
              new p5();
            }
          } catch (error) {
            console.error('Sketch error:', error);
            document.body.innerHTML = '<div style="color: red; padding: 20px;"><h3>🔴 Error:</h3><pre>' + error.message + '</pre></div>';
          }
        </script>
      </body>
      </html>
    `;

    return (
      <div className="relative w-full h-[500px] bg-gray-50 rounded-lg overflow-hidden">
        <iframe
          srcDoc={formattedCodeResponse}
          title="p5.js Sketch"
          width="100%"
          height="100%"
          style={{ border: "none" }}
          className="absolute inset-0"
        />
      </div>
    );
  };

  // Make sure we're passing the actual code string to renderSketch
  const sketchCode = output?.code || '';

  return (
    <div className="mb-4 p-6 rounded-3xl bg-gray-100">
      <div className="mb-4">
        {showCode ? (
          <div className="w-full h-[500px] rounded-lg overflow-hidden border">
            <Editor
              height="500px"
              defaultLanguage="javascript"
              value={sketchCode}
              onChange={(value) => onCodeChange(output.id, value)}
              theme="light"
              options={{
                minimap: { enabled: false },
                fontSize: 12,
                lineNumbers: 'off',
                scrollBeyondLastLine: false,
                automaticLayout: true,
                tabSize: 2,
                wordWrap: 'on',
                padding: { top: 8, bottom: 8 }
              }}
            />
          </div>
        ) : showReasoning ? (
          <div className="w-full h-[500px] rounded-lg overflow-y-auto border p-4 prose prose-xs max-w-none bg-white">
            <ReactMarkdown 
              remarkPlugins={[remarkGfm]}
              className="text-xs text-gray-700"
              components={{
                code: ({node, inline, className, children, ...props}) => (
                  <code className={`${className} ${inline ? 'text-[0.7rem] bg-slate-50 text-slate-900 px-1.5 py-0.5 rounded border border-slate-200' : ''}`} {...props}>
                    {children}
                  </code>
                ),
                pre: ({node, children, ...props}) => (
                  <pre className="text-[0.7rem] bg-slate-50 text-slate-900 p-3 rounded-md overflow-x-auto border border-slate-200" {...props}>
                    {children}
                  </pre>
                ),
                p: ({node, children}) => (
                  <p className="text-xs mb-2 text-gray-700">{children}</p>
                ),
                h1: ({node, children}) => (
                  <h1 className="text-sm font-bold mb-2 text-gray-900">{children}</h1>
                ),
                h2: ({node, children}) => (
                  <h2 className="text-xs font-bold mb-2 text-gray-900">{children}</h2>
                ),
                h3: ({node, children}) => (
                  <h3 className="text-xs font-semibold mb-1 text-gray-900">{children}</h3>
                ),
                ul: ({node, children}) => (
                  <ul className="text-xs list-disc pl-4 mb-2 text-gray-700">{children}</ul>
                ),
                ol: ({node, children}) => (
                  <ol className="text-xs list-decimal pl-4 mb-2 text-gray-700">{children}</ol>
                ),
                li: ({node, children}) => (
                  <li className="text-xs mb-1 text-gray-700">{children}</li>
                )
              }}
            >
              {fullResponse}
            </ReactMarkdown>
          </div>
        ) : (
          renderSketch(sketchCode)
        )}
      </div>
      
      <div className="flex justify-between items-center mt-2">
        <div className="inline-flex rounded-full bg-gray-200 gap-1">
          <ToggleButton
            icon={Play}
            label="Preview"
            isSelected={!showCode && !showReasoning}
            onClick={() => {
              setShowCode(false);
              setShowReasoning(false);
            }}
          />
          <ToggleButton
            icon={MessageCircle}
            label="Reasoning"
            isSelected={showReasoning}
            onClick={() => {
              setShowCode(false);
              setShowReasoning(true);
            }}
          />
          <ToggleButton
            icon={Code2}
            label="Code"
            isSelected={showCode}
            onClick={() => {
              setShowCode(true);
              setShowReasoning(false);
            }}
          />
        </div>
        <button
          type="button"
          onClick={handleCopy}
          className={`px-3.5 py-2.5 rounded-full transition-colors inline-flex text-sm  border border-gray-300 
            items-center gap-1 ${
            isCopied
              ? "bg-gray-500 text-white"
              : "bg-transparent text-gray-700 hover:bg-gray-100"
          }`}
        >
          {isCopied ? (
            <>
              <Check size={14} />
              Copied!
            </>
          ) : (
            <>
              <Copy size={14} />
              Copy Code
            </>
          )}
        </button>
      </div>
    </div>
  );
};

export default CodePreview; 

================================================
FILE: image-to-code/components/Header.js
================================================
import React from 'react';
import { Github, Info } from 'lucide-react';

const Header = () => {
  return (
    <div className="fixed top-0 left-0 right-0 w-full bg-white p-4 z-50 ">
      <div className="w-full flex justify-between items-center text-base">
        <div className="text-gray-500">
          <span className="text-black font-bold text-lg mr-2">Image to Code</span>
          Built with <a 
            href="https://ai.google.dev" 
            target="_blank" 
            rel="noopener noreferrer"
            className="underline hover:text-gray-800 transition-colors"
          >
            Gemini 2.0
          </a>
        </div>
        
        <div className="flex items-center gap-3">
          <a
            href="https://github.com/googlecreativelab/gemini-demos/tree/main/image-to-code"
            target="_blank"
            rel="noopener noreferrer"
            className="flex items-center gap-2  text-sm font-medium text-gray-700 hover:text-gray-900 transition-colors "
          >
            <Github size={18} className="text-gray-600" />
            <span>GitHub Repository</span>
          </a>
        </div>
      </div>
    </div>
  );
};

export default Header; 

================================================
FILE: image-to-code/components/ToggleButton.js
================================================
import React from 'react';

const ToggleButton = ({ icon: Icon, label, isSelected, onClick }) => {
  const baseStyles = "inline-flex items-center gap-1 px-3.5 py-2.5 text-sm rounded-full transition-all duration-200";
  const selectedStyles = "bg-black text-white";
  const unselectedStyles = "bg-gray-200 text-gray-700";

  return (
    <button
      type="button"
      onClick={onClick}
      className={`${baseStyles} ${isSelected ? selectedStyles : unselectedStyles}`}
    >
      {Icon && <Icon size={14} />}
      {label}
    </button>
  );
};

export default ToggleButton; 

================================================
FILE: image-to-code/jsconfig.json
================================================
{
  "compilerOptions": {
    "paths": {
      "@/*": ["./*"]
    }
  }
}


================================================
FILE: image-to-code/next.config.mjs
================================================
/**
 * Copyright 2025 Google LLC
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/** @type {import('next').NextConfig} */
const nextConfig = {
  reactStrictMode: true,
};

export default nextConfig;


================================================
FILE: image-to-code/package.json
================================================
{
  "name": "service-image-code-2",
  "version": "0.1.0",
  "private": true,
  "scripts": {
    "dev": "next dev --turbopack",
    "build": "next build",
    "start": "next start",
    "lint": "next lint"
  },
  "dependencies": {
    "@google/generative-ai": "^0.21.0",
    "@monaco-editor/react": "^4.6.0",
    "lucide-react": "^0.469.0",
    "next": "15.1.3",
    "react": "^19.0.0",
    "react-dom": "^19.0.0",
    "react-dropzone": "^14.3.5",
    "react-markdown": "^9.0.3",
    "remark-gfm": "^4.0.0"
  },
  "devDependencies": {
    "@tailwindcss/typography": "^0.5.16",
    "postcss": "^8",
    "tailwindcss": "^3.4.1"
  }
}


================================================
FILE: image-to-code/pages/_app.js
================================================
/**
 * Copyright 2025 Google LLC
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

import "@/styles/globals.css";

export default function App({ Component, pageProps }) {
  return <Component {...pageProps} />;
}


================================================
FILE: image-to-code/pages/_document.js
================================================
/**
 * Copyright 2025 Google LLC
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

import { Html, Head, Main, NextScript } from "next/document";

export default function Document() {
  return (
    <Html lang="en">
      <Head />
      <body className="antialiased">
        <Main />
        <NextScript />
      </body>
    </Html>
  );
}


================================================
FILE: image-to-code/pages/api/hello.js
================================================
/**
 * Copyright 2025 Google LLC
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

// Next.js API route support: https://nextjs.org/docs/api-routes/introduction

export default function handler(req, res) {
  res.status(200).json({ name: "John Doe" });
}


================================================
FILE: image-to-code/pages/index.js
================================================
/**
 * Copyright 2025 Google LLC
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

import React, { useState, useCallback, useEffect } from "react";
import { useDropzone } from "react-dropzone";
import { GoogleGenerativeAI } from "@google/generative-ai";
import { ChevronDown, Image, Upload, Settings, Send, History, ArrowRight, Pen, Layers } from "lucide-react";
import Head from "next/head";
import CodePreview from "../components/CodePreview";
import Header from '../components/Header';

const SAMPLE_IMAGES = [
  'beeripple.jpeg',
  'bubbles.jpeg', 
  'clock.png',
  'flower.jpeg',
  'garage.jpeg',
  'sconce.jpeg',
  'steam.jpeg',
  'tree.png',
  "birds.jpeg",
  "bubblemachine.png",
];

// Initialize Gemini AI model
const MODEL_NAME = "gemini-2.0-flash-exp";
const genAI = new GoogleGenerativeAI(process.env.NEXT_PUBLIC_GEMINI_API_KEY);
const model = genAI.getGenerativeModel({ model: MODEL_NAME });

// Helper function to generate code from image
async function generateCodeFromImage(imageBase64, prompt, userInput) {
  const image = {
    inlineData: {
      data: imageBase64.split(",")[1],
      mimeType: "image/jpeg",
    },
  };

  const finalPrompt = userInput.trim()
    ? `${prompt}\n\nUser input: ${userInput}`
    : prompt;

  const result = await model.generateContent([finalPrompt, image]);
  const response = result.response.text();

  const regex = /```(?:javascript|js)?\s*([\s\S]*?)```/g;
  const match = regex.exec(response);
  const extractedCode = match ? match[1].trim() : response;

  return {
    fullResponse: response,
    code: extractedCode
  };
}

export default function Home() {
  const [imageBase64, setImageBase64] = useState("");
  const [outputs, setOutputs] = useState([]);
  const [loading, setLoading] = useState(false);
  const [hasStartedGenerating, setHasStartedGenerating] = useState(false);
  const [selectedOutput, setSelectedOutput] = useState(null);
  const [concurrentRequests, setConcurrentRequests] = useState(5);
  const [showPrompt, setShowPrompt] = useState(false);
  const [prompt, setPrompt] = useState("");

  // Load prompt from localStorage on initial render
  useEffect(() => {
    const savedPrompt = localStorage.getItem('savedPrompt');
    if (savedPrompt) {
      setPrompt(savedPrompt);
    } else {
      const defaultPrompt = `You are a creative coding expert who turns images into 
      clever code sketches using p5js. A user will upload an image and you will 
      generate a interactive p5js sketch that represents the image. 
      The code sketch always has some sort of interactive element that 
      connects to the nature of the object in the real world.

      ## EXAMPLES

      Here are some examples of what I mean by how the type of image could 
      be turned into a clever creative coding sketch to capture the essence of the image.
      - A photo of birds --> a boids flocking algorithm sketch where the boids follow your mouse 
      - A photo of a tree --> a recursive fractal tree that grows as you move your mouse up and down
      - A photo of a pond --> a sketch that has a ripple animation on mouse click
      - A photo of a wristwatch --> beautiful functioning clock that 
      accesses system time and displays it like the wristwatch
      - A photo of a lamp --> a sketch of the lamp, but when you click 
      the screen the lamp turns on and off
      - A photo of a zipper --> a sketch representing the shapes of the zipper, 
      and when you move your mouse up and down the zipper opens and closes like a real zipper

      ## PROCESS

      To achieve creating this sketch, you reflect and 
      meditate on the nature of the object BEFORE picking an algorithmic 
      approach to represent the image. You are an agent that is thoughtful, 
      clever, delightful, and playful.

      Before you start, think about the image and the best way to represent it in p5js.
      1. Describe the behavioral properties of the image. List some ways it
       behaves in the real world or some patterns it exhibits. Describe the 
       colors and vibe of the image as well. 
      2. Given the behavorial properties of the image, identify a common creative 
      coding algorithm that can be paired up to this image to make a delightful p5js sketch.
      3. State the bounding boxes of the important parts of the composition 
      of the photo. We will need to use these bounding boxes to make sure our 
      composition of our sketch resembles the composition of the photo uploaded. 
      Our sketch's composition needs to resemble the composition of the uploaded photo.
      4. Implement a algorithm in p5js, using the properties of the image described 
      earlier. Use either mouseMoved() or mouseClicked() to make it interactive. 
      Generate a SINGLE, COMPLETE code snippet. We parse out the response you generate, 
      so we should have only ONE code snippet that incorporates all of the information 
      from steps 1 (behavioral description), 2 (creative coding algorithm to bring this to life), 
      3 (bounding boxes to preserve compositional integrity).

      ## EXECUTION

      Complete all of these steps. When you write your code, be sure to leave clear 
      comments to describe the different parts of the code and what you are doing. 
      Do not EVER try to load in external images or any other libraries. 
      Everything must be self contained in the one file and code snippet.
      And don't be too verbose.`
      
      
      
      .trim();
      setPrompt(defaultPrompt);
      localStorage.setItem('savedPrompt', defaultPrompt);
    }
  }, []);

  // Save prompt to localStorage whenever it changes
  useEffect(() => {
    if (prompt) {
      localStorage.setItem('savedPrompt', prompt);
    }
  }, [prompt]);

  const [showSamples, setShowSamples] = useState(false);
  const [selectedSample, setSelectedSample] = useState(null);
  const [userInput, setUserInput] = useState("");
  const [imageDetails, setImageDetails] = useState(null);

  const onDrop = useCallback((acceptedFiles) => {
    const file = acceptedFiles[0];
    const reader = new FileReader();

    reader.onload = (event) => {
      const img = document.createElement("img");
      img.src = event.target.result;

      img.onload = () => {
        const canvas = document.createElement("canvas");
        const scaleFactor = 512 / img.width;
        canvas.width = 512;
        canvas.height = img.height * scaleFactor;
        const ctx = canvas.getContext("2d");
        ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
        setImageBase64(canvas.toDataURL());
        setImageDetails({
          name: file.name,
          size: `${(file.size / 1024).toFixed(2)}kB`,
          type: file.type
        });
      };
    };

    reader.readAsDataURL(file);
  }, []);

  const { getRootProps, getInputProps, isDragActive } = useDropzone({
    onDrop,
    accept: "image/*",
  });

  const generateCode = async () => {
    if (!imageBase64) return;

    setLoading(true);
    setHasStartedGenerating(true);
    setOutputs([]);
    try {
      const requests = Array(concurrentRequests)
        .fill()
        .map(() => generateCodeFromImage(imageBase64, prompt, userInput));
      
      const results = await Promise.all(requests);
      setOutputs(results.map((result, index) => ({
        id: index + 1,
        code: result.code,
        fullResponse: result.fullResponse
      })));
    } catch (error) {
      console.error("Error generating code:", error);
    } finally {
      setLoading(false);
    }
  };

  const renderSketch = (code) => {
    const formattedCodeResponse = `
      <!DOCTYPE html>
      <html lang="en">
      <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=512, initial-scale=1.0">
        <script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.4.0/p5.js"></script>
        <title>p5.js Sketch</title>
        <style> body {padding: 0; margin: 0;} </style>
      </head>
      <body>
      <script>
        window.onerror = function(message, source, lineno, colno, error) {
          document.body.innerHTML += '<h3>🔴Error:</h3><pre>' + message + '</pre>';
        };
        ${code}
      </script>
      </body>
      </html>
    `;

    return (
      <iframe
        srcDoc={formattedCodeResponse}
        title="p5.js Sketch"
        width="100%"
        height="300"
        style={{ border: "none" }}
      />
    );
  };



  const handleCodeChange = (id, newCode) => {
    setOutputs((prevOutputs) =>
      prevOutputs.map((output) =>
        output.id === id ? { ...output, code: newCode } : output
      )
    );
  };

  const handleSampleSelect = async (imageName) => {
    setSelectedSample(imageName);
    try {
      const response = await fetch(`/samples/${imageName}`);
      const blob = await response.blob();
      const reader = new FileReader();

      reader.onload = (event) => {
        const img = document.createElement("img");
        img.src = event.target.result;

        img.onload = () => {
          const canvas = document.createElement("canvas");
          const scaleFactor = 512 / img.width;
          canvas.width = 512;
          canvas.height = img.height * scaleFactor;
          const ctx = canvas.getContext("2d");
          ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
          setImageBase64(canvas.toDataURL());
        };
      };

      reader.readAsDataURL(blob);
    } catch (error) {
      console.error('Error loading sample image:', error);
    }
  };

  return (
    <>
      <Head>
        <title>Image to Code</title>
      </Head>
      <div className="h-screen max-h-screen bg-white flex items-center justify-center overflow-y-hidden tracking-[-0.005em]">
        <Header />

        <div className="w-full h-full max-h-full overflow-hidden bg-white">
          <div className={`flex flex-col md:flex-row gap-0 max-w-6xl mx-auto py-0 h-full transition-all duration-500 ${!hasStartedGenerating ? 'justify-center' : ''}`}>
            <div className={`flex-1 h-full overflow-y-auto py-20 px-3 transition-all duration-500 ${!hasStartedGenerating ? 'md:max-w-2xl mx-auto' : ''}`}>
              <section className="flex flex-col bg-gray-100 rounded-2xl p-4">
                <div
                  {...getRootProps()}
                  className={`border-2 border-dashed bg-gray-100 rounded-2xl m-4 min-h-96 h-fit flex 
                flex-col items-center justify-center cursor-pointer hover:border-gray-400 transition-colors ${imageBase64 ? 'border-none' : 'border-gray-300'}`}
                >
                  <input {...getInputProps()} />
                  {imageBase64 ? (
                    <img
                      src={imageBase64}
                      alt="Uploaded"
                      className="max-h-full max-w-full object-contain rounded-2xl"
                    />
                  ) : (
                    <>
                      <Upload className="w-12 h-12 text-gray-400 mb-4" />
                      <p className="text-gray-400">
                        {isDragActive
                          ? "Drop the image here"
                          : "Drag & drop an image here, or click to select one"}
                      </p>
                    </>
                  )}
                </div>
                <div className="max-w-xl mb-4">
                  <div className="flex overflow-x-auto gap-2 py-1 mx-4">
                    {SAMPLE_IMAGES.map((image) => (
                      <button
                        key={image}
                        type="button"
                        onClick={() => handleSampleSelect(image)}
                        className={`flex-shrink-0 w-14 h-14 bg-white rounded-lg hover:scale-110 transition-all ${selectedSample === image ? 'border-blue-500 ring-2 ring-blue-200' : 'border-gray-300'
                          }`}
                      >
                        <img
                          src={`/samples/${image}`}
                          alt={image}
                          className="w-full h-full object-cover rounded-lg"
                        />
                      </button>
                    ))}
                  </div>
                </div>
              </section>
              <section className="mt-4 space-y-4 bg-gray-100 rounded-2xl p-4">
                <div>
                  <button
                    type="button"
                    onClick={() => setShowSamples(!showSamples)}
                    className="flex items-center gap-2 text-sm text-gray-600 hover:text-gray-800 transition-colors"
                  >
                    {/* <Settings size={16} /> */}
                    <span className="font-bold">Advanced</span>
                    <ChevronDown
                      size={16}
                      className={`transform transition-transform ${showSamples ? 'rotate-180' : ''
                        }`}
                    />
                  </button>

                  {showSamples && (
                    <div className="my-2 rounded-lg">
                      <div className="space-y-2">
                        <div className="flex items-center justify-between">
                          <div className="flex items-center gap-2">
                            <Layers size={14} className="text-gray-600" />
                            <label htmlFor="concurrent-requests" className="text-sm font-medium text-gray-700">
                              Concurrent Requests: {concurrentRequests}
                            </label>
                          </div>
                          <input
                            id="concurrent-requests"
                            type="range"
                            min="1"
                            max="10"
                            value={concurrentRequests}
                            onChange={(e) => setConcurrentRequests(Number(e.target.value))}
                            className="w-1/2"
                          />
                        </div>

                        <button
                          type="button"
                          onClick={() => setShowPrompt(!showPrompt)}
                          className="flex items-center gap-2 text-sm text-gray-600 hover:text-gray-800 transition-colors"
                        >
                          <Pen size={14} />
                          <span>Edit System Prompt</span>
                          <ChevronDown
                            size={16}
                            className={`transform transition-transform ${showPrompt ? 'rotate-180' : ''}`}
                          />
                        </button>

                        {showPrompt && (
                          <textarea
                            value={prompt}
                            onChange={(e) => setPrompt(e.target.value)}
                            className="w-full h-64 p-2 border rounded-lg font-mono text-sm mt-2"
                            placeholder="Enter your prompt here..."
                          />
                        )}
                      </div>
                    </div>
                  )}
                </div>

              </section>
              <section className="mt-4">
                <button
                  type="button"
                  onClick={generateCode}
                  className="px-4 py-4 bg-gray-800 text-white rounded-2xl mb-8
                  hover:bg-gray-900  transition-colors w-full disabled:bg-gray-300 disabled:cursor-not-allowed
                  flex items-center justify-center gap-2 font-bold"
                  disabled={!imageBase64 || loading}
                >
                  {/* <Send size={16} className={loading ? 'opacity-50' : ''} /> */}
                  <span>{loading ? "Generating..." : `Generate ${concurrentRequests} Code Snippet${concurrentRequests > 1 ? 's' : ''}`}</span>

                </button>
              </section>
            </div>

            {hasStartedGenerating && (
              <div className="flex-1 h-full overflow-y-scroll py-20 px-3 animate-slide-in">
                {loading ? (
                  // Loading skeletons for code previews
                  Array(concurrentRequests).fill().map((_, index) => (
                    <div key={`skeleton-${index}`} className="mb-4 p-6 rounded-3xl bg-gray-100 animate-pulse">
                      <div className="w-full h-[500px] bg-gray-200 rounded-lg mb-4" />
                      <div className="flex justify-between items-center">
                        <div className="h-10 w-32 bg-gray-200 rounded-full" />
                        <div className="h-10 w-24 bg-gray-200 rounded-full" />
                      </div>
                    </div>
                  ))
                ) : (
                  outputs.map((output) => (
                    <CodePreview
                      key={output.id}
                      output={output}
                      onCodeChange={handleCodeChange}
                      fullResponse={output.fullResponse}
                    />
                  ))
                )}
              </div>
            )}
          </div>
        </div>
      </div>
    </>
  );
};



================================================
FILE: image-to-code/postcss.config.mjs
================================================
/**
 * Copyright 2025 Google LLC
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/** @type {import('postcss-load-config').Config} */
const config = {
  plugins: {
    tailwindcss: {},
  },
};

export default config;


================================================
FILE: image-to-code/styles/globals.css
================================================
/**
 * Copyright 2025 Google LLC
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

@tailwind base;
@tailwind components;
@tailwind utilities;

:root {
  --background: #ffffff;
  --foreground: #171717;
}

@media (prefers-color-scheme: dark) {
  :root {
    --background: #0a0a0a;
    --foreground: #ededed;
  }
}

body {
  color: var(--foreground);
  background: var(--background);
  font-family: Arial, Helvetica, sans-serif;
}


================================================
FILE: image-to-code/tailwind.config.js
================================================
/**
 * Copyright 2025 Google LLC
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/** @type {import('tailwindcss').Config} */
module.exports = {
  content: [
    './pages/**/*.{js,ts,jsx,tsx,mdx}',
    './components/**/*.{js,ts,jsx,tsx,mdx}',
    './app/**/*.{js,ts,jsx,tsx,mdx}',
  ],
  theme: {
    extend: {
      keyframes: {
        'fade-in-out': {
          '0%': { opacity: '0', transform: 'translateY(-10px)' },
          '10%': { opacity: '1', transform: 'translateY(0)' },
          '90%': { opacity: '1' },
          '100%': { opacity: '0' }
        },
        'slide-in': {
          '0%': { transform: 'translateX(100%)' },
          '100%': { transform: 'translateX(0)' }
        }
      },
      animation: {
        'fade-in-out': 'fade-in-out 5s ease-in-out',
        'slide-in': 'slide-in 0.5s ease-out'
      },
      typography: {
        xs: {
          css: {
            fontSize: '0.75rem',
            lineHeight: '1.2',
            color: '#374151',
            p: {
              marginBottom: '0.5rem',
            },
            h1: {
              fontSize: '1rem',
              marginBottom: '0.75rem',
            },
            h2: {
              fontSize: '0.875rem',
              marginBottom: '0.5rem',
            },
            h3: {
              fontSize: '0.75rem',
              marginBottom: '0.5rem',
            },
            'code': {
              fontSize: '0.7rem !important',
              padding: '0.1rem 0.2rem',
              backgroundColor: '#f8fafc',
              color: '#0f172a !important',
              borderRadius: '0.25rem',
              border: '1px solid #e2e8f0',
            },
            'pre': {
              fontSize: '0.7rem !important',
              padding: '0.75rem',
              marginBottom: '0.75rem',
              backgroundColor: '#f8fafc',
              color: '#0f172a',
              border: '1px solid #e2e8f0',
              code: {
                fontSize: '0.7rem !important',
                backgroundColor: 'transparent',
                padding: 0,
                border: 'none',
                color: '#0f172a',
              }
            },
            'ul': {
              marginBottom: '0.75rem',
            },
            'ol': {
              marginBottom: '0.75rem',
            },
            'li': {
              marginBottom: '0.25rem',
            }
          }
        }
      }
    },
  },
  plugins: [
    require('@tailwindcss/typography'),
  ],
} 

================================================
FILE: image-to-code/tailwind.config.mjs
================================================
/**
 * Copyright 2025 Google LLC
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/** @type {import('tailwindcss').Config} */
export default {
  content: [
    "./pages/**/*.{js,ts,jsx,tsx,mdx}",
    "./components/**/*.{js,ts,jsx,tsx,mdx}",
    "./app/**/*.{js,ts,jsx,tsx,mdx}",
  ],
  theme: {
    extend: {
      colors: {
        background: "var(--background)",
        foreground: "var(--foreground)",
      },
    },
  },
  plugins: [],
};


================================================
FILE: multimodal-embeddings/.gcloudignore
================================================
# This file specifies files that are *not* uploaded to Google Cloud
# using gcloud. It follows the same syntax as .gitignore, with the addition of
# "#!include" directives (which insert the entries of the given .gitignore-style
# file at that point).
#
# For more information, run:
#   $ gcloud topic gcloudignore
#
.gcloudignore
# If you would like to upload your .git directory, .gitignore file or files
# from your .gitignore file, remove the corresponding line
# below:
.git
.gitignore

# Node.js dependencies:
node_modules/


================================================
FILE: multimodal-embeddings/.npmrc
================================================
engine-strict=true


================================================
FILE: multimodal-embeddings/.prettierignore
================================================
# Ignore files for PNPM, NPM and YARN
pnpm-lock.yaml
package-lock.json
yarn.lock


================================================
FILE: multimodal-embeddings/.prettierrc
================================================
{
	"useTabs": true,
	"singleQuote": true,
	"trailingComma": "none",
	"printWidth": 100,
	"plugins": [
		"prettier-plugin-svelte",
		"prettier-plugin-tailwindcss"
	],
	"tabWidth": 2,
	"overrides": [
		{
			"files": "*.svelte",
			"options": {
				"parser": "svelte"
			}
		}
	]
}

================================================
FILE: multimodal-embeddings/README.md
================================================
> **This repo is provided _as-is_ for reference**, since you need a Firebase project with at least one collection that contains embeddings, and the proper APIs enabled (with billing) to generate embeddings.

> **NEW!** While not _fully_ functional, the repo now includes exported Firebase emulator data so you can get up and running quicker, follow along below!

# Multimodal Embeddings Demo

[Check out this video](https://x.com/labsdotgoogle/status/1838686949835706607) on the [Labs.google](https://labs.google) X account to see a quick overview of the project:

[![Overview Video on X](https://raw.githubusercontent.com/googlecreativelab/gemini-demos/refs/heads/main/multimodal-embeddings/static/screenshot.png)](https://x.com/labsdotgoogle/status/1838686949835706607)

> Unsure what embeddings are? [Here's an old video](https://www.youtube.com/watch?v=wvsE8jm1GzE) we made about visualizing embeddings that does a good job explaining the basics. Learn more about Multimodal Embeddings in the [Cloud docs here](https://cloud.google.com/vertex-ai/generative-ai/docs/embeddings/get-multimodal-embeddings).

This repo represents most of the code used in Khayti's "Personal Search" demo in the video above, with two endpoints that can be used to explore your own embeddings:

1. `/search` - where we use Firebase Vector Search to find the closest embeddings to _both_ text and image input (image search!), and
2. `/viz` - bonus! where we use [UMAP](https://pair-code.github.io/understanding-umap/) to reduce the dimensions of our embeddings to visualize their relationships in 3D.

The app is built with Firebase and SvelteKit, which uses Threlte for a declarative 3D rendering engine built on top of THREE.js (for `/viz`).

## Get Started

We'll be able to test quickly with some exported Firebase Emulator data so let's dive right in:

1. [Create a new project](https://firebase.google.com/docs/web/setup) in Firebase that has Functions, Firestore and Storage enabled.
2. Run `firebase init` within this folder, enabling Firestore, Storage and Emulators to quickly be able to test with emulator data.
3. Update `/src/lib/consts.ts` with your firebase project info.
4. `npm i && npm run dev:emulate` should now work, building the site and starting the emulators. You can test this by visiting [`http://localhost:5173/viz`](http://localhost:5173/viz), which should load in the provided 'Weater' dataset.
5. Optional - Get a Gemini API key for any Gemini-related extra tasks.

> `firebase init` creates some files, like `firebase.rc` and some rules for Firestore and Firebase Storage. If you run into errors like the 'weather' images not loading in `/viz`, it could be the storage rules being set to 'false' as opposed to something that allows them to be loaded. Learn more in the `Visualizing` section below.

### Firebase Cloud Function for Embedding Generation

We've included a little bonus here in `/fb/functions` that can _automatically_ generate embeddings for files uploaded to your Cloud Bucket. It also generates collections based on the folder structure of the uploads.

This was great for our team when we were prototyping with the API since anyone could just create a new folder, upload images, and have it available in the UI for exploration.

Check out [`/fb/README.md`](fb/README.md) for more info.

> Note: you _can_ get this to run in the emulator as well, but its out of scope for this already too-long doc.

There are a bunch of utility methods and components as well in `/src/lib`, but most importantly used by `/search` and `/viz` is `/src/lib/components/CollectionList.svelte` which will attempt to pull in any Firestore Collections created by the function in `/fb/functions` (if you choose to use that).

### Create embeddings yourself

Read through the [Multimodal Embeddings documentation](https://cloud.google.com/vertex-ai/generative-ai/docs/embeddings/get-multimodal-embeddings) as our code in `/src/lib/embedder.ts` implements this almost exactly. You'll need to add your project name to this file as well for it to work. You send text, images, or video, and receive back a vector that needs to be store in Firebase.

> `embedder.ts` is also called directly from the Function in `/fb/functions/index.ts` so we didn't have to have two copies of the code in each sub module.

### I have embeddings, now what?

Next, read through the [Firebase Vector Search docs](https://firebase.google.com/docs/firestore/vector-search).

You'll store each image embedding in [a Firestore document](https://firebase.google.com/docs/firestore/vector-search#write_operation_with_a_vector_embedding) via `FieldValue.vector()`, and once you've done this for all your embeddings, you'll need to [create an index of that collection](https://firebase.google.com/docs/firestore/vector-search#create_and_manage_vector_indexes) so the Vector Search can work.

If you have _not_ created an index, but go to `/search` and try to search your collection, you'll get a handy error that gives you the exact code to run in order to start that, something like this:

```bash
gcloud firestore indexes composite create \
--collection-group=collection-group \
--query-scope=COLLECTION \
--field-config field-path=vector-field,vector-config='vector-configuration' \
--database=your-database-id
```

Once indexed, your collection can be searched!

### Searching

Again, everything in this repo follows the [Firebase Vector Search docs](https://firebase.google.com/docs/firestore/vector-search) closely, and for searching, we're [making a nearest-neighbor query](https://firebase.google.com/docs/firestore/vector-search#make_a_nearest-neighbor_query).

Conceptually though, you're doing two things:

1. Embedding _the query_ in order to place it within the same space as your collections embeddings, then
2. Doing a nearest-neighbor lookup to find any results that are nearby to your query.

And since we're using the Multimodal Embeddings API, your query can be text, an image, or a video.

**Important Note** - you'll notice that we also have a file `/src/lib/cloud-firebase.ts`. At time of creating this demo, the actual Search APIs only resided in `@google-cloud/firestore` on NPM, which is separate from the normal Firebase web APIs in npm's `firebase` that are used elsewhere in the app.

### Visualizing

`/viz` takes your Firestore collections and attempts to plot them in 3D using UMAP, an API similar to T-SNE but much faster (and just as non-deterministic).

> [Learn more about UMAP here.](https://pair-code.github.io/understanding-umap/)

<figure>
  <img src="static/viz.png"/>
  <figcaption>/viz using the public weather dataset mentioned above</figcaption>
</figure>

It was a WIP that was never fully completed but should get you 90% of the way there. What's important to note is lowering dimensions on embeddings inherently loses information, so while its a really nice way to visualize things it shouldn't be considered an exact representation of the embeddings (which are 1408 dimensions).

## Experiments for all

This is an experiment, not an official Google product. We’ll do our best to support and maintain this experiment but your mileage may vary.

We encourage open sourcing projects as a way of learning from each other. Please respect our and other creators’ rights, including copyright and trademark rights when present, when sharing these works and creating derivative work. If you want more info on Google's policy, you can find that [here](https://www.google.com/permissions/).


================================================
FILE: multimodal-embeddings/app.yaml
================================================
runtime: nodejs20
service: mm-embed
instance_class: F2
default_expiration: '0s'

# handlers element provides a list of URL patterns and descriptions of how they should be handled.
# https://cloud.google.com/appengine/docs/standard/python/config/appref#handlers_element
handlers:
  - url: /static
    static_dir: static

  - url: /.*
    secure: always
    redirect_http_response_code: 301
    script: auto


================================================
FILE: multimodal-embeddings/components.json
================================================
{
	"$schema": "https://shadcn-svelte.com/schema.json",
	"style": "new-york",
	"tailwind": {
		"config": "tailwind.config.ts",
		"css": "src/app.css",
		"baseColor": "stone"
	},
	"aliases": {
		"components": "$lib/components",
		"utils": "$lib/utils"
	},
	"typescript": true
}

================================================
FILE: multimodal-embeddings/cors.json
================================================
[
	{
		"origin": ["*"],
		"method": ["GET"],
		"maxAgeSeconds": 3600
	}
]


================================================
FILE: multimodal-embeddings/emulator-export/firebase-export-metadata.json
================================================
{
  "version": "13.20.2",
  "firestore": {
    "version": "1.19.8",
    "path": "firestore_export",
    "metadata_file": "firestore_export/firestore_export.overall_export_metadata"
  },
  "storage": {
    "version": "13.20.2",
    "path": "storage_export"
  }
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/blobs/b2e7394a-32cb-45ca-abea-73d0b2df628f
================================================
--boundary
Content-Type: application/json

{"contentType":"text/plain"}
--boundary
Content-Type: text/plain

--boundary--


================================================
FILE: multimodal-embeddings/emulator-export/storage_export/blobs/dd83acba-c2c2-471f-96e6-02a7564ccdf2
================================================
--boundary
Content-Type: application/json

{"contentType":"text/plain"}
--boundary
Content-Type: text/plain

--boundary--


================================================
FILE: multimodal-embeddings/emulator-export/storage_export/buckets.json
================================================
{
	"buckets": [
		{
			"id": "mm-demo.appspot.com"
		}
	]
}


================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/0001871f-3e7a-461d-b428-92efcd1ce0fd.json
================================================
{
  "name": "mmembed/weather/thumb_0595.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214227,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "dc68f214-814b-4152-a8c3-af9a1a0781f3"
  ],
  "etag": "36BWtqv7vexAC1OiGqyOdxIRnjI",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.227Z",
  "updated": "2024-10-02T01:56:54.227Z",
  "size": 7263,
  "md5Hash": "cbJfY8NsRWjyZ2aHtRfFFw==",
  "crc32c": "381430859"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/03da0657-bb18-42fd-9831-7e48c0b723cf.json
================================================
{
  "name": "mmembed/weather/thumb_106.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214209,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "5ef0c5d1-0d7e-405c-8e30-06ba8079c1ee"
  ],
  "etag": "kCworTTvOTm2vjrfrKhLe6ZW0vw",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.209Z",
  "updated": "2024-10-02T01:56:54.209Z",
  "size": 13164,
  "md5Hash": "DucB88Cx3AmGflsnemuA0g==",
  "crc32c": "75427758"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/03f9df1b-0c0d-4014-8a7d-3a5eccad3faf.json
================================================
{
  "name": "mmembed/weather/103.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834213880,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "c0caebb1-4dca-4040-862b-08bd67c78a16"
  ],
  "etag": "k8SJ9dRJMXQgbOcKCs8Tognnzvo",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:53.880Z",
  "updated": "2024-10-02T01:56:53.880Z",
  "size": 16411,
  "md5Hash": "iUfHvP2JqOoxdXfg8kbd+w==",
  "crc32c": "1972598782"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/04b454df-1216-4ec1-84fb-f59afd85fe90.json
================================================
{
  "name": "mmembed/weather/6101.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214163,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "0b9617f7-9b67-4554-89fe-010e4bc2175d"
  ],
  "etag": "KIL8zGyp8+VK/srSl4D0BSElYRM",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.164Z",
  "updated": "2024-10-02T01:56:54.164Z",
  "size": 30704,
  "md5Hash": "VD1ZhLj58KUNotQINc+dAg==",
  "crc32c": "1759807128"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/04f6c107-9611-4db9-aba8-98841ba5ae6f.json
================================================
{
  "name": "mmembed/weather/thumb_124.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214218,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "38e2e524-56e0-45e8-9c7a-5bcfef7d0996"
  ],
  "etag": "k1zlBELgPmn1bICELy1gxJsv9to",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.218Z",
  "updated": "2024-10-02T01:56:54.218Z",
  "size": 11304,
  "md5Hash": "OnTRSZf4UrAvBGsP6dpRkw==",
  "crc32c": "1817449649"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/06640a30-4d8e-4812-890e-e0374ad30f58.json
================================================
{
  "name": "mmembed/weather/0604.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834213923,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "cecfcbbe-eeaf-4ef9-ab5e-44ba21790b5f"
  ],
  "etag": "bmz1wxRcTnu53n8cpDYvkaH66lM",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:53.923Z",
  "updated": "2024-10-02T01:56:53.923Z",
  "size": 39164,
  "md5Hash": "cTWL+fraOVtXbXMBki3qhw==",
  "crc32c": "733542868"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/06919cbe-0678-4bfd-8cec-4d09e8e2d51b.json
================================================
{
  "name": "mmembed/weather/thumb_6096.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214338,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "fb36226f-0da6-40d8-a6ef-173a140a0620"
  ],
  "etag": "8hN4lvAQAJ0/e9cB0cZH0CrbVPM",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.338Z",
  "updated": "2024-10-02T01:56:54.338Z",
  "size": 15174,
  "md5Hash": "Qhyo3YCeCNo5WH/YR0ilkg==",
  "crc32c": "2745637501"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/0a86afce-8076-4ab8-bd65-c1eaf5ec966f.json
================================================
{
  "name": "mmembed/weather/6098.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214154,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "d8b24713-683b-44ff-bfca-9df78c7bcf05"
  ],
  "etag": "kIZ9xrx7aFSzEiThfihBkZ+5FFE",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.154Z",
  "updated": "2024-10-02T01:56:54.154Z",
  "size": 34624,
  "md5Hash": "sYV/Q6+C0OlEKSXddwHBAw==",
  "crc32c": "268759653"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/0b286de2-4d59-442c-933e-76f0f8e3cd0b.json
================================================
{
  "name": "mmembed/weather/thumb_0008.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214200,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "538b70e3-3370-4967-aa1a-b3de33c7f8c6"
  ],
  "etag": "MXva3ZcgDdY33nOtsq6X9frygJA",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.200Z",
  "updated": "2024-10-02T01:56:54.200Z",
  "size": 5277,
  "md5Hash": "DTNZaDwevDkcGlGyNcNhhw==",
  "crc32c": "1754875255"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/0c96fb25-144b-46eb-bdf1-74c575ddb6e9.json
================================================
{
  "name": "mmembed/weather/thumb_2211.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214270,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "591fac23-d94b-4da4-a6cb-5fd44faa285b"
  ],
  "etag": "thl3s6qet0XJ8x+5ONXze4WNF88",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.270Z",
  "updated": "2024-10-02T01:56:54.270Z",
  "size": 10048,
  "md5Hash": "UX9Ow5yj8HNkiyAM4uOgfQ==",
  "crc32c": "1287150674"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/0cf49b23-1d83-41c8-85d3-5c31fbf7b123.json
================================================
{
  "name": "mmembed/weather/thumb_14.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214203,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "8a910879-0a15-4c22-ac27-d125084f50df"
  ],
  "etag": "Xl8PkdCqJlMk7ZX0o2+8e3gM2Sg",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.203Z",
  "updated": "2024-10-02T01:56:54.203Z",
  "size": 14476,
  "md5Hash": "xhszeLK8WJJmvYJdHF8ejg==",
  "crc32c": "1283693818"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/0d5f8ef7-dd37-432a-a0eb-80ccb822abc5.json
================================================
{
  "name": "mmembed/weather/thumb_1838.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214259,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "cb5d25b0-f932-4135-9bd5-85710727ebb3"
  ],
  "etag": "YPLEIaRetS6Ub0uiuHqx87DEv78",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.259Z",
  "updated": "2024-10-02T01:56:54.259Z",
  "size": 10558,
  "md5Hash": "Sy9aUKXvSWDfj2bAAZrVww==",
  "crc32c": "3896045552"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/0d961bbe-aa5c-4d0e-9e53-dc7a7ec2b96c.json
================================================
{
  "name": "mmembed/weather/thumb_6102.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214345,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "cf5fc2e7-9996-4d21-98cb-b698b917d9a0"
  ],
  "etag": "hLZuDXUeSdUky+F6t+vBJhT5elU",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.345Z",
  "updated": "2024-10-02T01:56:54.345Z",
  "size": 13974,
  "md5Hash": "5sDUxjdRXzTO2OCMxVAuvA==",
  "crc32c": "2607937928"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/0e7ec18e-93a5-4d40-845b-92cf98040f13.json
================================================
{
  "name": "mmembed/weather/4087.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214084,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "f97a3b60-6f86-4970-8745-f6464984391a"
  ],
  "etag": "Eop0ILMOwPFe5rOUm8xXuPZuY4E",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.084Z",
  "updated": "2024-10-02T01:56:54.084Z",
  "size": 9765,
  "md5Hash": "y6ig7rdczYOqpELLhBX0cw==",
  "crc32c": "1278155514"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/0ea29a34-dbcf-487a-b0e4-dd1c4028c7e2.json
================================================
{
  "name": "mmembed/weather/3608.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214034,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "68d35210-682b-4a2f-a86a-9dcacc59c2ed"
  ],
  "etag": "cezO0mmpl1mcIWGFmMcYHYEqbu0",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.034Z",
  "updated": "2024-10-02T01:56:54.034Z",
  "size": 104825,
  "md5Hash": "4+FeplRi/qh4ZqskIpUqNQ==",
  "crc32c": "2250252144"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/0fb276ab-ad9f-4cd4-95ea-335d18ea72fe.json
================================================
{
  "name": "mmembed/weather/thumb_1832.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214255,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "bd0a6fc9-eb67-49a6-887d-a7ff1a5a14e5"
  ],
  "etag": "108bJZHvr29ytwB68AJSlpcYO7A",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.255Z",
  "updated": "2024-10-02T01:56:54.255Z",
  "size": 7781,
  "md5Hash": "6uK6+JT0FLOdoYj6giNR4g==",
  "crc32c": "2621317137"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/0ff12c88-f320-4ef7-9356-26fbb9f3590e.json
================================================
{
  "name": "mmembed/weather/thumb_6090.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214328,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "66e3e843-247a-4af4-8159-0b79497ea45c"
  ],
  "etag": "SZRmNX2yfKybTRX5Zzv2aOmTbh4",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.328Z",
  "updated": "2024-10-02T01:56:54.328Z",
  "size": 19043,
  "md5Hash": "HcrTuvHvGntt7n7UX3U6Eg==",
  "crc32c": "1962143993"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/114b11eb-de0d-441b-85d9-d70db5353156.json
================================================
{
  "name": "mmembed/weather/0596.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834213906,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "6b4bd888-826d-40da-8455-fd9d36eda2f8"
  ],
  "etag": "kA0fmU395rCJSy9kUlu2eU09zs0",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:53.906Z",
  "updated": "2024-10-02T01:56:53.906Z",
  "size": 26170,
  "md5Hash": "Ll9+GvegxhYsWWWl3jKX+Q==",
  "crc32c": "2833660459"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/125f8010-6ab0-463f-8278-5565cfc9d618.json
================================================
{
  "name": "mmembed/weather/4078.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214057,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "f359fd83-11e7-495c-9ea1-78be53dd4cc8"
  ],
  "etag": "ZfLR9mb5RGK1XWPlhlQAz3uyai8",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.057Z",
  "updated": "2024-10-02T01:56:54.057Z",
  "size": 73002,
  "md5Hash": "4A92XSgT2T+hmhKei9+jfA==",
  "crc32c": "1155197054"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/1514936f-769c-40b4-bfe4-4746fbc79fcd.json
================================================
{
  "name": "mmembed/weather/thumb_4083.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214321,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "dfd792f8-e006-408a-87d1-f6a21579072c"
  ],
  "etag": "2gYDeBUaZcqAXGwGdVz8G08EpJ8",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.321Z",
  "updated": "2024-10-02T01:56:54.321Z",
  "size": 4334,
  "md5Hash": "E2Z1D7LabIL0k4EpmaIw/A==",
  "crc32c": "1297624009"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/16227ec4-2585-40aa-a5fd-e25e0d227b66.json
================================================
{
  "name": "mmembed/weather/thumb_4075.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214305,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "15381bd4-a7d6-4abc-ad3f-04fd84b24f77"
  ],
  "etag": "iBnYch5qos8DWCNGj3pAlTbAJN8",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.305Z",
  "updated": "2024-10-02T01:56:54.305Z",
  "size": 5133,
  "md5Hash": "Mw+kimOMiWEANeV3AqVInQ==",
  "crc32c": "169736659"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/17f5cac8-e8c5-45c8-b6b3-afaa11b556ff.json
================================================
{
  "name": "mmembed/weather/2209.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834213973,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "d9a7b331-6972-4ab5-b8d7-1508a0ab4929"
  ],
  "etag": "IgmKoZNnLR7zXZd+5ArbhQdkWhc",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:53.973Z",
  "updated": "2024-10-02T01:56:53.973Z",
  "size": 82384,
  "md5Hash": "C7yZ9OnMw0JZ51nvkP7RMQ==",
  "crc32c": "698962223"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/18964cd0-de01-46bd-88c3-ffad0b15b020.json
================================================
{
  "name": "mmembed/weather/thumb_3613.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214304,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "c5c3077e-f52a-473e-a74c-75f9a0d3b320"
  ],
  "etag": "BfXGJqmGOJsAlqwl6ubReLHk+qc",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.304Z",
  "updated": "2024-10-02T01:56:54.304Z",
  "size": 18350,
  "md5Hash": "OR4hIX4Vhdzz/iQ/KSOw1A==",
  "crc32c": "455266503"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/1aca1226-11c8-42f4-8137-339fe674e55c.json
================================================
{
  "name": "mmembed/weather/6095.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214149,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "2f8553e6-8c5a-4aba-941c-d13db58cfaf1"
  ],
  "etag": "+yrJoeBdo/CM1G17v/Y0SmFE3M0",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.149Z",
  "updated": "2024-10-02T01:56:54.149Z",
  "size": 81105,
  "md5Hash": "GPGMZc9t79Lggb1KRZSNtQ==",
  "crc32c": "948006417"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/1b831e3c-a1e8-4eb4-b3d6-de18b656814a.json
================================================
{
  "name": "mmembed/weather/2217.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834213995,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "adc0e2fb-d5b6-4418-90d2-92535c12310f"
  ],
  "etag": "jU0AhhTffx77j3ScNLu/6LuRf40",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:53.995Z",
  "updated": "2024-10-02T01:56:53.995Z",
  "size": 68848,
  "md5Hash": "SwFPkUZxZDWTrr3DuK5scA==",
  "crc32c": "1077058591"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/1ba5a0d9-2902-4a7a-8f33-862cf0abcb38.json
================================================
{
  "name": "mmembed/weather/thumb_6103.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214348,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "6a9e9c74-e9a4-4def-94f6-8bcfb52cc6b8"
  ],
  "etag": "YfZBVfKqu4AXmn+QgN2UZR05emg",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.348Z",
  "updated": "2024-10-02T01:56:54.348Z",
  "size": 16840,
  "md5Hash": "/uhrHofj+BWKGml9qv9wqA==",
  "crc32c": "662099688"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/1bd97095-c1d4-4104-ae2a-f6c0e56dde89.json
================================================
{
  "name": "mmembed/weather/6092.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214086,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "e96effde-8178-47ce-8375-89e5145a2721"
  ],
  "etag": "iBywvrK4EqSDI9O17G5m8JPMpNE",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.086Z",
  "updated": "2024-10-02T01:56:54.086Z",
  "size": 17112,
  "md5Hash": "iQTJaj9t0IVVI0hYIs0wHw==",
  "crc32c": "3830179173"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/1ccff42b-89c8-4a66-9d8c-3c7f1c307625.json
================================================
{
  "name": "mmembed/weather/0011.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834213858,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "19427ea2-3f15-4e71-bf36-32d722530c64"
  ],
  "etag": "gx5ZMUfvAv04oqA2zzFBD/u8bKU",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:53.858Z",
  "updated": "2024-10-02T01:56:53.858Z",
  "size": 15393,
  "md5Hash": "E7W7Vlew1scBd861MX503Q==",
  "crc32c": "1275252314"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/1d363b0e-cea6-4e58-aa6f-17c005c32f60.json
================================================
{
  "name": "mmembed/weather/0001.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834213557,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "8085ff5c-5413-4741-b0f5-299e34e3e1a2"
  ],
  "etag": "Mqwc0wCZJw1uwdBDeHN7xGRdHco",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:53.557Z",
  "updated": "2024-10-02T01:56:53.557Z",
  "size": 218742,
  "md5Hash": "3Rg3Wm7CnzY/B0QnZsQorA==",
  "crc32c": "120931931"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/1e2e00f2-eb8c-432d-91a9-1f49c9bb2087.json
================================================
{
  "name": "mmembed/weather/6099.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214158,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "0d1c3d56-eef3-4310-b935-65bea8ba9e4e"
  ],
  "etag": "+m877m7tpsJmyPyMEgYu//gIgp4",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.158Z",
  "updated": "2024-10-02T01:56:54.158Z",
  "size": 65527,
  "md5Hash": "bFI2tvxK1hO+wszHKTE/nw==",
  "crc32c": "1399365792"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/1e72b424-5c06-42c0-99eb-140545880ccb.json
================================================
{
  "name": "mmembed/weather/3607.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214030,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "1d33d2b8-962a-4b08-b1e0-f29daf182d4a"
  ],
  "etag": "4OFoLgemkP+zygQa2bRy2pLUyow",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.030Z",
  "updated": "2024-10-02T01:56:54.030Z",
  "size": 246261,
  "md5Hash": "bsRZT6YLVGdOSVM8YJzlTQ==",
  "crc32c": "2299355626"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/1e859368-8d5b-4ecc-b30f-116ec3377f39.json
================================================
{
  "name": "mmembed/weather/thumb_2212.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214272,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "32c1a17a-7572-466f-9745-bb7e667a4979"
  ],
  "etag": "vMjrh2kmVK8QAU9wIraQ93a7KGs",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.272Z",
  "updated": "2024-10-02T01:56:54.272Z",
  "size": 9950,
  "md5Hash": "QvSFmZiKMrEfuWEzYKvl7A==",
  "crc32c": "3884699602"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/1f67aea5-0f3e-4b12-9554-aae3a84d5354.json
================================================
{
  "name": "mmembed/weather/thumb_0596.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214228,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "5225a644-9c32-4cba-b14f-e1ae79f11147"
  ],
  "etag": "KM+gVubYdAYUldlE0VJoSuTosa0",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.228Z",
  "updated": "2024-10-02T01:56:54.228Z",
  "size": 6210,
  "md5Hash": "LVEw6Xwzf++yAHiLgd/yNg==",
  "crc32c": "1432835939"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/1fb32b8f-72d0-43ac-8955-d3804be94bc2.json
================================================
{
  "name": "mmembed/weather/thumb_0001.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214179,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "6c8078c4-600e-43d4-a8af-52e1ff9e18a2"
  ],
  "etag": "tkSlwBaTv24h5q21flXIu+Xf4/Y",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.179Z",
  "updated": "2024-10-02T01:56:54.179Z",
  "size": 14648,
  "md5Hash": "N+dUOYoP/oppURUSs157MA==",
  "crc32c": "3009774670"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/2166725e-18e6-4982-aeb7-2f4925461bf1.json
================================================
{
  "name": "mmembed/weather/0000.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834213450,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "4e6ac25b-6323-49fa-bc71-6fb369af0a5e"
  ],
  "etag": "3otu6CamzNyNi7Zkp2ImHdWTYJ0",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:53.450Z",
  "updated": "2024-10-02T01:56:53.450Z",
  "size": 539583,
  "md5Hash": "t2BU1iGJwgI8oe00QcK5GQ==",
  "crc32c": "2394330913"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/21af1f86-eb45-421d-90ff-962fc5509c16.json
================================================
{
  "name": "mmembed/weather/14.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834213869,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "23528ff9-cf7d-4ce3-9c68-f5558f3b1c86"
  ],
  "etag": "yXv128JIIxm7cj7OpCpp+8Jaz3c",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:53.869Z",
  "updated": "2024-10-02T01:56:53.869Z",
  "size": 12281,
  "md5Hash": "bj3/BPS2ORR2w3UrQMxiAg==",
  "crc32c": "2392310858"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/2883e822-976c-4d81-9601-2df44f96bcd7.json
================================================
{
  "name": "mmembed/weather/4083.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214080,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "f299c49b-f15e-494c-8642-a323b2e03d46"
  ],
  "etag": "xOdR8bqTejiFN+HDOfNN4dKQ8FU",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.080Z",
  "updated": "2024-10-02T01:56:54.080Z",
  "size": 9973,
  "md5Hash": "TEGsZAg7x3VN8tFwOuUyUg==",
  "crc32c": "1292903988"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/28a96371-1742-4e03-ae5c-ba309216af49.json
================================================
{
  "name": "mmembed/weather/thumb_1841.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214269,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "6d86ec72-cf93-4c07-ad63-8e02f6be5a71"
  ],
  "etag": "T2I9ooRH9XiOwoXbGwNyHFM2BGY",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.269Z",
  "updated": "2024-10-02T01:56:54.269Z",
  "size": 10400,
  "md5Hash": "iOKioGTPqxA7qhe7x7Wufw==",
  "crc32c": "3469634376"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/2ae61d7e-7bc1-4695-bd44-3637adbef998.json
================================================
{
  "name": "mmembed/weather/thumb_6093.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214340,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "69e0d26c-0a24-449d-851d-db8d32b38b49"
  ],
  "etag": "7rK/yz/gky35aqf8PmYNRGxq0jg",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.340Z",
  "updated": "2024-10-02T01:56:54.340Z",
  "size": 17448,
  "md5Hash": "WjAc7XrTOPSUy3Ltq6oFpw==",
  "crc32c": "1331630286"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/2c938160-fe51-4222-a7d1-8220ad4ee300.json
================================================
{
  "name": "mmembed/weather/thumb_4082.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214326,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "51f886c7-c036-4347-8b0b-b2f0d1a9f55d"
  ],
  "etag": "QFlGAx9m7HJvZTOOD9NZupSYApU",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.326Z",
  "updated": "2024-10-02T01:56:54.326Z",
  "size": 5818,
  "md5Hash": "mtj/V1ZK1Y1Mb/dFBOgiEQ==",
  "crc32c": "1408660470"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/2de6149c-40aa-471f-94a1-2dd2824724d8.json
================================================
{
  "name": "mmembed/weather/thumb_0007.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214190,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "1419c924-6261-47aa-aabe-a470be29f8ce"
  ],
  "etag": "XEWb/Loy0exX9f04vZmhk9+EBv0",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.190Z",
  "updated": "2024-10-02T01:56:54.190Z",
  "size": 19346,
  "md5Hash": "m6yrk4ZgrlJ67p0O+DVlRw==",
  "crc32c": "3479293480"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/2eeccd3b-575d-4055-95d9-c5fbf26b3a8d.json
================================================
{
  "name": "mmembed/weather/thumb_2216.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214277,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "4648d52a-f921-4234-a607-d88b62487598"
  ],
  "etag": "auX1cmVBD/17tF27I7zZTyx4VjE",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.277Z",
  "updated": "2024-10-02T01:56:54.277Z",
  "size": 6507,
  "md5Hash": "i2QVTpLoamZ9Cj1xvV+Bag==",
  "crc32c": "2210589049"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/2efc3c4b-2601-4d8f-ba2b-8d84712c436e.json
================================================
{
  "name": "mmembed/weather/thumb_11.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214196,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "b96a290a-566a-4de6-a487-9e0f509e461d"
  ],
  "etag": "iOUZXj1k5QKjhtQng9VyVHcbzi0",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.196Z",
  "updated": "2024-10-02T01:56:54.196Z",
  "size": 14061,
  "md5Hash": "S4oEhbzFkrgxd6ixg91JLw==",
  "crc32c": "1517782914"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/2f4a0b48-dc3f-4fd4-be4d-726c56619302.json
================================================
{
  "name": "mmembed/weather/thumb_3602.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214294,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "84cc53aa-a000-4e02-8e24-32fdea71365c"
  ],
  "etag": "jUoSabPE8i+hVjFNEdB0JkTIwEc",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.294Z",
  "updated": "2024-10-02T01:56:54.294Z",
  "size": 12040,
  "md5Hash": "QWuRQ9F5TXUurWjPLGe7VA==",
  "crc32c": "2494328559"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/30621326-86e9-4f15-b5ea-6eaad59947df.json
================================================
{
  "name": "mmembed/weather/4082.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214066,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "e11b0d61-19fc-4dd4-b4f0-b92407bb965d"
  ],
  "etag": "Ze8BABPSms/vd2PkLE1Z9SAFF4A",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.066Z",
  "updated": "2024-10-02T01:56:54.066Z",
  "size": 16960,
  "md5Hash": "dEiw7DU5S8vPYOvi/VfNTA==",
  "crc32c": "228427894"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/30d12518-b643-48cf-8608-7aa9771fed14.json
================================================
{
  "name": "mmembed/weather/3609.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214037,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "ccc8f319-a810-4fdc-bef7-c2bfdab00930"
  ],
  "etag": "pnwR5LZQC8lZj7RQGQvhPJ9tzDE",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.037Z",
  "updated": "2024-10-02T01:56:54.037Z",
  "size": 143499,
  "md5Hash": "y+RzIsmE2+VsbJhCWcMIJQ==",
  "crc32c": "651195968"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/31500630-b5a2-4092-86b1-5f2565716d86.json
================================================
{
  "name": "mmembed/weather/thumb_6094.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214335,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "b19bb670-10e8-497f-9238-ded4dd899073"
  ],
  "etag": "Mwr/++U/0H668FSaesqfByC4kj4",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.335Z",
  "updated": "2024-10-02T01:56:54.335Z",
  "size": 17637,
  "md5Hash": "DwzqcITq7ZDSJogk5R6GaA==",
  "crc32c": "3284771992"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/31719f53-507c-4a3f-8b29-0be61178f3e7.json
================================================
{
  "name": "mmembed/weather/thumb_2210.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214275,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "34415b4d-9e1f-4be4-9df1-7aef31140398"
  ],
  "etag": "CkbtX+LCJyZhXT/BNzV0r5gCiH8",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.276Z",
  "updated": "2024-10-02T01:56:54.276Z",
  "size": 15346,
  "md5Hash": "MICuMh82GVetlEC8r2PBrw==",
  "crc32c": "3962969"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/354b878a-20c1-4b79-8a41-2b96e63eedaf.json
================================================
{
  "name": "mmembed/weather/1832.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834213931,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "15dc2f43-1e53-4160-b493-be3fa1fbf299"
  ],
  "etag": "Qsu6aHLyVQE8DguCAX61r8VOt2Y",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:53.931Z",
  "updated": "2024-10-02T01:56:53.931Z",
  "size": 21470,
  "md5Hash": "6KMmupRZkC9RMGMWxxkfhQ==",
  "crc32c": "3889189560"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/362a4319-eac2-4157-82f8-4cc5624ab0ee.json
================================================
{
  "name": "mmembed/weather/1830.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834213927,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "8633bfd8-fdeb-4532-842b-263478513c9a"
  ],
  "etag": "bHSJJivNdoBD2K7VMEjQoV6MF80",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:53.927Z",
  "updated": "2024-10-02T01:56:53.927Z",
  "size": 19711,
  "md5Hash": "yVz8XZqd+ZX9bzdzBJupaA==",
  "crc32c": "4225590086"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/36a45009-4146-4860-ab0f-2d41d6e1b8d2.json
================================================
{
  "name": "mmembed/weather/4076.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214054,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "ae201ab0-7327-4f2f-aa06-3cc039dab0c5"
  ],
  "etag": "P+il+WDRk4p+Cqn9GBOjnIggbGg",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.054Z",
  "updated": "2024-10-02T01:56:54.054Z",
  "size": 12157,
  "md5Hash": "nsPT4IB6yyfOSSXNEe+KGw==",
  "crc32c": "1705056797"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/36b5a479-0181-4f1b-98f4-86a64d4e1191.json
================================================
{
  "name": "mmembed/weather/thumb_6095.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214337,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "e29649ec-2d82-4cbd-998e-bc4c7ca41ecc"
  ],
  "etag": "8nbYjyHjoydaAQu8pAfkFccefCU",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.337Z",
  "updated": "2024-10-02T01:56:54.337Z",
  "size": 25531,
  "md5Hash": "aYuWXI+gnZxzfkWSovd1EA==",
  "crc32c": "1859669618"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/37be70be-0250-4281-9532-401a7bf29f41.json
================================================
{
  "name": "mmembed/weather/thumb_3608.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214296,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "35b88cd4-bd58-4881-bf94-f20b77fc7038"
  ],
  "etag": "LtOfvpJcw/EVFyw7gt3nnJ3UygE",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.296Z",
  "updated": "2024-10-02T01:56:54.296Z",
  "size": 19393,
  "md5Hash": "1uRmOJsaB325LMlg4Wy+Tg==",
  "crc32c": "2188821813"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/3954ab46-6a25-4bb6-ab32-f0d55c546cb2.json
================================================
{
  "name": "mmembed/weather/thumb_0004.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214184,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "10e18a5e-2431-4eaf-b489-77cf13d11712"
  ],
  "etag": "PSz+Ibnmn+cA50WnfCoBsbpHBCo",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.185Z",
  "updated": "2024-10-02T01:56:54.185Z",
  "size": 27633,
  "md5Hash": "BJspDnOFSkMM+JY8HfR9+g==",
  "crc32c": "1932905604"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/3b33aa14-5d04-43bd-9ef6-e30b8861d7db.json
================================================
{
  "name": "mmembed/weather/thumb_3605.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214290,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "afad32ad-efeb-47ff-9e15-72a687ce2665"
  ],
  "etag": "mn3ybaESziO5wllyrZVV6RczGfk",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.290Z",
  "updated": "2024-10-02T01:56:54.290Z",
  "size": 20474,
  "md5Hash": "8jBq+kn7/xfvWTrL/Tr30A==",
  "crc32c": "553899297"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/3b688492-90d3-4d82-b6fc-499bc09e56eb.json
================================================
{
  "name": "mmembed/weather/thumb_2219.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214280,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "d9836b61-01bd-4df1-919b-2d69c724fbff"
  ],
  "etag": "FSlhznQZPghjj5uTHUELB5Imnlo",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.280Z",
  "updated": "2024-10-02T01:56:54.280Z",
  "size": 13864,
  "md5Hash": "H33u22ATlioSkFG8thlnPQ==",
  "crc32c": "4002763423"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/3dccd76d-64a7-47c2-a9b5-eea9b2efa12f.json
================================================
{
  "name": "mmembed/weather/0602.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834213929,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "dfed8198-4140-4450-b2f5-1d2805a40d60"
  ],
  "etag": "P+mSd8wV1G439q46mGCt438GbTM",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:53.929Z",
  "updated": "2024-10-02T01:56:53.929Z",
  "size": 109768,
  "md5Hash": "k7ydXLiycPsoidFdEuHu8A==",
  "crc32c": "162010201"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/3e64b976-d7b3-4356-92d7-0aeb15f45fd5.json
================================================
{
  "name": "mmembed/weather/thumb_13.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214201,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "66e7266d-10bf-486c-9126-d8dac1b15809"
  ],
  "etag": "yngrIBH9iuyvpKNiGEJAdDLC7Cg",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.201Z",
  "updated": "2024-10-02T01:56:54.201Z",
  "size": 27096,
  "md5Hash": "46lmqGK4rtyIRbWh6LfP7g==",
  "crc32c": "2478750340"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/3e966f04-2910-4104-8f1e-412bf33917c0.json
================================================
{
  "name": "mmembed/weather/thumb_0006.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214188,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "e24b256d-029f-4a98-b546-f8f463c21b40"
  ],
  "etag": "rgl3RZiXiNF0csHqahBwQ89zauU",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.188Z",
  "updated": "2024-10-02T01:56:54.188Z",
  "size": 14753,
  "md5Hash": "aN+1iWnlB98OdT14uX64cw==",
  "crc32c": "492567308"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/412215ae-10af-413a-9f75-861667cf12fe.json
================================================
{
  "name": "mmembed/weather/thumb_0598.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214241,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "6cfaf55b-dcd1-4b6f-a730-9729abf0f64b"
  ],
  "etag": "ou3cFpP7u2pjUcJR8wQjOoC5LD4",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.241Z",
  "updated": "2024-10-02T01:56:54.241Z",
  "size": 9244,
  "md5Hash": "lqF9mhBbyP+p6dlFI0j4NQ==",
  "crc32c": "3454634838"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/41e09631-0791-4051-96ce-4e18d05f2be9.json
================================================
{
  "name": "mmembed/weather/thumb_0005.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214187,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "75718b25-82b7-4e90-b111-01ee7f7501e8"
  ],
  "etag": "l4hQ9871l41vTqT9e6wY9XsNGaU",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.187Z",
  "updated": "2024-10-02T01:56:54.187Z",
  "size": 13574,
  "md5Hash": "i70e6kiJHFl+XSWmk1wjZw==",
  "crc32c": "1731491201"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/4223ad2c-c8fc-4f31-8454-284312b22905.json
================================================
{
  "name": "mmembed/weather/thumb_0010.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214195,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "27c1191c-c2ac-4335-9d73-42b1ed62c84d"
  ],
  "etag": "jTrHC/sAc9PZLECjdXVb+7byJyk",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.195Z",
  "updated": "2024-10-02T01:56:54.195Z",
  "size": 5356,
  "md5Hash": "rPwsVftTIFRvP1zq6iK2Ng==",
  "crc32c": "3949780381"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/42694520-432b-4928-adce-006db533f6f8.json
================================================
{
  "name": "mmembed/weather/thumb_6092.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214332,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "f3430f0c-b1d2-4c52-bcc6-a57cbade8045"
  ],
  "etag": "NCgaSVMevOt1C8m+6Fr0gsjLj4o",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.332Z",
  "updated": "2024-10-02T01:56:54.332Z",
  "size": 6491,
  "md5Hash": "LZiiA9C0yKxdIRIw4xyt3g==",
  "crc32c": "2951203737"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/4418a01d-24ec-4e4b-b29a-e0689b395969.json
================================================
{
  "name": "mmembed/weather/124.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834213896,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "727ba136-973a-44ff-96a7-324a32039900"
  ],
  "etag": "QPh1gzuG0mlEDneHO0WsyiE3Os4",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:53.896Z",
  "updated": "2024-10-02T01:56:53.896Z",
  "size": 23894,
  "md5Hash": "77tgnbLz73hZDIqZrscJ/A==",
  "crc32c": "887769651"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/45131a81-db3a-4f9b-9330-5e2eb2b3eb44.json
================================================
{
  "name": "mmembed/weather/1840.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834213960,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "f96a5ad8-d2ea-4f08-b51b-3d549fad432c"
  ],
  "etag": "9aNgHf1isHpLEQ/dX6OYJtZeBac",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:53.960Z",
  "updated": "2024-10-02T01:56:53.960Z",
  "size": 32933,
  "md5Hash": "fBaaR9VX06ivQCsBVI7lVw==",
  "crc32c": "1744366507"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/454a16c7-6ec4-4c29-838f-6d235d729c0d.json
================================================
{
  "name": "mmembed/weather/thumb_3604.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214289,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "1fb990cf-1058-43da-9a6c-5431270d0631"
  ],
  "etag": "YV2mgi2fgaUZY3wCplu2PyIvgtE",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.289Z",
  "updated": "2024-10-02T01:56:54.289Z",
  "size": 9632,
  "md5Hash": "tWJj5paDt7Y9mANH1RzXjQ==",
  "crc32c": "3605923073"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/45b0127e-7f92-437f-97e4-f96b50ca60f6.json
================================================
{
  "name": "mmembed/weather/thumb_1839.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214260,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "5c03cd07-50cd-4141-a3fb-56d99223449d"
  ],
  "etag": "xpVrhqw9D43bFkcMzE/G6zq2hwA",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.260Z",
  "updated": "2024-10-02T01:56:54.260Z",
  "size": 4612,
  "md5Hash": "Oa0H97mjZ42z5tf8UMeeRw==",
  "crc32c": "3687014695"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/460d8563-7063-413d-aa9c-d50fb8c9a0a3.json
================================================
{
  "name": "mmembed/weather/thumb_3607.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214303,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "bfceba7b-408a-49d2-85ff-e669a6f21292"
  ],
  "etag": "9/ihJD9hQ3QdVufOVqNw3w4mygY",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.303Z",
  "updated": "2024-10-02T01:56:54.303Z",
  "size": 13181,
  "md5Hash": "AtNGp96+AAAw/PprhuKCjw==",
  "crc32c": "169596319"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/464ea502-b1a7-47a1-af48-7b4296b13896.json
================================================
{
  "name": "mmembed/weather/0592.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834213907,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "7d909733-ac14-4419-9068-e6da95783596"
  ],
  "etag": "jF9SYVzxUBOu63GW3cv9Yje4dmI",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:53.907Z",
  "updated": "2024-10-02T01:56:53.907Z",
  "size": 53095,
  "md5Hash": "uo5N9JedSjjUTUSgkHjERA==",
  "crc32c": "3657379677"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/477f1478-d154-44c1-9b3e-f7bc08b81b1b.json
================================================
{
  "name": "mmembed/weather/106.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834213886,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "90a32e61-40fb-4fca-9ec8-52f4ff67910a"
  ],
  "etag": "KU9A0y3v84BH7jWUB/E2+WBsqbU",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:53.886Z",
  "updated": "2024-10-02T01:56:53.886Z",
  "size": 21849,
  "md5Hash": "MjPpZUODEzK0TP6Kh01Npw==",
  "crc32c": "1516988867"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/47a173ba-dd3f-4e02-8409-e46bf5c831ca.json
================================================
{
  "name": "mmembed/weather/0593.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834213900,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "affcfda3-e19b-49d9-b612-190638a797ce"
  ],
  "etag": "9bXcK+zQ3JGuLkG/s4gPCgd8730",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:53.900Z",
  "updated": "2024-10-02T01:56:53.900Z",
  "size": 115829,
  "md5Hash": "WSV/E6ETEDN9oBU2bQaaDw==",
  "crc32c": "486872548"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/47eb894d-5a60-4c64-b22a-f496f63a869e.json
================================================
{
  "name": "mmembed/weather/thumb_6091.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214330,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "6b314ac1-6a05-48af-bc1d-90b7ae087ebe"
  ],
  "etag": "eCbgGLT9fJ3DUO/h7imZ2AHczUA",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.330Z",
  "updated": "2024-10-02T01:56:54.330Z",
  "size": 33125,
  "md5Hash": "0imAdgbpsQj5mf2mSE3IlA==",
  "crc32c": "2996066578"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/487cbb33-22c6-41f6-8e6e-4125927e2f20.json
================================================
{
  "name": "mmembed/weather/thumb_0599.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214236,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "bc930d72-2e0f-47e8-aecd-3a675237fc85"
  ],
  "etag": "vj6gSRIu6WeVkExwwyAQkFn1uGc",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.236Z",
  "updated": "2024-10-02T01:56:54.236Z",
  "size": 2991,
  "md5Hash": "zTZmMLaiduXHKI01iY/Flg==",
  "crc32c": "1443784698"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/495964a6-f764-487d-aec8-a1c1c02d8be3.json
================================================
{
  "name": "mmembed/weather/2215.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834213991,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "72fa668e-e67e-4ea9-9764-c16bc4773f15"
  ],
  "etag": "AtZ4gamvXGLf+YRil6SNAj1pfuU",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:53.991Z",
  "updated": "2024-10-02T01:56:53.991Z",
  "size": 50405,
  "md5Hash": "JfggXOu+UjX0A1CeVOuq5g==",
  "crc32c": "4280889935"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/4ad91f5f-7c9e-40e4-9c4f-c03a22bd8b2f.json
================================================
{
  "name": "mmembed/weather/1838.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834213957,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "9f8afbdd-8a32-4dfe-b4a6-b6070664bb6e"
  ],
  "etag": "COWpWHEwcd6MwTwlvxGc4MPkIfI",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:53.957Z",
  "updated": "2024-10-02T01:56:53.957Z",
  "size": 27264,
  "md5Hash": "i1akiaYkbk4T08zRt79olw==",
  "crc32c": "2625837919"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/5012b076-ef07-41c8-9da7-033e2af2f579.json
================================================
{
  "name": "mmembed/weather/thumb_102.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214204,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "35444da3-8425-41ce-8886-a756cebdb00b"
  ],
  "etag": "hz1LPcgP16jv74x/9TEEsXyla9o",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.204Z",
  "updated": "2024-10-02T01:56:54.204Z",
  "size": 18821,
  "md5Hash": "QuP/MBSHHwd9lAnOBYhwzg==",
  "crc32c": "3789881989"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/50b673c2-e1b9-4b84-bbcc-1c47cca0cace.json
================================================
{
  "name": "mmembed/weather/thumb_4076.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214307,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "54735d91-caa8-452d-86a8-9fb579ca50c8"
  ],
  "etag": "/AgTV/fbMen2FufU7J1LivfxsLM",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.307Z",
  "updated": "2024-10-02T01:56:54.307Z",
  "size": 7830,
  "md5Hash": "eKCZRMiLJl3+wCa6Ad+YMQ==",
  "crc32c": "259118115"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/530a9038-98b8-4925-b26b-f5c7776d882f.json
================================================
{
  "name": "mmembed/weather/3606.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214024,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "a25f918e-095e-409e-9582-95bb85c15cde"
  ],
  "etag": "LaNXGBnFQeeqhbqMLTtEWm8Amtw",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.024Z",
  "updated": "2024-10-02T01:56:54.024Z",
  "size": 603596,
  "md5Hash": "nUykxJA/bboVK7I0WyOPGQ==",
  "crc32c": "3099203018"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/55e55a5c-a59a-4c7f-846a-73784ee2f25d.json
================================================
{
  "name": "mmembed/weather/0003.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834213621,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "cecf4476-5182-4f6c-95ec-713426b8f2ad"
  ],
  "etag": "bngEx7bxIOkZBqosHMubh2Bb2W8",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:53.621Z",
  "updated": "2024-10-02T01:56:53.621Z",
  "size": 13733,
  "md5Hash": "xnrgPwP2jPZJ9ZoTuyMicA==",
  "crc32c": "1739771885"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/563a8d9a-0285-4496-aaba-59138c349dad.json
================================================
{
  "name": "mmembed/weather/6093.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214137,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "c4c2d5f9-0a4e-42ff-9058-0cee4c01e695"
  ],
  "etag": "G/GFdMINYijbjonEHXRxH0YFVYs",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.137Z",
  "updated": "2024-10-02T01:56:54.137Z",
  "size": 53877,
  "md5Hash": "/aIkhYm4NNIlaQkb5fKomw==",
  "crc32c": "549122946"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/58852f43-76ea-4ad1-9c6a-a33c2c53ff56.json
================================================
{
  "name": "mmembed/weather/thumb_0601.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214238,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "fe6531cf-0cec-4ae0-93fe-5d94475829a5"
  ],
  "etag": "sI5kosKgk35AGzECbhiIX+vPHGg",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.239Z",
  "updated": "2024-10-02T01:56:54.239Z",
  "size": 7430,
  "md5Hash": "4MqvPK+1q4def/E0KPTLzg==",
  "crc32c": "3466385387"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/5a3ce50b-2658-4f68-b12d-0eec92a7223a.json
================================================
{
  "name": "mmembed/weather/0013.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834213868,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "60ec79c0-9e88-4281-bcfe-2bb5b0e7f044"
  ],
  "etag": "QUvjciRqphu3PDPLkQKuWoKLm0k",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:53.868Z",
  "updated": "2024-10-02T01:56:53.868Z",
  "size": 16205,
  "md5Hash": "1CfteG+uGzrpmbkhkb6igw==",
  "crc32c": "574220549"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/5a3ecd67-d20b-405d-83f7-86ff772f6d6f.json
================================================
{
  "name": "mmembed/weather/3600.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214020,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "b32b4d21-7e78-423a-b9d1-37cca1400f72"
  ],
  "etag": "zgCG856MJkxlhgYOu02M4YMLM7c",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.020Z",
  "updated": "2024-10-02T01:56:54.020Z",
  "size": 28028,
  "md5Hash": "WGmoF47MOum3Zo9vrtl/zQ==",
  "crc32c": "1934178353"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/5b388511-e3b8-4d3f-b0bf-d085f75c7769.json
================================================
{
  "name": "mmembed/weather/2211.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834213984,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "fab174f1-6742-496f-998e-af5e71067a2f"
  ],
  "etag": "fhqY84X6UV1dhUqv5MfliUM12eE",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:53.984Z",
  "updated": "2024-10-02T01:56:53.984Z",
  "size": 152175,
  "md5Hash": "pUCkLaR99u2yCieH5py8Kw==",
  "crc32c": "2764797711"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/5b62fd41-e2a2-4ba6-b305-a854619a947b.json
================================================
{
  "name": "mmembed/weather/0605.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834213925,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "911f6664-eb6f-4476-8da5-68819c391377"
  ],
  "etag": "TJqzPSAUC+x6vpxI1N7pVPjMbWQ",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:53.925Z",
  "updated": "2024-10-02T01:56:53.925Z",
  "size": 17757,
  "md5Hash": "HREGccJqC4+lpvGR56RK7w==",
  "crc32c": "503857714"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/5ef2346d-d39e-49ce-b26a-9e5069dba421.json
================================================
{
  "name": "mmembed/weather/thumb_1830.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214245,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "4949bd26-82c5-4328-9fc9-5c1c477e4a16"
  ],
  "etag": "kCrj3756USzzYaASOZ9tNKvNK9M",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.245Z",
  "updated": "2024-10-02T01:56:54.245Z",
  "size": 5036,
  "md5Hash": "h/sR7Qoo78md/48zjEPIxQ==",
  "crc32c": "1710719719"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/5fd6d66a-8bf1-4f81-b0eb-9895552a8ec4.json
================================================
{
  "name": "mmembed/weather/6103.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214166,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "a2845089-4277-46f2-8291-e124787ef0df"
  ],
  "etag": "W+b3frXMQ1FDhyQLZlQ8ixdFD5M",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.166Z",
  "updated": "2024-10-02T01:56:54.166Z",
  "size": 68373,
  "md5Hash": "8QLdvu/5AP3zd5dImHZnQg==",
  "crc32c": "2865485624"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/61556f93-4dd2-43e5-bc4d-78cbe3809d42.json
================================================
{
  "name": "mmembed/weather/1843.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834213969,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "f5423ad6-87f2-4d5a-b959-06ee45f01396"
  ],
  "etag": "uT8QFPTu8s27gzWZimzKk7/M0ys",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:53.969Z",
  "updated": "2024-10-02T01:56:53.969Z",
  "size": 26236,
  "md5Hash": "eMH7jvZfzrPwfJ9IZz+X0Q==",
  "crc32c": "4270796985"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/620c1be4-e353-46d9-8dbd-c3079d5efd6e.json
================================================
{
  "name": "mmembed/weather/thumb_2218.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214279,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "58d03cd2-022d-41b1-af74-25b198b75efc"
  ],
  "etag": "wISTnZ7oQX3KlA5+eQxvduQivls",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.279Z",
  "updated": "2024-10-02T01:56:54.279Z",
  "size": 14001,
  "md5Hash": "EWjvR1y5f0eUP5GQgVXUog==",
  "crc32c": "1369497715"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/62b85256-0f54-47cb-ae83-d45cd0a66030.json
================================================
{
  "name": "mmembed/weather/1833.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834213934,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "2200ead9-e8fb-4775-a6a3-27c67987d98f"
  ],
  "etag": "8KvdjysS1w/6Jx/CXiAhOrsDfjE",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:53.934Z",
  "updated": "2024-10-02T01:56:53.934Z",
  "size": 126668,
  "md5Hash": "v9uxoePXfz4QnXChJbrUmA==",
  "crc32c": "4133910751"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/64609c87-07e8-48a4-b8c2-a26210e1dd0b.json
================================================
{
  "name": "mmembed/weather/thumb_3606.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214292,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "ff760ced-f87e-418e-aa83-3669f7c845a7"
  ],
  "etag": "d8WfrO0CvzDVV4i+JWM5RO2Ho0c",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.292Z",
  "updated": "2024-10-02T01:56:54.292Z",
  "size": 22335,
  "md5Hash": "VC1N5in+R2BcGYVPf/Kq1Q==",
  "crc32c": "1788696116"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/64f13cdd-ee8c-4238-b66b-14c1baa578e3.json
================================================
{
  "name": "mmembed/weather/4086.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214077,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "cb0014b8-6ccc-4d64-82b4-f476cc5a2e48"
  ],
  "etag": "SmReYlruPXIo6Dito/maMYsHf4k",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.077Z",
  "updated": "2024-10-02T01:56:54.077Z",
  "size": 39256,
  "md5Hash": "YftzDtUDeaO5EFSmvIojwQ==",
  "crc32c": "3662402265"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/65c4dee4-4429-4eae-9250-2e969f3c190a.json
================================================
{
  "name": "mmembed/weather/thumb_4080.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214313,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "ac5cb996-588f-4035-a466-4ffe00c42639"
  ],
  "etag": "HzUU1MrNtOOlZ078SldpFf1EfsY",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.313Z",
  "updated": "2024-10-02T01:56:54.313Z",
  "size": 5787,
  "md5Hash": "5+gro/fUDo1nRuO3CK+hkg==",
  "crc32c": "3803752996"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/66569702-2074-4047-a794-4f11e3b285f2.json
================================================
{
  "name": "mmembed/weather/4075.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214047,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "dd222bb2-836f-453d-acd3-7fa7b2f6a9b9"
  ],
  "etag": "nO8pOfVz8+kIv0lo9dnv2j+/dTM",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.047Z",
  "updated": "2024-10-02T01:56:54.047Z",
  "size": 47697,
  "md5Hash": "IvqpVthzTYHdDdmfSUnmYg==",
  "crc32c": "2393731617"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/67aaca3d-2acc-4987-8ed9-3f2fbf075f7c.json
================================================
{
  "name": "mmembed/weather/2214.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834213989,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "3beaf521-4b5a-4816-bbc8-3bc0c12a99ed"
  ],
  "etag": "prmucYR8TJuDuF+GvTj6op9jMR4",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:53.989Z",
  "updated": "2024-10-02T01:56:53.989Z",
  "size": 55305,
  "md5Hash": "APKEA6TLVXzgcbH7zY3jKA==",
  "crc32c": "1323378059"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/67b6aeb1-b7d0-4402-8a60-b2f9c0c8b447.json
================================================
{
  "name": "mmembed/weather/2216.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834213993,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "48e4100d-8870-45a1-a633-5675c0efa081"
  ],
  "etag": "W/0gQsvuevg6427l1/ZceAaTKWo",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:53.993Z",
  "updated": "2024-10-02T01:56:53.993Z",
  "size": 110773,
  "md5Hash": "nRTETV67es90Vo5xN2Y2NQ==",
  "crc32c": "560262473"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/686d4f0b-5c28-48f4-b656-b354a13981a7.json
================================================
{
  "name": "mmembed/weather/thumb_0600.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214237,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "68380d0a-fff9-4091-9064-7b616de385bf"
  ],
  "etag": "2JcvxU9inHjh8QVo850iqruXdkg",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.237Z",
  "updated": "2024-10-02T01:56:54.237Z",
  "size": 7463,
  "md5Hash": "oYm//K8/M991iaB6LGf8ow==",
  "crc32c": "652887366"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/69657785-7299-408d-8453-8cb32f848150.json
================================================
{
  "name": "mmembed/weather/2220.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834213998,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "9723402e-e7fe-4b66-a194-abe8da711d8a"
  ],
  "etag": "b82ImF8DBQznCWrkutLCaXCjJuE",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:53.998Z",
  "updated": "2024-10-02T01:56:53.998Z",
  "size": 240631,
  "md5Hash": "480XiYifKZmg83tZurcLyQ==",
  "crc32c": "1959190398"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/6b6f7c8b-a5b9-4436-80a0-f128c1eb3bcf.json
================================================
{
  "name": "mmembed/weather/2218.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214004,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "4b6ee53f-d130-4a73-a421-d1359e461f9d"
  ],
  "etag": "O9zYErRG7jjrp/SEqaM9lvdpnZc",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.004Z",
  "updated": "2024-10-02T01:56:54.004Z",
  "size": 105169,
  "md5Hash": "Y4ivqX2d4Emu/acyy2o9ug==",
  "crc32c": "1468776016"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/6d8f5f9c-fef6-4179-ba05-79e361503c7a.json
================================================
{
  "name": "mmembed/weather/thumb_1842.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214264,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "d5a42bc8-a9e7-4ead-b187-729a19222992"
  ],
  "etag": "5rl9oLEuswNcG8Lnk8ppUdvzCkk",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.264Z",
  "updated": "2024-10-02T01:56:54.264Z",
  "size": 3739,
  "md5Hash": "P5BLZCL8FIaSbMlwm9xVvg==",
  "crc32c": "2919985240"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/70772163-4c3b-493a-ad04-87b67ee35d71.json
================================================
{
  "name": "mmembed/weather/thumb_119.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214223,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "212998eb-efa9-468e-85cf-bb928dfc8cb6"
  ],
  "etag": "osvQLJW5RYqc9O1+M4kktPNGOdU",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.223Z",
  "updated": "2024-10-02T01:56:54.223Z",
  "size": 184568,
  "md5Hash": "rgkaIA10HXFLSyWM7VDBoA==",
  "crc32c": "3219441820"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/70c43a85-254c-49b1-bf14-d13687913f2d.json
================================================
{
  "name": "mmembed/weather/0010.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834213851,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "32ab255e-b06d-4753-8c1d-10bb472e2894"
  ],
  "etag": "+0wujO4BADxdGadQDJf/oiN4sXw",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:53.851Z",
  "updated": "2024-10-02T01:56:53.851Z",
  "size": 11953,
  "md5Hash": "c8tR5NDTdqZqEzgz8PBvVA==",
  "crc32c": "871164411"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/70db2153-5bbf-42f6-91bc-f3cb4249dc01.json
================================================
{
  "name": "mmembed/weather/109.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834213877,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "5c9d4026-f8f3-4fa7-9317-61a4c872dc33"
  ],
  "etag": "TmdBvuaECpRq8XJVAmhp8TZj/I4",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:53.877Z",
  "updated": "2024-10-02T01:56:53.877Z",
  "size": 48526,
  "md5Hash": "sLc3SM09LHnm78qJTmwjeA==",
  "crc32c": "3051722894"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/70ef85a5-fb7a-41ff-ac02-0d00927d0274.json
================================================
{
  "name": "mmembed/weather/119.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834213893,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "c574255b-e4dc-4a82-ba2b-2bd3982641e7"
  ],
  "etag": "n7eIUY/8C2YdIiJGosQ0P9hDy8M",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:53.894Z",
  "updated": "2024-10-02T01:56:53.894Z",
  "size": 201953,
  "md5Hash": "cSLL1qbqsPZq1pXKp2TrGg==",
  "crc32c": "3016202184"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/70fc8a82-bfeb-4bb7-bb95-2a654168ead1.json
================================================
{
  "name": "mmembed/weather/thumb_6101.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214344,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "5e6448d9-9bac-497e-bf6b-8dfc1d4a860c"
  ],
  "etag": "Yi46ueXmnar/+xX180By/71gQs0",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.344Z",
  "updated": "2024-10-02T01:56:54.344Z",
  "size": 21495,
  "md5Hash": "/2aXK45YqlzyWLGsC0QM1A==",
  "crc32c": "105193236"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/71894824-0cd9-4acf-9178-abba58090e42.json
================================================
{
  "name": "mmembed/weather/thumb_0000.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214177,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "660e7b50-a1c9-4143-bcc6-4baa330cbf41"
  ],
  "etag": "oLrsvK0/XrJhucp15NIcQBLgRok",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.177Z",
  "updated": "2024-10-02T01:56:54.177Z",
  "size": 21893,
  "md5Hash": "pPKb1T0Pbn9tznH4TrieHA==",
  "crc32c": "2709331183"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/721bdd57-7850-42e4-9fb9-747525b187c8.json
================================================
{
  "name": "mmembed/weather/2210.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834213978,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "833069fd-9274-48ae-a473-01dcb55c52d2"
  ],
  "etag": "NxOLgVfi2bGXsjWj6ijsyeyjMDI",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:53.979Z",
  "updated": "2024-10-02T01:56:53.979Z",
  "size": 137409,
  "md5Hash": "MY1mvHenkUQDerOoOyEUag==",
  "crc32c": "3024698090"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/7706c66e-3fd9-45eb-9df5-8308b84dd194.json
================================================
{
  "name": "mmembed/weather/thumb_0594.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214234,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "f031d5e0-75b3-485c-9a3b-1f5a29a72aea"
  ],
  "etag": "xnMo0nveehbnlKqQOxgRrpuui0s",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.234Z",
  "updated": "2024-10-02T01:56:54.234Z",
  "size": 6568,
  "md5Hash": "6bYB+1yEYyn9Suxz9hXAZw==",
  "crc32c": "2042269277"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/7846c694-8e7a-47dd-b8b8-a2448285dcc0.json
================================================
{
  "name": "mmembed/weather/2221.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214002,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "c451dc62-9aa4-41af-a8fe-d491e9fdef94"
  ],
  "etag": "4HTyUZHaphEnrmTrO2LOoUMGypI",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.002Z",
  "updated": "2024-10-02T01:56:54.002Z",
  "size": 130087,
  "md5Hash": "nwRhNI02O2iYOBeFc3a/Xw==",
  "crc32c": "876363489"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/78a3c767-265f-419d-bb3f-c3eba6e22017.json
================================================
{
  "name": "mmembed/weather/6097.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214152,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "3ac00b79-78be-476b-982d-4ac07a2c116a"
  ],
  "etag": "qHOhIUmZxyiGUGxuUiKEBCP1nRM",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.152Z",
  "updated": "2024-10-02T01:56:54.152Z",
  "size": 10514,
  "md5Hash": "W5tvMEYVy7Ub1NRioyV5rg==",
  "crc32c": "2863558512"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/78dd9bfd-a0ca-4ac9-9473-45d0d051fb1e.json
================================================
{
  "name": "mmembed/weather/thumb_4085.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214323,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "7e6394a8-d4a2-46bd-a30a-2b94a3908f5a"
  ],
  "etag": "6rqOmp0TTT9YbTORm/n3lcpgP58",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.323Z",
  "updated": "2024-10-02T01:56:54.323Z",
  "size": 5733,
  "md5Hash": "fOWQsKphj47TRFJRfT7WGw==",
  "crc32c": "1594951559"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/799fcdd0-1054-4c53-a218-48cb8f3ed044.json
================================================
{
  "name": "mmembed/weather/3610.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214050,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "5a3a7482-f47c-4b5d-a0ff-d29297bdbbc4"
  ],
  "etag": "OF4HrO4/YpO4AT1EwjB7sIYwwNk",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.050Z",
  "updated": "2024-10-02T01:56:54.050Z",
  "size": 330766,
  "md5Hash": "HohL6/hC2Ez78T5XWzgqEQ==",
  "crc32c": "3322523345"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/7a5a7379-d29b-412b-9a50-565e171ab712.json
================================================
{
  "name": "mmembed/weather/3612.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214060,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "b1954fab-edb2-4ee0-9bc3-adb3d62d58c0"
  ],
  "etag": "Nm4gapwheutdZv89Xd7uxYtoYtA",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.060Z",
  "updated": "2024-10-02T01:56:54.060Z",
  "size": 178642,
  "md5Hash": "KmX44pUzFa3EhNHDKIqR2A==",
  "crc32c": "3247754625"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/7c12f79f-d474-446f-b5fe-f669e60f8227.json
================================================
{
  "name": "mmembed/weather/thumb_0009.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214193,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "5ed76562-4a28-4a25-a454-33aeec4b27c9"
  ],
  "etag": "c6a8/GHF0OBZghgQJA+FPE8PMtY",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.193Z",
  "updated": "2024-10-02T01:56:54.193Z",
  "size": 7599,
  "md5Hash": "sSv5IQBzTLfSFfv+fMbmoQ==",
  "crc32c": "714336334"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/7c4a2540-75b9-4e37-b4b1-a6d7f62830cb.json
================================================
{
  "name": "mmembed/weather/thumb_110.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214216,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "14381b2f-76b1-4858-8842-4ac8e3a72cc0"
  ],
  "etag": "wEBBzEAU5NNvVNaNskfGZftch84",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.216Z",
  "updated": "2024-10-02T01:56:54.216Z",
  "size": 14074,
  "md5Hash": "4Q6ugWCDx4YcCNItDXwdVg==",
  "crc32c": "3833393849"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/7c689600-cf26-4953-8be5-ae58faa5cad0.json
================================================
{
  "name": "mmembed/weather/thumb_1834.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214251,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "b836a652-7f4e-4545-bf82-3656ff9cbc6b"
  ],
  "etag": "psNiCiLdvSLyXwhqNqehbVT4lbM",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.251Z",
  "updated": "2024-10-02T01:56:54.251Z",
  "size": 6774,
  "md5Hash": "/wYDZinpYwHynnPfoCRzhw==",
  "crc32c": "2304315075"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/7d321a59-d6c9-433e-bfcb-2ee10dcd2745.json
================================================
{
  "name": "mmembed/weather/6102.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214182,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "71cf147d-11c1-4140-b568-91d6bf1924c8"
  ],
  "etag": "Gnq9yHrKiPQDBEnUSJpJWSqyP8A",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.183Z",
  "updated": "2024-10-02T01:56:54.183Z",
  "size": 37928,
  "md5Hash": "j0RLbyd4qOiwNxeLBKSBfQ==",
  "crc32c": "1082194485"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/7ff005e0-3f17-423f-9a04-1d762447eb07.json
================================================
{
  "name": "mmembed/weather/thumb_3603.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214295,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "765b3423-3bf3-4eb0-9438-51248125b826"
  ],
  "etag": "FPNmjT38rhVqlG1znVGsBDXz2r0",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.295Z",
  "updated": "2024-10-02T01:56:54.295Z",
  "size": 18808,
  "md5Hash": "xeU3eYbTPsZt6FJv+klnrg==",
  "crc32c": "4276021197"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/8278f4eb-708a-4054-b408-9b4a2a8d6b7a.json
================================================
{
  "name": "mmembed/weather/thumb_0012.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214206,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "86363b5c-2edc-431c-aa57-fb789e19e15d"
  ],
  "etag": "Re2SnK2f4i7a2/8UEm3Xh9n49AE",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.206Z",
  "updated": "2024-10-02T01:56:54.206Z",
  "size": 62035,
  "md5Hash": "JHwk8v4LncD3y+JVoV180g==",
  "crc32c": "3453592618"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/828f697d-fd40-470e-8326-8a40dccf9096.json
================================================
{
  "name": "mmembed/weather/thumb_4081.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214314,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "ed661fc5-b1e6-4597-8284-c64af03761b2"
  ],
  "etag": "qzBi9T2GqaMx0BBPe6ykGWUgC50",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.315Z",
  "updated": "2024-10-02T01:56:54.315Z",
  "size": 6778,
  "md5Hash": "FGrKvi2M4dHY/ARO8XdqCA==",
  "crc32c": "1041255470"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/832cacff-0ed7-4685-a383-a0d94e6a366e.json
================================================
{
  "name": "mmembed/weather/thumb_1835.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214252,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "c584bd98-19f5-438c-a9ee-75588cc152d4"
  ],
  "etag": "Gs4GJ7eJOJbHT2qKZ4yeWTudJxU",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.252Z",
  "updated": "2024-10-02T01:56:54.252Z",
  "size": 5994,
  "md5Hash": "Giyn9TwDMkj6kMUMR4gd9w==",
  "crc32c": "2908595589"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/84307d32-0903-4a1c-8599-9d3938995da6.json
================================================
{
  "name": "mmembed/weather/4080.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214063,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "3a1c3103-356e-4827-8cc6-b35d17322317"
  ],
  "etag": "Kv7Zw01geZzRdVPSpOGqDtYcohs",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.063Z",
  "updated": "2024-10-02T01:56:54.063Z",
  "size": 8026,
  "md5Hash": "JKH1aDs6nAB7Uhgzyidt5A==",
  "crc32c": "2659669049"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/84491769-76dd-4667-825d-95156d99ba3f.json
================================================
{
  "name": "mmembed/weather/1834.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834213937,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "d4374770-9e98-48f4-a2a2-976adcf0b616"
  ],
  "etag": "T6RhNbSkZaFszl1Z1t99eM7km20",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:53.937Z",
  "updated": "2024-10-02T01:56:53.937Z",
  "size": 21036,
  "md5Hash": "k1IrjYDX/6607vDOAoCiYg==",
  "crc32c": "2629582504"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/848c006e-a50c-4d24-9e96-f9b12ab5f66b.json
================================================
{
  "name": "mmembed/weather/1841.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834213976,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "34df9bb7-e2cc-4c82-92c5-c19951c81a07"
  ],
  "etag": "G2hY5uaL2Jm/vbyqgHvtmYZaFDc",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:53.976Z",
  "updated": "2024-10-02T01:56:53.976Z",
  "size": 14853,
  "md5Hash": "SwZNMDw/oX7nNJ268sP3BQ==",
  "crc32c": "2387074229"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/8628a1cb-e588-483c-b00f-ba449d2c27b1.json
================================================
{
  "name": "mmembed/weather/thumb_4088.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214327,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "14e18b82-4118-4fff-80cd-1f9c353fd485"
  ],
  "etag": "6490ilJZi9nTg1qvfBYHE64mbgM",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.327Z",
  "updated": "2024-10-02T01:56:54.327Z",
  "size": 10184,
  "md5Hash": "u9Lj0Ehs/UZsG9DJybxE5Q==",
  "crc32c": "2106708215"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/87039e64-1d6f-4f28-92e5-322ae686133d.json
================================================
{
  "name": "mmembed/weather/105.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834213883,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "802cad08-fc65-45bc-8b06-6be101576302"
  ],
  "etag": "BtPa6dlRKjdPv+bTEwbDNtyP1DA",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:53.883Z",
  "updated": "2024-10-02T01:56:53.883Z",
  "size": 123336,
  "md5Hash": "kos1aAwpwf6znM3t7OUcCA==",
  "crc32c": "384242595"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/884b9432-28fb-465b-a826-35daec2593d7.json
================================================
{
  "name": "mmembed/weather/thumb_2221.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214284,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "9c88c876-ca87-46fa-bf84-377d5453ad65"
  ],
  "etag": "azo0G2Qsb2f+RMu+gTDHL5lcIOc",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.284Z",
  "updated": "2024-10-02T01:56:54.284Z",
  "size": 18035,
  "md5Hash": "oju9GCokmZDblCIjBxTPnQ==",
  "crc32c": "2237944386"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/8bc987b7-d22f-4331-8de5-7149d9b73361.json
================================================
{
  "name": "mmembed/weather/117.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834213891,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "280e750c-b154-40fe-aaf3-0ab0eb1588e0"
  ],
  "etag": "6r2ntJ2f8bmdCsMAAxYlqfwO+qo",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:53.891Z",
  "updated": "2024-10-02T01:56:53.891Z",
  "size": 114157,
  "md5Hash": "KM8Lta/C3oRXpV7I0RkgIw==",
  "crc32c": "3742704072"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/8cd45f77-4225-412e-9c61-bb90285356c5.json
================================================
{
  "name": "mmembed/weather/1835.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834213939,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "13f1be4e-a3ee-420e-a123-48885f29579e"
  ],
  "etag": "32u/odGUtAV/NYBGd5V9CpMX8Mo",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:53.939Z",
  "updated": "2024-10-02T01:56:53.939Z",
  "size": 13504,
  "md5Hash": "XvklOeaT7ev+Mh33VlYN1w==",
  "crc32c": "2503840333"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/8e0d391e-c779-4a34-a8de-f6abccc701ab.json
================================================
{
  "name": "mmembed/weather/thumb_0603.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214247,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "fd65958f-fa37-4e7e-ada8-47d933e22a96"
  ],
  "etag": "D1jH8RfEQJpJgLcPg5r0PML3mQ8",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.247Z",
  "updated": "2024-10-02T01:56:54.247Z",
  "size": 15876,
  "md5Hash": "5tQg5E/w40Mkdua09k63/Q==",
  "crc32c": "2729687274"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/8f014805-5f51-439d-9447-b686abf889fa.json
================================================
{
  "name": "mmembed/weather/3602.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214011,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "e60d8db1-26b5-4d79-88cb-374a5f6f4bfb"
  ],
  "etag": "e8+B8CZxaNL78KRIpMfj0HGgFEs",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.011Z",
  "updated": "2024-10-02T01:56:54.011Z",
  "size": 74273,
  "md5Hash": "Ys/5itQE89+ClXMSlmSe8g==",
  "crc32c": "3942032353"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/91006bcb-22a2-480d-83ba-5393a41c6558.json
================================================
{
  "name": "mmembed/weather/3605.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214107,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "188c4bb8-a521-40dc-92de-bf988bc0183e"
  ],
  "etag": "TDpSCbLAqEYfe0JRgaT15dHb+Hs",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.107Z",
  "updated": "2024-10-02T01:56:54.107Z",
  "size": 3589046,
  "md5Hash": "Wp4c0dtf3fxU3n3risBxyA==",
  "crc32c": "959535698"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/91bbc49d-9748-4638-a75c-573f23ff7c5e.json
================================================
{
  "name": "mmembed/weather/4088.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214082,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "c151feb4-ec2e-4ea9-93d1-05d49db873b1"
  ],
  "etag": "vYmeFyqOUeG2lQb4zR5aPSet/X8",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.082Z",
  "updated": "2024-10-02T01:56:54.082Z",
  "size": 17114,
  "md5Hash": "TgIp7BRkROD0tRukk27uIg==",
  "crc32c": "2219821404"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/92e62795-a847-46bc-a983-8f2f975f4ac3.json
================================================
{
  "name": "mmembed/weather/thumb_0593.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214232,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "507d7c43-bd28-40fd-b14f-b0e964e23306"
  ],
  "etag": "kqapa8uPK5NWJhrMxCfZs4wBsJ4",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.232Z",
  "updated": "2024-10-02T01:56:54.232Z",
  "size": 169233,
  "md5Hash": "tz/Qdxc3hM2YqJVzRDx6NQ==",
  "crc32c": "4281738524"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/92e944f9-bcfa-4e3c-95ad-2d6619cc377b.json
================================================
{
  "name": "mmembed/weather/0598.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834213909,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "84fbced3-8931-400d-aed7-b31a5520f25e"
  ],
  "etag": "EBgsNdTVze7PdMu8lNazC4u3GSI",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:53.909Z",
  "updated": "2024-10-02T01:56:53.909Z",
  "size": 28392,
  "md5Hash": "hAI0WD3dLJ+1mX68fEy7FA==",
  "crc32c": "1132548163"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/934f914b-21f8-45e6-812c-ac29926508c3.json
================================================
{
  "name": "mmembed/weather/0599.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834213910,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "afc97942-bc1b-461b-86e4-bc7005df7bb2"
  ],
  "etag": "+TODb7WJrIplvXv806U1TuiWPuQ",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:53.910Z",
  "updated": "2024-10-02T01:56:53.910Z",
  "size": 20624,
  "md5Hash": "yK+tJqWmz53zwLyS2iiuAQ==",
  "crc32c": "2349321410"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/96d4fbff-3d58-4cef-b6f0-393751f39a80.json
================================================
{
  "name": "mmembed/weather/thumb_4084.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214322,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "5476c9d8-6fdd-4903-bde8-25fd8ae68345"
  ],
  "etag": "r4IOmFr3nJC7lqUyARhmRp1tvq8",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.322Z",
  "updated": "2024-10-02T01:56:54.322Z",
  "size": 4026,
  "md5Hash": "kgowcv9VxuIi1k5mxECMWw==",
  "crc32c": "2107554066"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/98ca7091-441b-471c-a3cc-7a7e94826534.json
================================================
{
  "name": "mmembed/weather/thumb_4079.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214311,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "9e8635ef-e482-40f2-a49a-f7b60b812ab7"
  ],
  "etag": "SUQOdUTyUD32Qi2A/rCXU3lIheQ",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.311Z",
  "updated": "2024-10-02T01:56:54.311Z",
  "size": 5019,
  "md5Hash": "08pndY7X9eAzq0/BixDxZA==",
  "crc32c": "3429608544"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/991c80af-1b3f-454c-8716-c45ed7023269.json
================================================
{
  "name": "mmembed/weather/1831.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834213951,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "dee95dda-b2b5-4271-b0fe-b7c50b4fa2e0"
  ],
  "etag": "mYaZ7sHh/u1YoFWxX+J2HvJrKyU",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:53.951Z",
  "updated": "2024-10-02T01:56:53.951Z",
  "size": 68794,
  "md5Hash": "R3mwgiyk/n3dq7/Ax/gtFQ==",
  "crc32c": "207836512"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/9ab4a412-9175-410b-8281-65999c677106.json
================================================
{
  "name": "mmembed/weather/4084.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214072,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "3a2ef093-d5aa-4594-ab55-0cdd4e2949dd"
  ],
  "etag": "QstnidhZPti25z7Vgs5ublIiX9g",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.072Z",
  "updated": "2024-10-02T01:56:54.072Z",
  "size": 22280,
  "md5Hash": "NOZ/X7vNFN1MixibhAbD7g==",
  "crc32c": "2636184080"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/9d4fbb56-2a44-4866-9489-03d9312fdd55.json
================================================
{
  "name": "mmembed/weather/thumb_1843.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214265,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "89e520fa-25a3-42b6-883d-ddfd4476f797"
  ],
  "etag": "rqlonyolY69cl8n6D9YTGTDDvnE",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.265Z",
  "updated": "2024-10-02T01:56:54.265Z",
  "size": 5332,
  "md5Hash": "SlR/COm5Tv3kmFq5SzVw4Q==",
  "crc32c": "1983870227"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/9edac21b-4d29-4a5a-a5cd-5aac086224df.json
================================================
{
  "name": "mmembed/weather/thumb_0013.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214202,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "d052916d-1766-44d5-a8fb-9ac98b753dc8"
  ],
  "etag": "VW/AjkoxOnIhefpVvIwgQxKPLJw",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.202Z",
  "updated": "2024-10-02T01:56:54.202Z",
  "size": 9211,
  "md5Hash": "gKh6DGNGkrWAj+S2repcMg==",
  "crc32c": "1459402094"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/a0eb55dd-239b-4908-8acd-a89c2bf639c2.json
================================================
{
  "name": "mmembed/weather/1842.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834213965,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "f73caa35-c228-4767-af66-3abd8763112a"
  ],
  "etag": "tfLUtlpBy8yfeaNl1+5VEAJj9d0",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:53.965Z",
  "updated": "2024-10-02T01:56:53.965Z",
  "size": 17788,
  "md5Hash": "ylcdiQTEH3ItQHqW+V9K+Q==",
  "crc32c": "1776676022"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/a1539350-b2f4-4c95-a3d4-6b85d493f2b1.json
================================================
{
  "name": "mmembed/weather/thumb_105.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214207,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "ba66c2a2-55ec-4530-9017-ebb1c213b355"
  ],
  "etag": "l5n13n7Fsdjpl5QEZc9d0RS1Lh4",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.207Z",
  "updated": "2024-10-02T01:56:54.207Z",
  "size": 12851,
  "md5Hash": "Eog0P5vFRcIDPOpj5q4Xug==",
  "crc32c": "1280532754"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/a1daa863-1f24-4f91-964b-55e133f8c36d.json
================================================
{
  "name": "mmembed/weather/thumb_4086.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214325,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "7e0ae61b-0083-48e4-893d-a842c2884a4d"
  ],
  "etag": "DmDymLNCv28xeq8y72qKi67PCdU",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.325Z",
  "updated": "2024-10-02T01:56:54.325Z",
  "size": 8430,
  "md5Hash": "ui4eiCowyTBR1+9R66fgcg==",
  "crc32c": "2657306875"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/a1f4669b-2187-4feb-92dd-1a321a0d3023.json
================================================
{
  "name": "mmembed/weather/thumb_1840.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214261,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "0835be87-34c7-4117-8a4f-3b9753ba1739"
  ],
  "etag": "wOI0mp6w5bBUI+2s4pk5D1LXZd8",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.261Z",
  "updated": "2024-10-02T01:56:54.261Z",
  "size": 11127,
  "md5Hash": "R12968FX1+Dvik3jjKaMWQ==",
  "crc32c": "1157085364"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/a3f79d63-f265-4971-997b-4e64a25f806f.json
================================================
{
  "name": "mmembed/weather/thumb_2214.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214274,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "69b0c522-21a5-417c-b849-b1db3a8193f4"
  ],
  "etag": "QXDOgg4KJGOtFyJWiBPGXqbN8WM",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.274Z",
  "updated": "2024-10-02T01:56:54.274Z",
  "size": 7686,
  "md5Hash": "t1veamN5SMkdCXUyUWQUcQ==",
  "crc32c": "2350001268"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/a3fcb879-7be9-4a4f-8099-d237cf97418f.json
================================================
{
  "name": "mmembed/weather/113.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834213889,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "d1d69b3f-f3b9-49d4-b5a5-4259bce9581b"
  ],
  "etag": "6vYGY1I5XrX84ijSPDM1LutcCJ8",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:53.889Z",
  "updated": "2024-10-02T01:56:53.889Z",
  "size": 110758,
  "md5Hash": "YBRzeGj959PyYDQLRXJeDg==",
  "crc32c": "2662519531"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/a764ed81-66b1-4d49-9013-b75c1c6ba383.json
================================================
{
  "name": "mmembed/weather/0601.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834213913,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "6740f1fd-266a-4651-8923-2b74012388a6"
  ],
  "etag": "tDRYwDCU+vfoQzOgc2IhwyS0trc",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:53.913Z",
  "updated": "2024-10-02T01:56:53.913Z",
  "size": 32870,
  "md5Hash": "xGgm8PsD99kXF6LfPzrwcw==",
  "crc32c": "1870009792"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/a7855fa7-b5be-4ac3-a4e5-d4893ad338f6.json
================================================
{
  "name": "mmembed/weather/thumb_0597.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214230,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "105d1924-8fcd-43f7-b3ff-6d4c1afa0b56"
  ],
  "etag": "Zy8r+Jos2bbk/M1rC+WWc3B9II4",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.230Z",
  "updated": "2024-10-02T01:56:54.230Z",
  "size": 4610,
  "md5Hash": "crQdxFnZfMCnZnll8FMTTw==",
  "crc32c": "3051176703"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/a8c3e42a-8ebd-490f-b1da-d9046b7aa4ed.json
================================================
{
  "name": "mmembed/weather/1837.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834213954,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "197977d1-3b95-41c6-bbbf-ca51347d3473"
  ],
  "etag": "TNSHZ3XGA47SOkDRcYLP3Cnqyvg",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:53.954Z",
  "updated": "2024-10-02T01:56:53.954Z",
  "size": 75538,
  "md5Hash": "LrcyHyfusYabd5IVqfUZdA==",
  "crc32c": "3080933789"
}

================================================
FILE: multimodal-embeddings/emulator-export/storage_export/metadata/a99818ab-a299-4e87-9662-265cbe8e1160.json
================================================
{
  "name": "mmembed/weather/thumb_0604.jpg",
  "bucket": "mm-demo.appspot.com",
  "metageneration": 1,
  "generation": 1727834214242,
  "contentType": "image/jpeg",
  "storageClass": "STANDARD",
  "contentDisposition": "inline",
  "downloadTokens": [
    "6395c963-a755-41ed-9911-c2d0f4081ab6"
  ],
  "etag": "nM37ONJGzwmLiBb2tOjHbQcEQ0o",
  "customMetadata": {},
  "timeCreated": "2024-10-02T01:56:54.242Z",
  "updated": "2024-10-02T01:56:54.242Z",
  "size": 13286,
  "md5Has
Download .txt
gitextract_zg4slyrs/

├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── image-to-code/
│   ├── .gcloudignore
│   ├── .gitignore
│   ├── CONTRIBUTING.md
│   ├── LICENSE
│   ├── README.md
│   ├── components/
│   │   ├── CodePreview.js
│   │   ├── Header.js
│   │   └── ToggleButton.js
│   ├── jsconfig.json
│   ├── next.config.mjs
│   ├── package.json
│   ├── pages/
│   │   ├── _app.js
│   │   ├── _document.js
│   │   ├── api/
│   │   │   └── hello.js
│   │   └── index.js
│   ├── postcss.config.mjs
│   ├── styles/
│   │   └── globals.css
│   ├── tailwind.config.js
│   └── tailwind.config.mjs
├── multimodal-embeddings/
│   ├── .gcloudignore
│   ├── .npmrc
│   ├── .prettierignore
│   ├── .prettierrc
│   ├── README.md
│   ├── app.yaml
│   ├── components.json
│   ├── cors.json
│   ├── emulator-export/
│   │   ├── firebase-export-metadata.json
│   │   ├── firestore_export/
│   │   │   ├── all_namespaces/
│   │   │   │   └── all_kinds/
│   │   │   │       ├── all_namespaces_all_kinds.export_metadata
│   │   │   │       └── output-0
│   │   │   └── firestore_export.overall_export_metadata
│   │   └── storage_export/
│   │       ├── blobs/
│   │       │   ├── 0001871f-3e7a-461d-b428-92efcd1ce0fd
│   │       │   ├── 03da0657-bb18-42fd-9831-7e48c0b723cf
│   │       │   ├── 03f9df1b-0c0d-4014-8a7d-3a5eccad3faf
│   │       │   ├── 04b454df-1216-4ec1-84fb-f59afd85fe90
│   │       │   ├── 04f6c107-9611-4db9-aba8-98841ba5ae6f
│   │       │   ├── 06640a30-4d8e-4812-890e-e0374ad30f58
│   │       │   ├── 06919cbe-0678-4bfd-8cec-4d09e8e2d51b
│   │       │   ├── 0a86afce-8076-4ab8-bd65-c1eaf5ec966f
│   │       │   ├── 0b286de2-4d59-442c-933e-76f0f8e3cd0b
│   │       │   ├── 0c96fb25-144b-46eb-bdf1-74c575ddb6e9
│   │       │   ├── 0cf49b23-1d83-41c8-85d3-5c31fbf7b123
│   │       │   ├── 0d5f8ef7-dd37-432a-a0eb-80ccb822abc5
│   │       │   ├── 0d961bbe-aa5c-4d0e-9e53-dc7a7ec2b96c
│   │       │   ├── 0e7ec18e-93a5-4d40-845b-92cf98040f13
│   │       │   ├── 0ea29a34-dbcf-487a-b0e4-dd1c4028c7e2
│   │       │   ├── 0fb276ab-ad9f-4cd4-95ea-335d18ea72fe
│   │       │   ├── 0ff12c88-f320-4ef7-9356-26fbb9f3590e
│   │       │   ├── 114b11eb-de0d-441b-85d9-d70db5353156
│   │       │   ├── 125f8010-6ab0-463f-8278-5565cfc9d618
│   │       │   ├── 1514936f-769c-40b4-bfe4-4746fbc79fcd
│   │       │   ├── 16227ec4-2585-40aa-a5fd-e25e0d227b66
│   │       │   ├── 17f5cac8-e8c5-45c8-b6b3-afaa11b556ff
│   │       │   ├── 18964cd0-de01-46bd-88c3-ffad0b15b020
│   │       │   ├── 1aca1226-11c8-42f4-8137-339fe674e55c
│   │       │   ├── 1b831e3c-a1e8-4eb4-b3d6-de18b656814a
│   │       │   ├── 1ba5a0d9-2902-4a7a-8f33-862cf0abcb38
│   │       │   ├── 1bd97095-c1d4-4104-ae2a-f6c0e56dde89
│   │       │   ├── 1ccff42b-89c8-4a66-9d8c-3c7f1c307625
│   │       │   ├── 1d363b0e-cea6-4e58-aa6f-17c005c32f60
│   │       │   ├── 1e2e00f2-eb8c-432d-91a9-1f49c9bb2087
│   │       │   ├── 1e72b424-5c06-42c0-99eb-140545880ccb
│   │       │   ├── 1e859368-8d5b-4ecc-b30f-116ec3377f39
│   │       │   ├── 1f67aea5-0f3e-4b12-9554-aae3a84d5354
│   │       │   ├── 1fb32b8f-72d0-43ac-8955-d3804be94bc2
│   │       │   ├── 2166725e-18e6-4982-aeb7-2f4925461bf1
│   │       │   ├── 21af1f86-eb45-421d-90ff-962fc5509c16
│   │       │   ├── 2883e822-976c-4d81-9601-2df44f96bcd7
│   │       │   ├── 28a96371-1742-4e03-ae5c-ba309216af49
│   │       │   ├── 2ae61d7e-7bc1-4695-bd44-3637adbef998
│   │       │   ├── 2c938160-fe51-4222-a7d1-8220ad4ee300
│   │       │   ├── 2de6149c-40aa-471f-94a1-2dd2824724d8
│   │       │   ├── 2eeccd3b-575d-4055-95d9-c5fbf26b3a8d
│   │       │   ├── 2efc3c4b-2601-4d8f-ba2b-8d84712c436e
│   │       │   ├── 2f4a0b48-dc3f-4fd4-be4d-726c56619302
│   │       │   ├── 30621326-86e9-4f15-b5ea-6eaad59947df
│   │       │   ├── 30d12518-b643-48cf-8608-7aa9771fed14
│   │       │   ├── 31500630-b5a2-4092-86b1-5f2565716d86
│   │       │   ├── 31719f53-507c-4a3f-8b29-0be61178f3e7
│   │       │   ├── 354b878a-20c1-4b79-8a41-2b96e63eedaf
│   │       │   ├── 362a4319-eac2-4157-82f8-4cc5624ab0ee
│   │       │   ├── 36a45009-4146-4860-ab0f-2d41d6e1b8d2
│   │       │   ├── 36b5a479-0181-4f1b-98f4-86a64d4e1191
│   │       │   ├── 37be70be-0250-4281-9532-401a7bf29f41
│   │       │   ├── 3954ab46-6a25-4bb6-ab32-f0d55c546cb2
│   │       │   ├── 3b33aa14-5d04-43bd-9ef6-e30b8861d7db
│   │       │   ├── 3b688492-90d3-4d82-b6fc-499bc09e56eb
│   │       │   ├── 3dccd76d-64a7-47c2-a9b5-eea9b2efa12f
│   │       │   ├── 3e64b976-d7b3-4356-92d7-0aeb15f45fd5
│   │       │   ├── 3e966f04-2910-4104-8f1e-412bf33917c0
│   │       │   ├── 412215ae-10af-413a-9f75-861667cf12fe
│   │       │   ├── 41e09631-0791-4051-96ce-4e18d05f2be9
│   │       │   ├── 4223ad2c-c8fc-4f31-8454-284312b22905
│   │       │   ├── 42694520-432b-4928-adce-006db533f6f8
│   │       │   ├── 4418a01d-24ec-4e4b-b29a-e0689b395969
│   │       │   ├── 45131a81-db3a-4f9b-9330-5e2eb2b3eb44
│   │       │   ├── 454a16c7-6ec4-4c29-838f-6d235d729c0d
│   │       │   ├── 45b0127e-7f92-437f-97e4-f96b50ca60f6
│   │       │   ├── 460d8563-7063-413d-aa9c-d50fb8c9a0a3
│   │       │   ├── 464ea502-b1a7-47a1-af48-7b4296b13896
│   │       │   ├── 477f1478-d154-44c1-9b3e-f7bc08b81b1b
│   │       │   ├── 47a173ba-dd3f-4e02-8409-e46bf5c831ca
│   │       │   ├── 47eb894d-5a60-4c64-b22a-f496f63a869e
│   │       │   ├── 487cbb33-22c6-41f6-8e6e-4125927e2f20
│   │       │   ├── 495964a6-f764-487d-aec8-a1c1c02d8be3
│   │       │   ├── 4ad91f5f-7c9e-40e4-9c4f-c03a22bd8b2f
│   │       │   ├── 5012b076-ef07-41c8-9da7-033e2af2f579
│   │       │   ├── 50b673c2-e1b9-4b84-bbcc-1c47cca0cace
│   │       │   ├── 530a9038-98b8-4925-b26b-f5c7776d882f
│   │       │   ├── 55e55a5c-a59a-4c7f-846a-73784ee2f25d
│   │       │   ├── 563a8d9a-0285-4496-aaba-59138c349dad
│   │       │   ├── 58852f43-76ea-4ad1-9c6a-a33c2c53ff56
│   │       │   ├── 5a3ce50b-2658-4f68-b12d-0eec92a7223a
│   │       │   ├── 5a3ecd67-d20b-405d-83f7-86ff772f6d6f
│   │       │   ├── 5b388511-e3b8-4d3f-b0bf-d085f75c7769
│   │       │   ├── 5b62fd41-e2a2-4ba6-b305-a854619a947b
│   │       │   ├── 5ef2346d-d39e-49ce-b26a-9e5069dba421
│   │       │   ├── 5fd6d66a-8bf1-4f81-b0eb-9895552a8ec4
│   │       │   ├── 61556f93-4dd2-43e5-bc4d-78cbe3809d42
│   │       │   ├── 620c1be4-e353-46d9-8dbd-c3079d5efd6e
│   │       │   ├── 62b85256-0f54-47cb-ae83-d45cd0a66030
│   │       │   ├── 64609c87-07e8-48a4-b8c2-a26210e1dd0b
│   │       │   ├── 64f13cdd-ee8c-4238-b66b-14c1baa578e3
│   │       │   ├── 65c4dee4-4429-4eae-9250-2e969f3c190a
│   │       │   ├── 66569702-2074-4047-a794-4f11e3b285f2
│   │       │   ├── 67aaca3d-2acc-4987-8ed9-3f2fbf075f7c
│   │       │   ├── 67b6aeb1-b7d0-4402-8a60-b2f9c0c8b447
│   │       │   ├── 686d4f0b-5c28-48f4-b656-b354a13981a7
│   │       │   ├── 69657785-7299-408d-8453-8cb32f848150
│   │       │   ├── 6b6f7c8b-a5b9-4436-80a0-f128c1eb3bcf
│   │       │   ├── 6d8f5f9c-fef6-4179-ba05-79e361503c7a
│   │       │   ├── 70772163-4c3b-493a-ad04-87b67ee35d71
│   │       │   ├── 70c43a85-254c-49b1-bf14-d13687913f2d
│   │       │   ├── 70db2153-5bbf-42f6-91bc-f3cb4249dc01
│   │       │   ├── 70ef85a5-fb7a-41ff-ac02-0d00927d0274
│   │       │   ├── 70fc8a82-bfeb-4bb7-bb95-2a654168ead1
│   │       │   ├── 71894824-0cd9-4acf-9178-abba58090e42
│   │       │   ├── 721bdd57-7850-42e4-9fb9-747525b187c8
│   │       │   ├── 7706c66e-3fd9-45eb-9df5-8308b84dd194
│   │       │   ├── 7846c694-8e7a-47dd-b8b8-a2448285dcc0
│   │       │   ├── 78a3c767-265f-419d-bb3f-c3eba6e22017
│   │       │   ├── 78dd9bfd-a0ca-4ac9-9473-45d0d051fb1e
│   │       │   ├── 799fcdd0-1054-4c53-a218-48cb8f3ed044
│   │       │   ├── 7a5a7379-d29b-412b-9a50-565e171ab712
│   │       │   ├── 7c12f79f-d474-446f-b5fe-f669e60f8227
│   │       │   ├── 7c4a2540-75b9-4e37-b4b1-a6d7f62830cb
│   │       │   ├── 7c689600-cf26-4953-8be5-ae58faa5cad0
│   │       │   ├── 7d321a59-d6c9-433e-bfcb-2ee10dcd2745
│   │       │   ├── 7ff005e0-3f17-423f-9a04-1d762447eb07
│   │       │   ├── 8278f4eb-708a-4054-b408-9b4a2a8d6b7a
│   │       │   ├── 828f697d-fd40-470e-8326-8a40dccf9096
│   │       │   ├── 832cacff-0ed7-4685-a383-a0d94e6a366e
│   │       │   ├── 84307d32-0903-4a1c-8599-9d3938995da6
│   │       │   ├── 84491769-76dd-4667-825d-95156d99ba3f
│   │       │   ├── 848c006e-a50c-4d24-9e96-f9b12ab5f66b
│   │       │   ├── 8628a1cb-e588-483c-b00f-ba449d2c27b1
│   │       │   ├── 87039e64-1d6f-4f28-92e5-322ae686133d
│   │       │   ├── 884b9432-28fb-465b-a826-35daec2593d7
│   │       │   ├── 8bc987b7-d22f-4331-8de5-7149d9b73361
│   │       │   ├── 8cd45f77-4225-412e-9c61-bb90285356c5
│   │       │   ├── 8e0d391e-c779-4a34-a8de-f6abccc701ab
│   │       │   ├── 8f014805-5f51-439d-9447-b686abf889fa
│   │       │   ├── 91006bcb-22a2-480d-83ba-5393a41c6558
│   │       │   ├── 91bbc49d-9748-4638-a75c-573f23ff7c5e
│   │       │   ├── 92e62795-a847-46bc-a983-8f2f975f4ac3
│   │       │   ├── 92e944f9-bcfa-4e3c-95ad-2d6619cc377b
│   │       │   ├── 934f914b-21f8-45e6-812c-ac29926508c3
│   │       │   ├── 96d4fbff-3d58-4cef-b6f0-393751f39a80
│   │       │   ├── 98ca7091-441b-471c-a3cc-7a7e94826534
│   │       │   ├── 991c80af-1b3f-454c-8716-c45ed7023269
│   │       │   ├── 9ab4a412-9175-410b-8281-65999c677106
│   │       │   ├── 9d4fbb56-2a44-4866-9489-03d9312fdd55
│   │       │   ├── 9edac21b-4d29-4a5a-a5cd-5aac086224df
│   │       │   ├── a0eb55dd-239b-4908-8acd-a89c2bf639c2
│   │       │   ├── a1539350-b2f4-4c95-a3d4-6b85d493f2b1
│   │       │   ├── a1daa863-1f24-4f91-964b-55e133f8c36d
│   │       │   ├── a1f4669b-2187-4feb-92dd-1a321a0d3023
│   │       │   ├── a3f79d63-f265-4971-997b-4e64a25f806f
│   │       │   ├── a3fcb879-7be9-4a4f-8099-d237cf97418f
│   │       │   ├── a764ed81-66b1-4d49-9013-b75c1c6ba383
│   │       │   ├── a7855fa7-b5be-4ac3-a4e5-d4893ad338f6
│   │       │   ├── a8c3e42a-8ebd-490f-b1da-d9046b7aa4ed
│   │       │   ├── a99818ab-a299-4e87-9662-265cbe8e1160
│   │       │   ├── ab183f61-767e-4020-bae5-928ca15abd23
│   │       │   ├── ad7b8aa9-f8f7-43d5-96cf-b222b5e57318
│   │       │   ├── ad8f7da2-4988-40ec-9042-85c3f4ca6404
│   │       │   ├── ae4d2687-9c0e-49b2-9401-271fb42e62e1
│   │       │   ├── b17a8866-876a-4d32-8b84-5e19b8bcc5f4
│   │       │   ├── b1d4c0bb-0181-45cc-a1d7-7f2832b49b6d
│   │       │   ├── b2e7394a-32cb-45ca-abea-73d0b2df628f
│   │       │   ├── b499dd2d-cd18-488c-9927-c2f1f786a762
│   │       │   ├── b7ab64f1-76c2-459d-b6a9-cc7d52e689d1
│   │       │   ├── b8008ef2-2fb5-40ed-8fef-211863635165
│   │       │   ├── b8f8d67b-85c4-4734-a413-7e1c5b1a7a9d
│   │       │   ├── ba5f66c2-65e8-4ecc-829d-28dd2ddf625a
│   │       │   ├── ba7eb319-928d-45ba-bce3-4edd8f3955bd
│   │       │   ├── ba9ba128-b58e-47c1-97ee-4b2f52524cdf
│   │       │   ├── bc45b1d1-ec5d-4b77-94d9-2ba6f83c9397
│   │       │   ├── c20333af-a455-4b2f-baf0-f852e684543b
│   │       │   ├── c27f43ab-cdee-4ea2-b993-85e04502d1e7
│   │       │   ├── c32a1d25-a547-46b5-9d66-b2cce1b62c6c
│   │       │   ├── c340aa08-9ea1-4b1e-9155-0ffc9c35f7d4
│   │       │   ├── c4005e1a-a820-4fc6-b4d7-36de986a6508
│   │       │   ├── c65e9606-9e1a-4aa3-a546-fd07eaba08a3
│   │       │   ├── ca44d9db-7998-4cf3-bc92-aa69d366900a
│   │       │   ├── cb8c98b6-f0f0-48d5-be12-e27ab75dbc89
│   │       │   ├── cc2b2031-0170-43c4-bf8a-7a7267d38a96
│   │       │   ├── cea1146f-f63d-421e-b778-5ed8f39c1304
│   │       │   ├── cf2d1050-806b-4d32-9a18-083649e9142c
│   │       │   ├── d0920669-7709-4aab-97df-dd5e6c6719f9
│   │       │   ├── d12b9178-857a-4567-a7ef-3660f81813b9
│   │       │   ├── d21827e3-c794-4fa8-8cbc-6b46bfff25d2
│   │       │   ├── d223daa7-afa8-4108-8965-2ac9c45d9bab
│   │       │   ├── d2efd3f2-cf9a-4d75-89ad-3c8d873a1ff1
│   │       │   ├── d35aeaf2-da34-4207-a602-a9b236d62fca
│   │       │   ├── d4bb491a-51aa-48ac-a946-faf94bdb98f3
│   │       │   ├── d51f715d-c5b7-485b-8718-7112b700252b
│   │       │   ├── d62ac9e8-14ff-4a51-a65c-13b0be4a382d
│   │       │   ├── d7400d59-6e7d-438d-a433-7e248a89d7ef
│   │       │   ├── d8efb7b3-3d17-47f7-b46a-d4d5933d1c6c
│   │       │   ├── daff4d68-e7ba-4876-a389-f6379792db29
│   │       │   ├── db685a34-6e9f-480c-998f-74d9dfa33ded
│   │       │   ├── dd83acba-c2c2-471f-96e6-02a7564ccdf2
│   │       │   ├── ddd82ca8-addd-461f-a409-10ba4f2384f2
│   │       │   ├── de2c3001-b81a-43cb-bc8d-430cc5f31ecd
│   │       │   ├── df252df6-207a-4b5c-b429-517a9188442a
│   │       │   ├── dfc781e1-8984-4900-9fd9-4d67a8d06165
│   │       │   ├── e1a86ae0-794e-48c7-a521-6184fe47baf7
│   │       │   ├── e24996a9-4e92-47da-b164-afe68646772e
│   │       │   ├── e4a1e47d-a111-4f8f-aa81-fa8305cacc02
│   │       │   ├── e5411091-9430-440b-b167-06666aaa6282
│   │       │   ├── e68b7951-4436-4b51-9352-b8478a7016a2
│   │       │   ├── e745dd10-3a36-4c3c-9f6d-a0df1af88db5
│   │       │   ├── e7f85be0-c8af-4658-ae23-37f0fec2d3e8
│   │       │   ├── e96f6208-3db5-4e59-92fd-13bcc17a219f
│   │       │   ├── ec636ad8-59af-4d37-899d-7e38b6820142
│   │       │   ├── eed1b24c-8d17-474c-a8c5-abbb1253f3ac
│   │       │   ├── efcf28ed-64c0-4fb0-889e-adb9f7826bd2
│   │       │   ├── f0c05fe7-cce3-4ae7-81a7-04eb885a858d
│   │       │   ├── f1ee8d78-1966-45ac-899b-0fb7fdbef35c
│   │       │   ├── f1fdb37a-b154-4165-9964-31831b40be8b
│   │       │   ├── f45cae23-5852-45c2-a36d-923768351808
│   │       │   ├── f4c6688d-2e98-47bb-9880-d8beb1569036
│   │       │   ├── f511acae-1e9a-4fea-a426-acb3fd6aa5bd
│   │       │   ├── f699b6ac-7812-4564-adb5-8260b225f33b
│   │       │   ├── f77367b4-cad3-4d6a-961a-f4f4d6e24817
│   │       │   ├── f7bae092-4e7b-40f5-adae-a5c89bd9065a
│   │       │   ├── f8c2b960-f80e-488d-8126-04fe12057048
│   │       │   ├── f9d73365-1492-4efa-aabd-b730650157d0
│   │       │   ├── faf1a8f8-0cdf-43ba-8af8-d53a2d1a060f
│   │       │   ├── fb7828b5-0a12-46a7-8c5c-6c220d116e36
│   │       │   ├── fb857ec0-d80d-4404-ba0e-1ba436305d7d
│   │       │   ├── fda16ac8-d1cf-49db-93b7-833c274cd0d2
│   │       │   ├── fe3a8d7c-3dff-489e-abca-0b515db9420c
│   │       │   ├── fe78e904-37eb-46de-9195-1264c9acc754
│   │       │   ├── ff05e63d-c45b-499f-bc6e-a507047b4f10
│   │       │   └── ffe18889-8e9a-4b8c-8a81-867a03a3c274
│   │       ├── buckets.json
│   │       └── metadata/
│   │           ├── 0001871f-3e7a-461d-b428-92efcd1ce0fd.json
│   │           ├── 03da0657-bb18-42fd-9831-7e48c0b723cf.json
│   │           ├── 03f9df1b-0c0d-4014-8a7d-3a5eccad3faf.json
│   │           ├── 04b454df-1216-4ec1-84fb-f59afd85fe90.json
│   │           ├── 04f6c107-9611-4db9-aba8-98841ba5ae6f.json
│   │           ├── 06640a30-4d8e-4812-890e-e0374ad30f58.json
│   │           ├── 06919cbe-0678-4bfd-8cec-4d09e8e2d51b.json
│   │           ├── 0a86afce-8076-4ab8-bd65-c1eaf5ec966f.json
│   │           ├── 0b286de2-4d59-442c-933e-76f0f8e3cd0b.json
│   │           ├── 0c96fb25-144b-46eb-bdf1-74c575ddb6e9.json
│   │           ├── 0cf49b23-1d83-41c8-85d3-5c31fbf7b123.json
│   │           ├── 0d5f8ef7-dd37-432a-a0eb-80ccb822abc5.json
│   │           ├── 0d961bbe-aa5c-4d0e-9e53-dc7a7ec2b96c.json
│   │           ├── 0e7ec18e-93a5-4d40-845b-92cf98040f13.json
│   │           ├── 0ea29a34-dbcf-487a-b0e4-dd1c4028c7e2.json
│   │           ├── 0fb276ab-ad9f-4cd4-95ea-335d18ea72fe.json
│   │           ├── 0ff12c88-f320-4ef7-9356-26fbb9f3590e.json
│   │           ├── 114b11eb-de0d-441b-85d9-d70db5353156.json
│   │           ├── 125f8010-6ab0-463f-8278-5565cfc9d618.json
│   │           ├── 1514936f-769c-40b4-bfe4-4746fbc79fcd.json
│   │           ├── 16227ec4-2585-40aa-a5fd-e25e0d227b66.json
│   │           ├── 17f5cac8-e8c5-45c8-b6b3-afaa11b556ff.json
│   │           ├── 18964cd0-de01-46bd-88c3-ffad0b15b020.json
│   │           ├── 1aca1226-11c8-42f4-8137-339fe674e55c.json
│   │           ├── 1b831e3c-a1e8-4eb4-b3d6-de18b656814a.json
│   │           ├── 1ba5a0d9-2902-4a7a-8f33-862cf0abcb38.json
│   │           ├── 1bd97095-c1d4-4104-ae2a-f6c0e56dde89.json
│   │           ├── 1ccff42b-89c8-4a66-9d8c-3c7f1c307625.json
│   │           ├── 1d363b0e-cea6-4e58-aa6f-17c005c32f60.json
│   │           ├── 1e2e00f2-eb8c-432d-91a9-1f49c9bb2087.json
│   │           ├── 1e72b424-5c06-42c0-99eb-140545880ccb.json
│   │           ├── 1e859368-8d5b-4ecc-b30f-116ec3377f39.json
│   │           ├── 1f67aea5-0f3e-4b12-9554-aae3a84d5354.json
│   │           ├── 1fb32b8f-72d0-43ac-8955-d3804be94bc2.json
│   │           ├── 2166725e-18e6-4982-aeb7-2f4925461bf1.json
│   │           ├── 21af1f86-eb45-421d-90ff-962fc5509c16.json
│   │           ├── 2883e822-976c-4d81-9601-2df44f96bcd7.json
│   │           ├── 28a96371-1742-4e03-ae5c-ba309216af49.json
│   │           ├── 2ae61d7e-7bc1-4695-bd44-3637adbef998.json
│   │           ├── 2c938160-fe51-4222-a7d1-8220ad4ee300.json
│   │           ├── 2de6149c-40aa-471f-94a1-2dd2824724d8.json
│   │           ├── 2eeccd3b-575d-4055-95d9-c5fbf26b3a8d.json
│   │           ├── 2efc3c4b-2601-4d8f-ba2b-8d84712c436e.json
│   │           ├── 2f4a0b48-dc3f-4fd4-be4d-726c56619302.json
│   │           ├── 30621326-86e9-4f15-b5ea-6eaad59947df.json
│   │           ├── 30d12518-b643-48cf-8608-7aa9771fed14.json
│   │           ├── 31500630-b5a2-4092-86b1-5f2565716d86.json
│   │           ├── 31719f53-507c-4a3f-8b29-0be61178f3e7.json
│   │           ├── 354b878a-20c1-4b79-8a41-2b96e63eedaf.json
│   │           ├── 362a4319-eac2-4157-82f8-4cc5624ab0ee.json
│   │           ├── 36a45009-4146-4860-ab0f-2d41d6e1b8d2.json
│   │           ├── 36b5a479-0181-4f1b-98f4-86a64d4e1191.json
│   │           ├── 37be70be-0250-4281-9532-401a7bf29f41.json
│   │           ├── 3954ab46-6a25-4bb6-ab32-f0d55c546cb2.json
│   │           ├── 3b33aa14-5d04-43bd-9ef6-e30b8861d7db.json
│   │           ├── 3b688492-90d3-4d82-b6fc-499bc09e56eb.json
│   │           ├── 3dccd76d-64a7-47c2-a9b5-eea9b2efa12f.json
│   │           ├── 3e64b976-d7b3-4356-92d7-0aeb15f45fd5.json
│   │           ├── 3e966f04-2910-4104-8f1e-412bf33917c0.json
│   │           ├── 412215ae-10af-413a-9f75-861667cf12fe.json
│   │           ├── 41e09631-0791-4051-96ce-4e18d05f2be9.json
│   │           ├── 4223ad2c-c8fc-4f31-8454-284312b22905.json
│   │           ├── 42694520-432b-4928-adce-006db533f6f8.json
│   │           ├── 4418a01d-24ec-4e4b-b29a-e0689b395969.json
│   │           ├── 45131a81-db3a-4f9b-9330-5e2eb2b3eb44.json
│   │           ├── 454a16c7-6ec4-4c29-838f-6d235d729c0d.json
│   │           ├── 45b0127e-7f92-437f-97e4-f96b50ca60f6.json
│   │           ├── 460d8563-7063-413d-aa9c-d50fb8c9a0a3.json
│   │           ├── 464ea502-b1a7-47a1-af48-7b4296b13896.json
│   │           ├── 477f1478-d154-44c1-9b3e-f7bc08b81b1b.json
│   │           ├── 47a173ba-dd3f-4e02-8409-e46bf5c831ca.json
│   │           ├── 47eb894d-5a60-4c64-b22a-f496f63a869e.json
│   │           ├── 487cbb33-22c6-41f6-8e6e-4125927e2f20.json
│   │           ├── 495964a6-f764-487d-aec8-a1c1c02d8be3.json
│   │           ├── 4ad91f5f-7c9e-40e4-9c4f-c03a22bd8b2f.json
│   │           ├── 5012b076-ef07-41c8-9da7-033e2af2f579.json
│   │           ├── 50b673c2-e1b9-4b84-bbcc-1c47cca0cace.json
│   │           ├── 530a9038-98b8-4925-b26b-f5c7776d882f.json
│   │           ├── 55e55a5c-a59a-4c7f-846a-73784ee2f25d.json
│   │           ├── 563a8d9a-0285-4496-aaba-59138c349dad.json
│   │           ├── 58852f43-76ea-4ad1-9c6a-a33c2c53ff56.json
│   │           ├── 5a3ce50b-2658-4f68-b12d-0eec92a7223a.json
│   │           ├── 5a3ecd67-d20b-405d-83f7-86ff772f6d6f.json
│   │           ├── 5b388511-e3b8-4d3f-b0bf-d085f75c7769.json
│   │           ├── 5b62fd41-e2a2-4ba6-b305-a854619a947b.json
│   │           ├── 5ef2346d-d39e-49ce-b26a-9e5069dba421.json
│   │           ├── 5fd6d66a-8bf1-4f81-b0eb-9895552a8ec4.json
│   │           ├── 61556f93-4dd2-43e5-bc4d-78cbe3809d42.json
│   │           ├── 620c1be4-e353-46d9-8dbd-c3079d5efd6e.json
│   │           ├── 62b85256-0f54-47cb-ae83-d45cd0a66030.json
│   │           ├── 64609c87-07e8-48a4-b8c2-a26210e1dd0b.json
│   │           ├── 64f13cdd-ee8c-4238-b66b-14c1baa578e3.json
│   │           ├── 65c4dee4-4429-4eae-9250-2e969f3c190a.json
│   │           ├── 66569702-2074-4047-a794-4f11e3b285f2.json
│   │           ├── 67aaca3d-2acc-4987-8ed9-3f2fbf075f7c.json
│   │           ├── 67b6aeb1-b7d0-4402-8a60-b2f9c0c8b447.json
│   │           ├── 686d4f0b-5c28-48f4-b656-b354a13981a7.json
│   │           ├── 69657785-7299-408d-8453-8cb32f848150.json
│   │           ├── 6b6f7c8b-a5b9-4436-80a0-f128c1eb3bcf.json
│   │           ├── 6d8f5f9c-fef6-4179-ba05-79e361503c7a.json
│   │           ├── 70772163-4c3b-493a-ad04-87b67ee35d71.json
│   │           ├── 70c43a85-254c-49b1-bf14-d13687913f2d.json
│   │           ├── 70db2153-5bbf-42f6-91bc-f3cb4249dc01.json
│   │           ├── 70ef85a5-fb7a-41ff-ac02-0d00927d0274.json
│   │           ├── 70fc8a82-bfeb-4bb7-bb95-2a654168ead1.json
│   │           ├── 71894824-0cd9-4acf-9178-abba58090e42.json
│   │           ├── 721bdd57-7850-42e4-9fb9-747525b187c8.json
│   │           ├── 7706c66e-3fd9-45eb-9df5-8308b84dd194.json
│   │           ├── 7846c694-8e7a-47dd-b8b8-a2448285dcc0.json
│   │           ├── 78a3c767-265f-419d-bb3f-c3eba6e22017.json
│   │           ├── 78dd9bfd-a0ca-4ac9-9473-45d0d051fb1e.json
│   │           ├── 799fcdd0-1054-4c53-a218-48cb8f3ed044.json
│   │           ├── 7a5a7379-d29b-412b-9a50-565e171ab712.json
│   │           ├── 7c12f79f-d474-446f-b5fe-f669e60f8227.json
│   │           ├── 7c4a2540-75b9-4e37-b4b1-a6d7f62830cb.json
│   │           ├── 7c689600-cf26-4953-8be5-ae58faa5cad0.json
│   │           ├── 7d321a59-d6c9-433e-bfcb-2ee10dcd2745.json
│   │           ├── 7ff005e0-3f17-423f-9a04-1d762447eb07.json
│   │           ├── 8278f4eb-708a-4054-b408-9b4a2a8d6b7a.json
│   │           ├── 828f697d-fd40-470e-8326-8a40dccf9096.json
│   │           ├── 832cacff-0ed7-4685-a383-a0d94e6a366e.json
│   │           ├── 84307d32-0903-4a1c-8599-9d3938995da6.json
│   │           ├── 84491769-76dd-4667-825d-95156d99ba3f.json
│   │           ├── 848c006e-a50c-4d24-9e96-f9b12ab5f66b.json
│   │           ├── 8628a1cb-e588-483c-b00f-ba449d2c27b1.json
│   │           ├── 87039e64-1d6f-4f28-92e5-322ae686133d.json
│   │           ├── 884b9432-28fb-465b-a826-35daec2593d7.json
│   │           ├── 8bc987b7-d22f-4331-8de5-7149d9b73361.json
│   │           ├── 8cd45f77-4225-412e-9c61-bb90285356c5.json
│   │           ├── 8e0d391e-c779-4a34-a8de-f6abccc701ab.json
│   │           ├── 8f014805-5f51-439d-9447-b686abf889fa.json
│   │           ├── 91006bcb-22a2-480d-83ba-5393a41c6558.json
│   │           ├── 91bbc49d-9748-4638-a75c-573f23ff7c5e.json
│   │           ├── 92e62795-a847-46bc-a983-8f2f975f4ac3.json
│   │           ├── 92e944f9-bcfa-4e3c-95ad-2d6619cc377b.json
│   │           ├── 934f914b-21f8-45e6-812c-ac29926508c3.json
│   │           ├── 96d4fbff-3d58-4cef-b6f0-393751f39a80.json
│   │           ├── 98ca7091-441b-471c-a3cc-7a7e94826534.json
│   │           ├── 991c80af-1b3f-454c-8716-c45ed7023269.json
│   │           ├── 9ab4a412-9175-410b-8281-65999c677106.json
│   │           ├── 9d4fbb56-2a44-4866-9489-03d9312fdd55.json
│   │           ├── 9edac21b-4d29-4a5a-a5cd-5aac086224df.json
│   │           ├── a0eb55dd-239b-4908-8acd-a89c2bf639c2.json
│   │           ├── a1539350-b2f4-4c95-a3d4-6b85d493f2b1.json
│   │           ├── a1daa863-1f24-4f91-964b-55e133f8c36d.json
│   │           ├── a1f4669b-2187-4feb-92dd-1a321a0d3023.json
│   │           ├── a3f79d63-f265-4971-997b-4e64a25f806f.json
│   │           ├── a3fcb879-7be9-4a4f-8099-d237cf97418f.json
│   │           ├── a764ed81-66b1-4d49-9013-b75c1c6ba383.json
│   │           ├── a7855fa7-b5be-4ac3-a4e5-d4893ad338f6.json
│   │           ├── a8c3e42a-8ebd-490f-b1da-d9046b7aa4ed.json
│   │           ├── a99818ab-a299-4e87-9662-265cbe8e1160.json
│   │           ├── ab183f61-767e-4020-bae5-928ca15abd23.json
│   │           ├── ad7b8aa9-f8f7-43d5-96cf-b222b5e57318.json
│   │           ├── ad8f7da2-4988-40ec-9042-85c3f4ca6404.json
│   │           ├── ae4d2687-9c0e-49b2-9401-271fb42e62e1.json
│   │           ├── b17a8866-876a-4d32-8b84-5e19b8bcc5f4.json
│   │           ├── b1d4c0bb-0181-45cc-a1d7-7f2832b49b6d.json
│   │           ├── b2e7394a-32cb-45ca-abea-73d0b2df628f.json
│   │           ├── b499dd2d-cd18-488c-9927-c2f1f786a762.json
│   │           ├── b7ab64f1-76c2-459d-b6a9-cc7d52e689d1.json
│   │           ├── b8008ef2-2fb5-40ed-8fef-211863635165.json
│   │           ├── b8f8d67b-85c4-4734-a413-7e1c5b1a7a9d.json
│   │           ├── ba5f66c2-65e8-4ecc-829d-28dd2ddf625a.json
│   │           ├── ba7eb319-928d-45ba-bce3-4edd8f3955bd.json
│   │           ├── ba9ba128-b58e-47c1-97ee-4b2f52524cdf.json
│   │           ├── bc45b1d1-ec5d-4b77-94d9-2ba6f83c9397.json
│   │           ├── c20333af-a455-4b2f-baf0-f852e684543b.json
│   │           ├── c27f43ab-cdee-4ea2-b993-85e04502d1e7.json
│   │           ├── c32a1d25-a547-46b5-9d66-b2cce1b62c6c.json
│   │           ├── c340aa08-9ea1-4b1e-9155-0ffc9c35f7d4.json
│   │           ├── c4005e1a-a820-4fc6-b4d7-36de986a6508.json
│   │           ├── c65e9606-9e1a-4aa3-a546-fd07eaba08a3.json
│   │           ├── ca44d9db-7998-4cf3-bc92-aa69d366900a.json
│   │           ├── cb8c98b6-f0f0-48d5-be12-e27ab75dbc89.json
│   │           ├── cc2b2031-0170-43c4-bf8a-7a7267d38a96.json
│   │           ├── cea1146f-f63d-421e-b778-5ed8f39c1304.json
│   │           ├── cf2d1050-806b-4d32-9a18-083649e9142c.json
│   │           ├── d0920669-7709-4aab-97df-dd5e6c6719f9.json
│   │           ├── d12b9178-857a-4567-a7ef-3660f81813b9.json
│   │           ├── d21827e3-c794-4fa8-8cbc-6b46bfff25d2.json
│   │           ├── d223daa7-afa8-4108-8965-2ac9c45d9bab.json
│   │           ├── d2efd3f2-cf9a-4d75-89ad-3c8d873a1ff1.json
│   │           ├── d35aeaf2-da34-4207-a602-a9b236d62fca.json
│   │           ├── d4bb491a-51aa-48ac-a946-faf94bdb98f3.json
│   │           ├── d51f715d-c5b7-485b-8718-7112b700252b.json
│   │           ├── d62ac9e8-14ff-4a51-a65c-13b0be4a382d.json
│   │           ├── d7400d59-6e7d-438d-a433-7e248a89d7ef.json
│   │           ├── d8efb7b3-3d17-47f7-b46a-d4d5933d1c6c.json
│   │           ├── daff4d68-e7ba-4876-a389-f6379792db29.json
│   │           ├── db685a34-6e9f-480c-998f-74d9dfa33ded.json
│   │           ├── dd83acba-c2c2-471f-96e6-02a7564ccdf2.json
│   │           ├── ddd82ca8-addd-461f-a409-10ba4f2384f2.json
│   │           ├── de2c3001-b81a-43cb-bc8d-430cc5f31ecd.json
│   │           ├── df252df6-207a-4b5c-b429-517a9188442a.json
│   │           ├── dfc781e1-8984-4900-9fd9-4d67a8d06165.json
│   │           ├── e1a86ae0-794e-48c7-a521-6184fe47baf7.json
│   │           ├── e24996a9-4e92-47da-b164-afe68646772e.json
│   │           ├── e4a1e47d-a111-4f8f-aa81-fa8305cacc02.json
│   │           ├── e5411091-9430-440b-b167-06666aaa6282.json
│   │           ├── e68b7951-4436-4b51-9352-b8478a7016a2.json
│   │           ├── e745dd10-3a36-4c3c-9f6d-a0df1af88db5.json
│   │           ├── e7f85be0-c8af-4658-ae23-37f0fec2d3e8.json
│   │           ├── e96f6208-3db5-4e59-92fd-13bcc17a219f.json
│   │           ├── ec636ad8-59af-4d37-899d-7e38b6820142.json
│   │           ├── eed1b24c-8d17-474c-a8c5-abbb1253f3ac.json
│   │           ├── efcf28ed-64c0-4fb0-889e-adb9f7826bd2.json
│   │           ├── f0c05fe7-cce3-4ae7-81a7-04eb885a858d.json
│   │           ├── f1ee8d78-1966-45ac-899b-0fb7fdbef35c.json
│   │           ├── f1fdb37a-b154-4165-9964-31831b40be8b.json
│   │           ├── f45cae23-5852-45c2-a36d-923768351808.json
│   │           ├── f4c6688d-2e98-47bb-9880-d8beb1569036.json
│   │           ├── f511acae-1e9a-4fea-a426-acb3fd6aa5bd.json
│   │           ├── f699b6ac-7812-4564-adb5-8260b225f33b.json
│   │           ├── f77367b4-cad3-4d6a-961a-f4f4d6e24817.json
│   │           ├── f7bae092-4e7b-40f5-adae-a5c89bd9065a.json
│   │           ├── f8c2b960-f80e-488d-8126-04fe12057048.json
│   │           ├── f9d73365-1492-4efa-aabd-b730650157d0.json
│   │           ├── faf1a8f8-0cdf-43ba-8af8-d53a2d1a060f.json
│   │           ├── fb7828b5-0a12-46a7-8c5c-6c220d116e36.json
│   │           ├── fb857ec0-d80d-4404-ba0e-1ba436305d7d.json
│   │           ├── fda16ac8-d1cf-49db-93b7-833c274cd0d2.json
│   │           ├── fe3a8d7c-3dff-489e-abca-0b515db9420c.json
│   │           ├── fe78e904-37eb-46de-9195-1264c9acc754.json
│   │           ├── ff05e63d-c45b-499f-bc6e-a507047b4f10.json
│   │           └── ffe18889-8e9a-4b8c-8a81-867a03a3c274.json
│   ├── eslint.config.js
│   ├── fb/
│   │   ├── .firebaserc
│   │   ├── README.md
│   │   ├── firebase.json
│   │   ├── functions/
│   │   │   ├── package.json
│   │   │   ├── src/
│   │   │   │   ├── gemini.ts
│   │   │   │   └── index.ts
│   │   │   └── tsconfig.json
│   │   └── storage.rules
│   ├── package.json
│   ├── postcss.config.js
│   ├── src/
│   │   ├── app.css
│   │   ├── app.d.ts
│   │   ├── app.html
│   │   ├── lib/
│   │   │   ├── api.ts
│   │   │   ├── cloud-firebase.ts
│   │   │   ├── components/
│   │   │   │   ├── CollectionsList.svelte
│   │   │   │   ├── Droppable.svelte
│   │   │   │   └── ui/
│   │   │   │       ├── button/
│   │   │   │       │   ├── button.svelte
│   │   │   │       │   └── index.ts
│   │   │   │       ├── dropdown-menu/
│   │   │   │       │   ├── dropdown-menu-checkbox-item.svelte
│   │   │   │       │   ├── dropdown-menu-content.svelte
│   │   │   │       │   ├── dropdown-menu-item.svelte
│   │   │   │       │   ├── dropdown-menu-label.svelte
│   │   │   │       │   ├── dropdown-menu-radio-group.svelte
│   │   │   │       │   ├── dropdown-menu-radio-item.svelte
│   │   │   │       │   ├── dropdown-menu-separator.svelte
│   │   │   │       │   ├── dropdown-menu-shortcut.svelte
│   │   │   │       │   ├── dropdown-menu-sub-content.svelte
│   │   │   │       │   ├── dropdown-menu-sub-trigger.svelte
│   │   │   │       │   └── index.ts
│   │   │   │       ├── input/
│   │   │   │       │   ├── index.ts
│   │   │   │       │   └── input.svelte
│   │   │   │       └── label/
│   │   │   │           ├── index.ts
│   │   │   │           └── label.svelte
│   │   │   ├── consts.ts
│   │   │   ├── embedder.ts
│   │   │   ├── firebase.ts
│   │   │   ├── store.ts
│   │   │   └── utils.ts
│   │   └── routes/
│   │       ├── +layout.svelte
│   │       ├── +page.svelte
│   │       ├── api/
│   │       │   ├── getEmbeddings/
│   │       │   │   └── +server.ts
│   │       │   ├── listCollections/
│   │       │   │   └── +server.ts
│   │       │   ├── search/
│   │       │   │   └── +server.ts
│   │       │   └── umap/
│   │       │       └── +server.ts
│   │       ├── search/
│   │       │   ├── +page.svelte
│   │       │   └── ImageResult.svelte
│   │       └── viz/
│   │           ├── +page.svelte
│   │           ├── Image.svelte
│   │           ├── Scene.svelte
│   │           ├── Settings.svelte
│   │           └── Viz.svelte
│   ├── svelte.config.js
│   ├── tailwind.config.ts
│   ├── tsconfig.json
│   └── vite.config.ts
├── video-scrubber/
│   ├── .eslintrc.cjs
│   ├── .gcloudignore
│   ├── LICENSE
│   ├── README.md
│   ├── app.yaml
│   ├── index.html
│   ├── package.json
│   ├── postcss.config.js
│   ├── server/
│   │   ├── gemini.js
│   │   └── index.js
│   ├── src/
│   │   ├── Annotations.tsx
│   │   ├── App.tsx
│   │   ├── ClickableTimestamps.tsx
│   │   ├── ClipTimeline.tsx
│   │   ├── Controls.tsx
│   │   ├── Gemini.tsx
│   │   ├── PlayTimeline.tsx
│   │   ├── Timelines.tsx
│   │   ├── TimestampText.tsx
│   │   ├── Video.tsx
│   │   ├── VideoInput.tsx
│   │   ├── VideoState.tsx
│   │   ├── atoms.tsx
│   │   ├── consts.tsx
│   │   ├── index.css
│   │   ├── main.tsx
│   │   ├── utils.tsx
│   │   └── vite-env.d.ts
│   ├── tailwind.config.js
│   ├── tsconfig.json
│   ├── tsconfig.node.json
│   └── vite.config.ts
└── voice-cursor/
    ├── .gcloudignore
    ├── .gitignore
    ├── CONTRIBUTING.md
    ├── LICENSE
    ├── README.md
    ├── components.json
    ├── next.config.mjs
    ├── package.json
    ├── postcss.config.js
    ├── src/
    │   ├── app/
    │   │   ├── default-value.ts
    │   │   ├── globals.css
    │   │   ├── layout.tsx
    │   │   ├── page.tsx
    │   │   ├── prosemirror.css
    │   │   └── test-audio/
    │   │       └── page.tsx
    │   ├── components/
    │   │   ├── editor/
    │   │   │   ├── advanced-editor.tsx
    │   │   │   ├── audio-menu.tsx
    │   │   │   ├── client-editor.tsx
    │   │   │   ├── extensions/
    │   │   │   │   └── audio-highlight.ts
    │   │   │   ├── extensions.ts
    │   │   │   ├── image-upload.ts
    │   │   │   ├── prompt-popover.tsx
    │   │   │   ├── selectors/
    │   │   │   │   └── voice-popover.tsx
    │   │   │   ├── slash-command.tsx
    │   │   │   └── unused-selectors/
    │   │   │       ├── color-selector.tsx
    │   │   │       ├── highlight-selector.tsx
    │   │   │       ├── link-selector.tsx
    │   │   │       ├── node-selector.tsx
    │   │   │       └── text-buttons.tsx
    │   │   ├── theme-provider.tsx
    │   │   ├── theme-toggle.tsx
    │   │   └── ui/
    │   │       ├── button.tsx
    │   │       ├── dropdown-menu.tsx
    │   │       ├── popover.tsx
    │   │       ├── separator.tsx
    │   │       ├── sonner.tsx
    │   │       └── tooltip.tsx
    │   └── lib/
    │       ├── tone-options.ts
    │       ├── utils.ts
    │       └── voice-options.ts
    ├── tailwind.config.ts
    └── tsconfig.json
Download .txt
SYMBOL INDEX (94 symbols across 51 files)

FILE: image-to-code/pages/_app.js
  function App (line 19) | function App({ Component, pageProps }) {

FILE: image-to-code/pages/_document.js
  function Document (line 19) | function Document() {

FILE: image-to-code/pages/api/hello.js
  function handler (line 19) | function handler(req, res) {

FILE: image-to-code/pages/index.js
  constant SAMPLE_IMAGES (line 25) | const SAMPLE_IMAGES = [
  constant MODEL_NAME (line 39) | const MODEL_NAME = "gemini-2.0-flash-exp";
  function generateCodeFromImage (line 44) | async function generateCodeFromImage(imageBase64, prompt, userInput) {
  function Home (line 69) | function Home() {

FILE: multimodal-embeddings/fb/functions/src/gemini.ts
  function getImagePart (line 8) | function getImagePart(buffer, mimeType) {

FILE: multimodal-embeddings/src/lib/api.ts
  type StoredImage (line 3) | type StoredImage = {
  type EmbeddingRequest (line 10) | type EmbeddingRequest = {
  type SearchRequest (line 15) | type SearchRequest = {
  type SearchResponse (line 20) | type SearchResponse = {
  type Collection (line 25) | type Collection = {
  type InteractionEvent (line 31) | type InteractionEvent = THREE.Intersection & {

FILE: multimodal-embeddings/src/lib/components/ui/button/index.ts
  type Variant (line 31) | type Variant = VariantProps<typeof buttonVariants>["variant"];
  type Size (line 32) | type Size = VariantProps<typeof buttonVariants>["size"];
  type Props (line 34) | type Props = ButtonPrimitive.Props & {
  type Events (line 39) | type Events = ButtonPrimitive.Events;

FILE: multimodal-embeddings/src/lib/components/ui/input/index.ts
  type FormInputEvent (line 3) | type FormInputEvent<T extends Event = Event> = T & {
  type InputEvents (line 6) | type InputEvents = {

FILE: multimodal-embeddings/src/lib/consts.ts
  constant FIRESTORE_DB_ID (line 9) | const FIRESTORE_DB_ID = useEmulator ? 'cl-demos-firestore' : 'your-proje...
  constant FIREBASE_STORAGE_EMULATOR_BUCKET (line 10) | const FIREBASE_STORAGE_EMULATOR_BUCKET = 'mm-demo.appspot.com';
  constant DEFAULT_EMULATOR_FIRESTORE_COLLECTION (line 11) | const DEFAULT_EMULATOR_FIRESTORE_COLLECTION = 'weather';
  constant FIREBASE_PROJECT_ID (line 12) | const FIREBASE_PROJECT_ID = 'your-project-id';
  constant FIREBASE_CONFIG (line 13) | const FIREBASE_CONFIG = {

FILE: multimodal-embeddings/src/lib/embedder.ts
  type Prompt (line 22) | type Prompt = {

FILE: multimodal-embeddings/src/lib/store.ts
  type ImageData (line 5) | type ImageData = {
  type ImageCollection (line 13) | type ImageCollection = {
  type RemapFunction (line 19) | type RemapFunction = () => Promise<void>;

FILE: multimodal-embeddings/src/lib/utils.ts
  function cn (line 6) | function cn(...inputs: ClassValue[]) {
  type FlyAndScaleParams (line 10) | type FlyAndScaleParams = {

FILE: multimodal-embeddings/src/routes/api/getEmbeddings/+server.ts
  function POST (line 10) | async function POST({ request }) {

FILE: multimodal-embeddings/src/routes/api/listCollections/+server.ts
  function POST (line 9) | async function POST() {

FILE: multimodal-embeddings/src/routes/api/search/+server.ts
  function POST (line 9) | async function POST({ request }) {

FILE: video-scrubber/server/gemini.js
  constant KEY (line 18) | const KEY = process.env["GEMINI_API_KEY"];

FILE: video-scrubber/src/Annotations.tsx
  function Annotations (line 19) | function Annotations() {

FILE: video-scrubber/src/App.tsx
  function App (line 29) | function App() {

FILE: video-scrubber/src/ClickableTimestamps.tsx
  function ClickableTimestamps (line 31) | function ClickableTimestamps() {

FILE: video-scrubber/src/ClipTimeline.tsx
  function ClipTimeline (line 30) | function ClipTimeline() {

FILE: video-scrubber/src/Controls.tsx
  function Controls (line 28) | function Controls() {

FILE: video-scrubber/src/Gemini.tsx
  function Gemini (line 41) | function Gemini() {

FILE: video-scrubber/src/PlayTimeline.tsx
  function PlayTimeline (line 25) | function PlayTimeline() {

FILE: video-scrubber/src/Timelines.tsx
  function Timelines (line 19) | function Timelines() {

FILE: video-scrubber/src/TimestampText.tsx
  function TimestampText (line 18) | function TimestampText() {

FILE: video-scrubber/src/Video.tsx
  function Video (line 18) | function Video() {

FILE: video-scrubber/src/VideoInput.tsx
  function VideoInput (line 19) | function VideoInput() {

FILE: video-scrubber/src/VideoState.tsx
  function VideoState (line 24) | function VideoState() {

FILE: video-scrubber/src/atoms.tsx
  type ProcessedVideo (line 37) | type ProcessedVideo = {
  method getItem (line 47) | getItem(key, _) {
  method setItem (line 55) | setItem(key, val) {
  method removeItem (line 65) | removeItem(key) {

FILE: video-scrubber/src/utils.tsx
  function secondsToTimestamp (line 15) | function secondsToTimestamp(seconds: number): string {
  type ParsedTimestamp (line 27) | type ParsedTimestamp = {
  function parseTimestamps (line 32) | function parseTimestamps(text: string): ParsedTimestamp[] {
  function timestampToSeconds (line 59) | function timestampToSeconds(timestamp: string): number {

FILE: voice-cursor/src/app/layout.tsx
  function RootLayout (line 34) | function RootLayout({

FILE: voice-cursor/src/app/page.tsx
  function Home (line 50) | function Home() {

FILE: voice-cursor/src/app/test-audio/page.tsx
  constant VOICE_OPTIONS (line 22) | const VOICE_OPTIONS = {
  function TestAudio (line 26) | function TestAudio() {

FILE: voice-cursor/src/components/editor/advanced-editor.tsx
  type EditorProp (line 39) | interface EditorProp {

FILE: voice-cursor/src/components/editor/audio-menu.tsx
  type AudioMenuProps (line 23) | interface AudioMenuProps {
  function AudioMenu (line 30) | function AudioMenu({ audioKey, position, prompt, onClose }: AudioMenuPro...

FILE: voice-cursor/src/components/editor/client-editor.tsx
  type EditorWrapperProps (line 20) | interface EditorWrapperProps {
  function EditorWrapper (line 25) | function EditorWrapper({ initialValue, onChange }: EditorWrapperProps) {

FILE: voice-cursor/src/components/editor/extensions.ts
  method addProseMirrorPlugins (line 49) | addProseMirrorPlugins() {

FILE: voice-cursor/src/components/editor/extensions/audio-highlight.ts
  type MouseLeaveHandler (line 26) | type MouseLeaveHandler = EventListener;
  function removeHighlightAndAudio (line 40) | function removeHighlightAndAudio(audioKey: string) {
  function renderAudioMenu (line 53) | function renderAudioMenu(
  method addOptions (line 79) | addOptions() {
  method addGlobalAttributes (line 87) | addGlobalAttributes() {
  method addProseMirrorPlugins (line 130) | addProseMirrorPlugins() {

FILE: voice-cursor/src/components/editor/prompt-popover.tsx
  type PromptPopoverProps (line 19) | interface PromptPopoverProps {
  function PromptPopover (line 25) | function PromptPopover({ position, prompt, onClose }: PromptPopoverProps) {

FILE: voice-cursor/src/components/editor/selectors/voice-popover.tsx
  type VoicePopoverProps (line 32) | interface VoicePopoverProps {
  type MimeParams (line 37) | interface MimeParams {

FILE: voice-cursor/src/components/editor/unused-selectors/color-selector.tsx
  type BubbleColorMenuItem (line 27) | interface BubbleColorMenuItem {
  constant TEXT_COLORS (line 32) | const TEXT_COLORS: BubbleColorMenuItem[] = [
  constant HIGHLIGHT_COLORS (line 71) | const HIGHLIGHT_COLORS: BubbleColorMenuItem[] = [
  type ColorSelectorProps (line 110) | interface ColorSelectorProps {

FILE: voice-cursor/src/components/editor/unused-selectors/highlight-selector.tsx
  constant HIGHLIGHT_COLORS (line 28) | const HIGHLIGHT_COLORS = [
  type HighlightSelectorProps (line 67) | interface HighlightSelectorProps {

FILE: voice-cursor/src/components/editor/unused-selectors/link-selector.tsx
  function isValidUrl (line 34) | function isValidUrl(url: string) {
  function getUrlFromString (line 42) | function getUrlFromString(str: string) {
  type LinkSelectorProps (line 52) | interface LinkSelectorProps {

FILE: voice-cursor/src/components/editor/unused-selectors/node-selector.tsx
  type SelectorItem (line 36) | type SelectorItem = {
  type NodeSelectorProps (line 111) | interface NodeSelectorProps {

FILE: voice-cursor/src/components/theme-provider.tsx
  function ThemeProvider (line 23) | function ThemeProvider({ children, ...props }: ThemeProviderProps) {

FILE: voice-cursor/src/components/theme-toggle.tsx
  function ThemeToggle (line 31) | function ThemeToggle() {

FILE: voice-cursor/src/components/ui/button.tsx
  type ButtonProps (line 52) | interface ButtonProps

FILE: voice-cursor/src/components/ui/sonner.tsx
  type ToasterProps (line 22) | type ToasterProps = React.ComponentProps<typeof Sonner>

FILE: voice-cursor/src/lib/tone-options.ts
  type ToneOption (line 18) | interface ToneOption {
  constant TONE_OPTIONS (line 25) | const TONE_OPTIONS: ToneOption[] = [

FILE: voice-cursor/src/lib/utils.ts
  function cn (line 20) | function cn(...inputs: ClassValue[]) {

FILE: voice-cursor/src/lib/voice-options.ts
  constant VOICE_OPTIONS (line 18) | const VOICE_OPTIONS = [
Condensed preview — 618 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (554K chars).
[
  {
    "path": "CONTRIBUTING.md",
    "chars": 1100,
    "preview": "# How to Contribute\n\nWe'd love to accept your patches and contributions to this project. There are\njust a few small guid"
  },
  {
    "path": "LICENSE",
    "chars": 11357,
    "preview": "                                 Apache License\n                           Version 2.0, January 2004\n                   "
  },
  {
    "path": "README.md",
    "chars": 5213,
    "preview": "# Gemini API Demos\n\nHello! 👋 This is a repository of examples built with Google's Gemini API, which lets you build multi"
  },
  {
    "path": "image-to-code/.gcloudignore",
    "chars": 528,
    "preview": "# This file specifies files that are *not* uploaded to Google Cloud\n# using gcloud. It follows the same syntax as .gitig"
  },
  {
    "path": "image-to-code/.gitignore",
    "chars": 519,
    "preview": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pn"
  },
  {
    "path": "image-to-code/CONTRIBUTING.md",
    "chars": 980,
    "preview": "# How to contribute\n\nWe'd love to accept your patches and contributions to this project.\n\n## Before you begin\n\nSign our "
  },
  {
    "path": "image-to-code/LICENSE",
    "chars": 11357,
    "preview": "\n                                 Apache License\n                           Version 2.0, January 2004\n                  "
  },
  {
    "path": "image-to-code/README.md",
    "chars": 4768,
    "preview": "# Image to Code Generator 🎨\n\n![image-to-code-sketch](./readme/smoke.gif)\n\nGet started with [p5js](https://p5js.org/) ske"
  },
  {
    "path": "image-to-code/components/CodePreview.js",
    "chars": 8050,
    "preview": "/**\n * Copyright 2025 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not us"
  },
  {
    "path": "image-to-code/components/Header.js",
    "chars": 1204,
    "preview": "import React from 'react';\nimport { Github, Info } from 'lucide-react';\n\nconst Header = () => {\n  return (\n    <div clas"
  },
  {
    "path": "image-to-code/components/ToggleButton.js",
    "chars": 580,
    "preview": "import React from 'react';\n\nconst ToggleButton = ({ icon: Icon, label, isSelected, onClick }) => {\n  const baseStyles = "
  },
  {
    "path": "image-to-code/jsconfig.json",
    "chars": 73,
    "preview": "{\n  \"compilerOptions\": {\n    \"paths\": {\n      \"@/*\": [\"./*\"]\n    }\n  }\n}\n"
  },
  {
    "path": "image-to-code/next.config.mjs",
    "chars": 714,
    "preview": "/**\n * Copyright 2025 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not us"
  },
  {
    "path": "image-to-code/package.json",
    "chars": 631,
    "preview": "{\n  \"name\": \"service-image-code-2\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"scripts\": {\n    \"dev\": \"next dev --turbo"
  },
  {
    "path": "image-to-code/pages/_app.js",
    "chars": 725,
    "preview": "/**\n * Copyright 2025 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not us"
  },
  {
    "path": "image-to-code/pages/_document.js",
    "chars": 853,
    "preview": "/**\n * Copyright 2025 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not us"
  },
  {
    "path": "image-to-code/pages/api/hello.js",
    "chars": 767,
    "preview": "/**\n * Copyright 2025 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not us"
  },
  {
    "path": "image-to-code/pages/index.js",
    "chars": 17733,
    "preview": "/**\n * Copyright 2025 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not us"
  },
  {
    "path": "image-to-code/postcss.config.mjs",
    "chars": 731,
    "preview": "/**\n * Copyright 2025 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not us"
  },
  {
    "path": "image-to-code/styles/globals.css",
    "chars": 941,
    "preview": "/**\n * Copyright 2025 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not us"
  },
  {
    "path": "image-to-code/tailwind.config.js",
    "chars": 2988,
    "preview": "/**\n * Copyright 2025 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not us"
  },
  {
    "path": "image-to-code/tailwind.config.mjs",
    "chars": 960,
    "preview": "/**\n * Copyright 2025 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not us"
  },
  {
    "path": "multimodal-embeddings/.gcloudignore",
    "chars": 529,
    "preview": "# This file specifies files that are *not* uploaded to Google Cloud\n# using gcloud. It follows the same syntax as .gitig"
  },
  {
    "path": "multimodal-embeddings/.npmrc",
    "chars": 19,
    "preview": "engine-strict=true\n"
  },
  {
    "path": "multimodal-embeddings/.prettierignore",
    "chars": 81,
    "preview": "# Ignore files for PNPM, NPM and YARN\npnpm-lock.yaml\npackage-lock.json\nyarn.lock\n"
  },
  {
    "path": "multimodal-embeddings/.prettierrc",
    "chars": 278,
    "preview": "{\n\t\"useTabs\": true,\n\t\"singleQuote\": true,\n\t\"trailingComma\": \"none\",\n\t\"printWidth\": 100,\n\t\"plugins\": [\n\t\t\"prettier-plugin"
  },
  {
    "path": "multimodal-embeddings/README.md",
    "chars": 7498,
    "preview": "> **This repo is provided _as-is_ for reference**, since you need a Firebase project with at least one collection that c"
  },
  {
    "path": "multimodal-embeddings/app.yaml",
    "chars": 406,
    "preview": "runtime: nodejs20\nservice: mm-embed\ninstance_class: F2\ndefault_expiration: '0s'\n\n# handlers element provides a list of U"
  },
  {
    "path": "multimodal-embeddings/components.json",
    "chars": 275,
    "preview": "{\n\t\"$schema\": \"https://shadcn-svelte.com/schema.json\",\n\t\"style\": \"new-york\",\n\t\"tailwind\": {\n\t\t\"config\": \"tailwind.config"
  },
  {
    "path": "multimodal-embeddings/cors.json",
    "chars": 74,
    "preview": "[\n\t{\n\t\t\"origin\": [\"*\"],\n\t\t\"method\": [\"GET\"],\n\t\t\"maxAgeSeconds\": 3600\n\t}\n]\n"
  },
  {
    "path": "multimodal-embeddings/emulator-export/firebase-export-metadata.json",
    "chars": 261,
    "preview": "{\n  \"version\": \"13.20.2\",\n  \"firestore\": {\n    \"version\": \"1.19.8\",\n    \"path\": \"firestore_export\",\n    \"metadata_file\":"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/blobs/b2e7394a-32cb-45ca-abea-73d0b2df628f",
    "chars": 130,
    "preview": "--boundary\r\nContent-Type: application/json\r\n\r\n{\"contentType\":\"text/plain\"}\r\n--boundary\r\nContent-Type: text/plain\r\n\r\n--bo"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/blobs/dd83acba-c2c2-471f-96e6-02a7564ccdf2",
    "chars": 130,
    "preview": "--boundary\r\nContent-Type: application/json\r\n\r\n{\"contentType\":\"text/plain\"}\r\n--boundary\r\nContent-Type: text/plain\r\n\r\n--bo"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/buckets.json",
    "chars": 60,
    "preview": "{\n\t\"buckets\": [\n\t\t{\n\t\t\t\"id\": \"mm-demo.appspot.com\"\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/0001871f-3e7a-461d-b428-92efcd1ce0fd.json",
    "chars": 533,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_0595.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/03da0657-bb18-42fd-9831-7e48c0b723cf.json",
    "chars": 532,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_106.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 1"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/03f9df1b-0c0d-4014-8a7d-3a5eccad3faf.json",
    "chars": 528,
    "preview": "{\n  \"name\": \"mmembed/weather/103.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 1727834"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/04b454df-1216-4ec1-84fb-f59afd85fe90.json",
    "chars": 529,
    "preview": "{\n  \"name\": \"mmembed/weather/6101.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/04f6c107-9611-4db9-aba8-98841ba5ae6f.json",
    "chars": 534,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_124.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 1"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/06640a30-4d8e-4812-890e-e0374ad30f58.json",
    "chars": 528,
    "preview": "{\n  \"name\": \"mmembed/weather/0604.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/06919cbe-0678-4bfd-8cec-4d09e8e2d51b.json",
    "chars": 535,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_6096.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/0a86afce-8076-4ab8-bd65-c1eaf5ec966f.json",
    "chars": 528,
    "preview": "{\n  \"name\": \"mmembed/weather/6098.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/0b286de2-4d59-442c-933e-76f0f8e3cd0b.json",
    "chars": 534,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_0008.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/0c96fb25-144b-46eb-bdf1-74c575ddb6e9.json",
    "chars": 535,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_2211.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/0cf49b23-1d83-41c8-85d3-5c31fbf7b123.json",
    "chars": 533,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_14.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 17"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/0d5f8ef7-dd37-432a-a0eb-80ccb822abc5.json",
    "chars": 535,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_1838.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/0d961bbe-aa5c-4d0e-9e53-dc7a7ec2b96c.json",
    "chars": 535,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_6102.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/0e7ec18e-93a5-4d40-845b-92cf98040f13.json",
    "chars": 528,
    "preview": "{\n  \"name\": \"mmembed/weather/4087.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/0ea29a34-dbcf-487a-b0e4-dd1c4028c7e2.json",
    "chars": 530,
    "preview": "{\n  \"name\": \"mmembed/weather/3608.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/0fb276ab-ad9f-4cd4-95ea-335d18ea72fe.json",
    "chars": 534,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_1832.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/0ff12c88-f320-4ef7-9356-26fbb9f3590e.json",
    "chars": 535,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_6090.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/114b11eb-de0d-441b-85d9-d70db5353156.json",
    "chars": 529,
    "preview": "{\n  \"name\": \"mmembed/weather/0596.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/125f8010-6ab0-463f-8278-5565cfc9d618.json",
    "chars": 529,
    "preview": "{\n  \"name\": \"mmembed/weather/4078.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/1514936f-769c-40b4-bfe4-4746fbc79fcd.json",
    "chars": 534,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_4083.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/16227ec4-2585-40aa-a5fd-e25e0d227b66.json",
    "chars": 533,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_4075.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/17f5cac8-e8c5-45c8-b6b3-afaa11b556ff.json",
    "chars": 528,
    "preview": "{\n  \"name\": \"mmembed/weather/2209.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/18964cd0-de01-46bd-88c3-ffad0b15b020.json",
    "chars": 534,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_3613.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/1aca1226-11c8-42f4-8137-339fe674e55c.json",
    "chars": 528,
    "preview": "{\n  \"name\": \"mmembed/weather/6095.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/1b831e3c-a1e8-4eb4-b3d6-de18b656814a.json",
    "chars": 529,
    "preview": "{\n  \"name\": \"mmembed/weather/2217.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/1ba5a0d9-2902-4a7a-8f33-862cf0abcb38.json",
    "chars": 534,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_6103.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/1bd97095-c1d4-4104-ae2a-f6c0e56dde89.json",
    "chars": 529,
    "preview": "{\n  \"name\": \"mmembed/weather/6092.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/1ccff42b-89c8-4a66-9d8c-3c7f1c307625.json",
    "chars": 529,
    "preview": "{\n  \"name\": \"mmembed/weather/0011.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/1d363b0e-cea6-4e58-aa6f-17c005c32f60.json",
    "chars": 529,
    "preview": "{\n  \"name\": \"mmembed/weather/0001.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/1e2e00f2-eb8c-432d-91a9-1f49c9bb2087.json",
    "chars": 529,
    "preview": "{\n  \"name\": \"mmembed/weather/6099.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/1e72b424-5c06-42c0-99eb-140545880ccb.json",
    "chars": 530,
    "preview": "{\n  \"name\": \"mmembed/weather/3607.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/1e859368-8d5b-4ecc-b30f-116ec3377f39.json",
    "chars": 534,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_2212.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/1f67aea5-0f3e-4b12-9554-aae3a84d5354.json",
    "chars": 534,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_0596.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/1fb32b8f-72d0-43ac-8955-d3804be94bc2.json",
    "chars": 535,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_0001.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/2166725e-18e6-4982-aeb7-2f4925461bf1.json",
    "chars": 530,
    "preview": "{\n  \"name\": \"mmembed/weather/0000.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/21af1f86-eb45-421d-90ff-962fc5509c16.json",
    "chars": 527,
    "preview": "{\n  \"name\": \"mmembed/weather/14.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 17278342"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/2883e822-976c-4d81-9601-2df44f96bcd7.json",
    "chars": 528,
    "preview": "{\n  \"name\": \"mmembed/weather/4083.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/28a96371-1742-4e03-ae5c-ba309216af49.json",
    "chars": 535,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_1841.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/2ae61d7e-7bc1-4695-bd44-3637adbef998.json",
    "chars": 535,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_6093.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/2c938160-fe51-4222-a7d1-8220ad4ee300.json",
    "chars": 534,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_4082.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/2de6149c-40aa-471f-94a1-2dd2824724d8.json",
    "chars": 535,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_0007.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/2eeccd3b-575d-4055-95d9-c5fbf26b3a8d.json",
    "chars": 534,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_2216.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/2efc3c4b-2601-4d8f-ba2b-8d84712c436e.json",
    "chars": 533,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_11.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 17"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/2f4a0b48-dc3f-4fd4-be4d-726c56619302.json",
    "chars": 535,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_3602.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/30621326-86e9-4f15-b5ea-6eaad59947df.json",
    "chars": 528,
    "preview": "{\n  \"name\": \"mmembed/weather/4082.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/30d12518-b643-48cf-8608-7aa9771fed14.json",
    "chars": 529,
    "preview": "{\n  \"name\": \"mmembed/weather/3609.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/31500630-b5a2-4092-86b1-5f2565716d86.json",
    "chars": 535,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_6094.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/31719f53-507c-4a3f-8b29-0be61178f3e7.json",
    "chars": 532,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_2210.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/354b878a-20c1-4b79-8a41-2b96e63eedaf.json",
    "chars": 529,
    "preview": "{\n  \"name\": \"mmembed/weather/1832.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/362a4319-eac2-4157-82f8-4cc5624ab0ee.json",
    "chars": 529,
    "preview": "{\n  \"name\": \"mmembed/weather/1830.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/36a45009-4146-4860-ab0f-2d41d6e1b8d2.json",
    "chars": 529,
    "preview": "{\n  \"name\": \"mmembed/weather/4076.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/36b5a479-0181-4f1b-98f4-86a64d4e1191.json",
    "chars": 535,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_6095.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/37be70be-0250-4281-9532-401a7bf29f41.json",
    "chars": 535,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_3608.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/3954ab46-6a25-4bb6-ab32-f0d55c546cb2.json",
    "chars": 535,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_0004.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/3b33aa14-5d04-43bd-9ef6-e30b8861d7db.json",
    "chars": 534,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_3605.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/3b688492-90d3-4d82-b6fc-499bc09e56eb.json",
    "chars": 535,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_2219.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/3dccd76d-64a7-47c2-a9b5-eea9b2efa12f.json",
    "chars": 529,
    "preview": "{\n  \"name\": \"mmembed/weather/0602.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/3e64b976-d7b3-4356-92d7-0aeb15f45fd5.json",
    "chars": 533,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_13.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 17"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/3e966f04-2910-4104-8f1e-412bf33917c0.json",
    "chars": 534,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_0006.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/412215ae-10af-413a-9f75-861667cf12fe.json",
    "chars": 534,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_0598.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/41e09631-0791-4051-96ce-4e18d05f2be9.json",
    "chars": 535,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_0005.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/4223ad2c-c8fc-4f31-8454-284312b22905.json",
    "chars": 534,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_0010.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/42694520-432b-4928-adce-006db533f6f8.json",
    "chars": 534,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_6092.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/4418a01d-24ec-4e4b-b29a-e0689b395969.json",
    "chars": 527,
    "preview": "{\n  \"name\": \"mmembed/weather/124.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 1727834"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/45131a81-db3a-4f9b-9330-5e2eb2b3eb44.json",
    "chars": 529,
    "preview": "{\n  \"name\": \"mmembed/weather/1840.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/454a16c7-6ec4-4c29-838f-6d235d729c0d.json",
    "chars": 534,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_3604.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/45b0127e-7f92-437f-97e4-f96b50ca60f6.json",
    "chars": 534,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_1839.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/460d8563-7063-413d-aa9c-d50fb8c9a0a3.json",
    "chars": 534,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_3607.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/464ea502-b1a7-47a1-af48-7b4296b13896.json",
    "chars": 529,
    "preview": "{\n  \"name\": \"mmembed/weather/0592.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/477f1478-d154-44c1-9b3e-f7bc08b81b1b.json",
    "chars": 528,
    "preview": "{\n  \"name\": \"mmembed/weather/106.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 1727834"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/47a173ba-dd3f-4e02-8409-e46bf5c831ca.json",
    "chars": 529,
    "preview": "{\n  \"name\": \"mmembed/weather/0593.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/47eb894d-5a60-4c64-b22a-f496f63a869e.json",
    "chars": 535,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_6091.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/487cbb33-22c6-41f6-8e6e-4125927e2f20.json",
    "chars": 534,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_0599.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/495964a6-f764-487d-aec8-a1c1c02d8be3.json",
    "chars": 529,
    "preview": "{\n  \"name\": \"mmembed/weather/2215.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/4ad91f5f-7c9e-40e4-9c4f-c03a22bd8b2f.json",
    "chars": 529,
    "preview": "{\n  \"name\": \"mmembed/weather/1838.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/5012b076-ef07-41c8-9da7-033e2af2f579.json",
    "chars": 534,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_102.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 1"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/50b673c2-e1b9-4b84-bbcc-1c47cca0cace.json",
    "chars": 533,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_4076.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/530a9038-98b8-4925-b26b-f5c7776d882f.json",
    "chars": 530,
    "preview": "{\n  \"name\": \"mmembed/weather/3606.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/55e55a5c-a59a-4c7f-846a-73784ee2f25d.json",
    "chars": 529,
    "preview": "{\n  \"name\": \"mmembed/weather/0003.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/563a8d9a-0285-4496-aaba-59138c349dad.json",
    "chars": 528,
    "preview": "{\n  \"name\": \"mmembed/weather/6093.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/58852f43-76ea-4ad1-9c6a-a33c2c53ff56.json",
    "chars": 534,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_0601.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/5a3ce50b-2658-4f68-b12d-0eec92a7223a.json",
    "chars": 528,
    "preview": "{\n  \"name\": \"mmembed/weather/0013.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/5a3ecd67-d20b-405d-83f7-86ff772f6d6f.json",
    "chars": 529,
    "preview": "{\n  \"name\": \"mmembed/weather/3600.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/5b388511-e3b8-4d3f-b0bf-d085f75c7769.json",
    "chars": 530,
    "preview": "{\n  \"name\": \"mmembed/weather/2211.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/5b62fd41-e2a2-4ba6-b305-a854619a947b.json",
    "chars": 528,
    "preview": "{\n  \"name\": \"mmembed/weather/0605.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/5ef2346d-d39e-49ce-b26a-9e5069dba421.json",
    "chars": 534,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_1830.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/5fd6d66a-8bf1-4f81-b0eb-9895552a8ec4.json",
    "chars": 529,
    "preview": "{\n  \"name\": \"mmembed/weather/6103.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/61556f93-4dd2-43e5-bc4d-78cbe3809d42.json",
    "chars": 529,
    "preview": "{\n  \"name\": \"mmembed/weather/1843.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/620c1be4-e353-46d9-8dbd-c3079d5efd6e.json",
    "chars": 535,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_2218.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/62b85256-0f54-47cb-ae83-d45cd0a66030.json",
    "chars": 530,
    "preview": "{\n  \"name\": \"mmembed/weather/1833.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/64609c87-07e8-48a4-b8c2-a26210e1dd0b.json",
    "chars": 535,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_3606.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/64f13cdd-ee8c-4238-b66b-14c1baa578e3.json",
    "chars": 529,
    "preview": "{\n  \"name\": \"mmembed/weather/4086.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/65c4dee4-4429-4eae-9250-2e969f3c190a.json",
    "chars": 534,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_4080.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/66569702-2074-4047-a794-4f11e3b285f2.json",
    "chars": 529,
    "preview": "{\n  \"name\": \"mmembed/weather/4075.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/67aaca3d-2acc-4987-8ed9-3f2fbf075f7c.json",
    "chars": 529,
    "preview": "{\n  \"name\": \"mmembed/weather/2214.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/67b6aeb1-b7d0-4402-8a60-b2f9c0c8b447.json",
    "chars": 529,
    "preview": "{\n  \"name\": \"mmembed/weather/2216.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/686d4f0b-5c28-48f4-b656-b354a13981a7.json",
    "chars": 533,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_0600.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/69657785-7299-408d-8453-8cb32f848150.json",
    "chars": 530,
    "preview": "{\n  \"name\": \"mmembed/weather/2220.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/6b6f7c8b-a5b9-4436-80a0-f128c1eb3bcf.json",
    "chars": 530,
    "preview": "{\n  \"name\": \"mmembed/weather/2218.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/6d8f5f9c-fef6-4179-ba05-79e361503c7a.json",
    "chars": 534,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_1842.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/70772163-4c3b-493a-ad04-87b67ee35d71.json",
    "chars": 535,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_119.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 1"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/70c43a85-254c-49b1-bf14-d13687913f2d.json",
    "chars": 528,
    "preview": "{\n  \"name\": \"mmembed/weather/0010.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/70db2153-5bbf-42f6-91bc-f3cb4249dc01.json",
    "chars": 528,
    "preview": "{\n  \"name\": \"mmembed/weather/109.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 1727834"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/70ef85a5-fb7a-41ff-ac02-0d00927d0274.json",
    "chars": 529,
    "preview": "{\n  \"name\": \"mmembed/weather/119.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 1727834"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/70fc8a82-bfeb-4bb7-bb95-2a654168ead1.json",
    "chars": 534,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_6101.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/71894824-0cd9-4acf-9178-abba58090e42.json",
    "chars": 535,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_0000.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/721bdd57-7850-42e4-9fb9-747525b187c8.json",
    "chars": 530,
    "preview": "{\n  \"name\": \"mmembed/weather/2210.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/7706c66e-3fd9-45eb-9df5-8308b84dd194.json",
    "chars": 534,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_0594.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/7846c694-8e7a-47dd-b8b8-a2448285dcc0.json",
    "chars": 529,
    "preview": "{\n  \"name\": \"mmembed/weather/2221.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/78a3c767-265f-419d-bb3f-c3eba6e22017.json",
    "chars": 529,
    "preview": "{\n  \"name\": \"mmembed/weather/6097.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/78dd9bfd-a0ca-4ac9-9473-45d0d051fb1e.json",
    "chars": 534,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_4085.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/799fcdd0-1054-4c53-a218-48cb8f3ed044.json",
    "chars": 530,
    "preview": "{\n  \"name\": \"mmembed/weather/3610.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/7a5a7379-d29b-412b-9a50-565e171ab712.json",
    "chars": 530,
    "preview": "{\n  \"name\": \"mmembed/weather/3612.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/7c12f79f-d474-446f-b5fe-f669e60f8227.json",
    "chars": 533,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_0009.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/7c4a2540-75b9-4e37-b4b1-a6d7f62830cb.json",
    "chars": 534,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_110.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 1"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/7c689600-cf26-4953-8be5-ae58faa5cad0.json",
    "chars": 534,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_1834.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/7d321a59-d6c9-433e-bfcb-2ee10dcd2745.json",
    "chars": 529,
    "preview": "{\n  \"name\": \"mmembed/weather/6102.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/7ff005e0-3f17-423f-9a04-1d762447eb07.json",
    "chars": 535,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_3603.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/8278f4eb-708a-4054-b408-9b4a2a8d6b7a.json",
    "chars": 535,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_0012.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/828f697d-fd40-470e-8326-8a40dccf9096.json",
    "chars": 534,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_4081.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/832cacff-0ed7-4685-a383-a0d94e6a366e.json",
    "chars": 534,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_1835.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/84307d32-0903-4a1c-8599-9d3938995da6.json",
    "chars": 528,
    "preview": "{\n  \"name\": \"mmembed/weather/4080.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/84491769-76dd-4667-825d-95156d99ba3f.json",
    "chars": 529,
    "preview": "{\n  \"name\": \"mmembed/weather/1834.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/848c006e-a50c-4d24-9e96-f9b12ab5f66b.json",
    "chars": 529,
    "preview": "{\n  \"name\": \"mmembed/weather/1841.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/8628a1cb-e588-483c-b00f-ba449d2c27b1.json",
    "chars": 535,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_4088.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/87039e64-1d6f-4f28-92e5-322ae686133d.json",
    "chars": 528,
    "preview": "{\n  \"name\": \"mmembed/weather/105.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 1727834"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/884b9432-28fb-465b-a826-35daec2593d7.json",
    "chars": 535,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_2221.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/8bc987b7-d22f-4331-8de5-7149d9b73361.json",
    "chars": 529,
    "preview": "{\n  \"name\": \"mmembed/weather/117.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 1727834"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/8cd45f77-4225-412e-9c61-bb90285356c5.json",
    "chars": 529,
    "preview": "{\n  \"name\": \"mmembed/weather/1835.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/8e0d391e-c779-4a34-a8de-f6abccc701ab.json",
    "chars": 535,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_0603.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/8f014805-5f51-439d-9447-b686abf889fa.json",
    "chars": 529,
    "preview": "{\n  \"name\": \"mmembed/weather/3602.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/91006bcb-22a2-480d-83ba-5393a41c6558.json",
    "chars": 530,
    "preview": "{\n  \"name\": \"mmembed/weather/3605.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/91bbc49d-9748-4638-a75c-573f23ff7c5e.json",
    "chars": 529,
    "preview": "{\n  \"name\": \"mmembed/weather/4088.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/92e62795-a847-46bc-a983-8f2f975f4ac3.json",
    "chars": 536,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_0593.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/92e944f9-bcfa-4e3c-95ad-2d6619cc377b.json",
    "chars": 529,
    "preview": "{\n  \"name\": \"mmembed/weather/0598.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/934f914b-21f8-45e6-812c-ac29926508c3.json",
    "chars": 529,
    "preview": "{\n  \"name\": \"mmembed/weather/0599.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/96d4fbff-3d58-4cef-b6f0-393751f39a80.json",
    "chars": 534,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_4084.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/98ca7091-441b-471c-a3cc-7a7e94826534.json",
    "chars": 534,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_4079.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/991c80af-1b3f-454c-8716-c45ed7023269.json",
    "chars": 528,
    "preview": "{\n  \"name\": \"mmembed/weather/1831.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/9ab4a412-9175-410b-8281-65999c677106.json",
    "chars": 529,
    "preview": "{\n  \"name\": \"mmembed/weather/4084.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/9d4fbb56-2a44-4866-9489-03d9312fdd55.json",
    "chars": 534,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_1843.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/9edac21b-4d29-4a5a-a5cd-5aac086224df.json",
    "chars": 534,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_0013.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/a0eb55dd-239b-4908-8acd-a89c2bf639c2.json",
    "chars": 529,
    "preview": "{\n  \"name\": \"mmembed/weather/1842.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/a1539350-b2f4-4c95-a3d4-6b85d493f2b1.json",
    "chars": 534,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_105.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 1"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/a1daa863-1f24-4f91-964b-55e133f8c36d.json",
    "chars": 534,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_4086.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/a1f4669b-2187-4feb-92dd-1a321a0d3023.json",
    "chars": 535,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_1840.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/a3f79d63-f265-4971-997b-4e64a25f806f.json",
    "chars": 534,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_2214.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/a3fcb879-7be9-4a4f-8099-d237cf97418f.json",
    "chars": 529,
    "preview": "{\n  \"name\": \"mmembed/weather/113.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 1727834"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/a764ed81-66b1-4d49-9013-b75c1c6ba383.json",
    "chars": 529,
    "preview": "{\n  \"name\": \"mmembed/weather/0601.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/a7855fa7-b5be-4ac3-a4e5-d4893ad338f6.json",
    "chars": 534,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_0597.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/a8c3e42a-8ebd-490f-b1da-d9046b7aa4ed.json",
    "chars": 529,
    "preview": "{\n  \"name\": \"mmembed/weather/1837.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/a99818ab-a299-4e87-9662-265cbe8e1160.json",
    "chars": 535,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_0604.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/ab183f61-767e-4020-bae5-928ca15abd23.json",
    "chars": 534,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_113.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 1"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/ad7b8aa9-f8f7-43d5-96cf-b222b5e57318.json",
    "chars": 529,
    "preview": "{\n  \"name\": \"mmembed/weather/0009.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/ad8f7da2-4988-40ec-9042-85c3f4ca6404.json",
    "chars": 530,
    "preview": "{\n  \"name\": \"mmembed/weather/6096.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/ae4d2687-9c0e-49b2-9401-271fb42e62e1.json",
    "chars": 535,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_0011.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/b17a8866-876a-4d32-8b84-5e19b8bcc5f4.json",
    "chars": 529,
    "preview": "{\n  \"name\": \"mmembed/weather/0006.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/b1d4c0bb-0181-45cc-a1d7-7f2832b49b6d.json",
    "chars": 528,
    "preview": "{\n  \"name\": \"mmembed/weather/110.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 1727834"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/b2e7394a-32cb-45ca-abea-73d0b2df628f.json",
    "chars": 429,
    "preview": "{\n  \"name\": \"mmembed/weather/\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 1727834196911,"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/b499dd2d-cd18-488c-9927-c2f1f786a762.json",
    "chars": 535,
    "preview": "{\n  \"name\": \"mmembed/weather/thumb_3612.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": "
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/b7ab64f1-76c2-459d-b6a9-cc7d52e689d1.json",
    "chars": 528,
    "preview": "{\n  \"name\": \"mmembed/weather/2213.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/b8008ef2-2fb5-40ed-8fef-211863635165.json",
    "chars": 529,
    "preview": "{\n  \"name\": \"mmembed/weather/6100.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/b8f8d67b-85c4-4734-a413-7e1c5b1a7a9d.json",
    "chars": 529,
    "preview": "{\n  \"name\": \"mmembed/weather/0012.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/ba5f66c2-65e8-4ecc-829d-28dd2ddf625a.json",
    "chars": 528,
    "preview": "{\n  \"name\": \"mmembed/weather/4085.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/ba7eb319-928d-45ba-bce3-4edd8f3955bd.json",
    "chars": 529,
    "preview": "{\n  \"name\": \"mmembed/weather/4079.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 172783"
  },
  {
    "path": "multimodal-embeddings/emulator-export/storage_export/metadata/ba9ba128-b58e-47c1-97ee-4b2f52524cdf.json",
    "chars": 528,
    "preview": "{\n  \"name\": \"mmembed/weather/102.jpg\",\n  \"bucket\": \"mm-demo.appspot.com\",\n  \"metageneration\": 1,\n  \"generation\": 1727834"
  }
]

// ... and 418 more files (download for full content)

About this extraction

This page contains the full source code of the googlecreativelab/gemini-demos GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 618 files (467.5 KB), approximately 165.8k tokens, and a symbol index with 94 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!