@homepages/dev-media 0.0.0 → 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/LICENSE +10 -0
  2. package/README.md +38 -26
  3. package/assets/library/bluebird_logo_dark.png +0 -0
  4. package/assets/library/bluebird_logo_light.png +0 -0
  5. package/assets/library/elena_marsh.jpg +0 -0
  6. package/assets/library/james_donovan.png +0 -0
  7. package/assets/video/pearl_street_tour-poster.png +0 -0
  8. package/assets/video/pearl_street_tour.mp4 +0 -0
  9. package/assets/video/queensway_walkthrough-poster.png +0 -0
  10. package/manifest.json +40 -257
  11. package/package.json +1 -1
  12. package/selection.json +97 -44
  13. package/assets/library/bluebird_logo_dark.svg +0 -5
  14. package/assets/library/bluebird_logo_light.svg +0 -5
  15. package/assets/library/elena_marsh.png +0 -0
  16. package/assets/library/marco_bianchi.png +0 -0
  17. package/assets/library/marcus_webb.png +0 -0
  18. package/assets/library/ngozi_okafor.png +0 -0
  19. package/assets/library/okane_logo_dark.svg +0 -5
  20. package/assets/library/okane_logo_light.svg +0 -5
  21. package/assets/library/priya_chandran.png +0 -0
  22. package/assets/photo/pearl_street_09_balcony.png +0 -0
  23. package/assets/photo/pearl_street_10_rooftop_deck.png +0 -0
  24. package/assets/photo/queensway_02_gym_a.png +0 -0
  25. package/assets/photo/queensway_03_gym_b.png +0 -0
  26. package/assets/photo/queensway_11_living_e.png +0 -0
  27. package/assets/photo/queensway_12_living_f.png +0 -0
  28. package/assets/photo/queensway_16_common_bath.png +0 -0
  29. package/assets/photo/queensway_17_entrance.png +0 -0
  30. package/assets/photo/queensway_18_patio.png +0 -0
  31. package/assets/photo/queensway_20_exterior_hero.png +0 -0
  32. package/assets/photo/tuscan_road_01_exterior_front.png +0 -0
  33. package/assets/photo/tuscan_road_02_living.png +0 -0
  34. package/assets/photo/tuscan_road_03_kitchen.png +0 -0
  35. package/assets/photo/tuscan_road_04_bedroom.png +0 -0
  36. package/assets/photo/tuscan_road_05_backyard.png +0 -0
  37. package/assets/plan/tuscan_road_main_floor.png +0 -0
  38. package/assets/video/queensway_walkthrough.mp4 +0 -0
package/LICENSE CHANGED
@@ -20,6 +20,16 @@ This package ("@homepages/dev-media") ships two kinds of bytes under `assets/`:
20
20
  external input. These contain no third-party or model-generated content
21
21
  and are provided under the same terms as (1), without restriction.
22
22
 
23
+ 3. Contributed real-world media not owned by HomePages — a hand-provided
24
+ headshot, a third-party brand logo, or licensed stock video — included
25
+ under the specific clearance recorded for that asset in `selection.json`'s
26
+ `cleared`/`rights` fields (for example: a contributor's consent for their
27
+ own photo, a stock license permitting redistribution, or inclusion of a
28
+ public brand mark solely as illustrative placeholder art, not as an
29
+ endorsement by or affiliation with the depicted brand or person).
30
+ HomePages does not own these bytes, grants no trademark right in them, and
31
+ conveys only what the recorded clearance for that asset actually permits.
32
+
23
33
  THE ASSETS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
24
34
  IMPLIED. IN NO EVENT SHALL HOMEPAGES BE LIABLE FOR ANY CLAIM, DAMAGES, OR
25
35
  OTHER LIABILITY ARISING FROM THEIR USE.
package/README.md CHANGED
@@ -3,10 +3,9 @@
3
3
  The dev-only media pack template authoring resolves against: `manifest.json` indexing
4
4
  every asset the fixture corpus can select, plus the bytes in `assets/`.
5
5
 
6
- Allowlisted to publish, though it has not yet had its first `npm publish`. It
7
- is a package rather than a `@homepages/template-kit` subpath because the kit
8
- is a dependency of every workspace and CI install, and media bytes would tax
9
- all of them.
6
+ Published on npm and versions independently. It is a package rather than a
7
+ `@homepages/template-kit` subpath because the kit is a dependency of every
8
+ workspace and CI install, and media bytes would tax all of them.
10
9
 
11
10
  ## What is in here
12
11
 
@@ -15,6 +14,7 @@ all of them.
15
14
  | `manifest.json` | generated pack index — assets + named media sets |
16
15
  | `selection.json` | reviewed slot → source mapping, with per-asset provenance and rights |
17
16
  | `assets/` | the bytes, `assets/<kind>/<slug>.<ext>` |
17
+ | `sources/` | raw originals for hand-contributed real media (a headshot, a brand logo, a stock clip) that `selection.json` points a slot at via `local_file`; `npm run import` copies from here into `assets/` |
18
18
  | `vendor/` | byte-vendored copies of the derived contract; never hand-edit |
19
19
  | `scripts/` | the importer, generators, and the pack validator |
20
20
 
@@ -26,28 +26,38 @@ has no match, which is why `check` asserts the full tag vocabulary is covered.
26
26
 
27
27
  ## Two kinds of bytes
28
28
 
29
- Most slots hold **real property media** imported from the dev environment; the rest hold
30
- **generated placeholders** a labelled frame at the asset's true dimensions.
31
-
32
- `selection.json` decides which is which. It maps a brief slot to a source object in the
33
- dev uploads bucket and records that source's provenance and rights clearance. It is
34
- committed and reviewed by a human: querying the dev database at build time would let the
35
- pack's contents shift whenever that database changed, silently, with no version
36
- recording it. Reviewed once, the pack regenerates byte-identically from S3 forever.
37
-
38
- A slot with no entry falls back to its placeholder. That is a permanent state for some
39
- slots and a temporary one for others:
40
-
41
- - `sparseSingleFamily` keeps placeholders **by design** it exercises the corpus's
42
- missing-content branches, where a labelled frame is the honest representation.
43
- - The library logos and headshots depict fictional brands and fictional people, so no
44
- source could supply them.
45
- - A handful of photo slots (gym, patio, balcony) have no matching content in the dev
46
- environment yet and fill automatically once it exists.
47
-
48
- Imported bytes are the platform's existing 2048px `image_web_variant` derivatives,
29
+ A slot holds **real media** — property photos/plans imported from the dev
30
+ environment, or a headshot/logo/video contributed from some other rights-cleared
31
+ source — once `selection.json` maps it to one; until then it falls back to a
32
+ **generated placeholder**, a labelled frame at the asset's true dimensions.
33
+ `npm run check` reports the live real-vs-placeholder split (currently every
34
+ asset in the pack resolves to real media see below).
35
+
36
+ `selection.json` decides which is which. Each row maps a brief slot to a source: either
37
+ `s3_key` (an object in the dev uploads bucket) or `local_file` (a path under `sources/`
38
+ already committed to the repo), and records that source's provenance and rights
39
+ clearance either way. It is committed and reviewed by a human: querying the dev
40
+ database at build time would let the pack's contents shift whenever that database
41
+ changed, silently, with no version recording it. Reviewed once, the pack regenerates
42
+ byte-identically forever from S3 for `s3_key` rows, from disk for `local_file` ones.
43
+
44
+ A slot with no entry falls back to its placeholder. The required inventory only
45
+ carries an id if some real source could eventually back it an id no tagger
46
+ vocabulary or unused source could ever fill (a `room` value the tagger has no
47
+ equivalent for, or a wholly synthetic address with no property to photograph) is
48
+ dropped from the inventory rather than kept as a permanent placeholder.
49
+
50
+ - The library logos and headshots name fictional brands and fictional people (that
51
+ identity metadata comes from the derived inventory, not from a source); each now
52
+ resolves to a real, rights-cleared photo/logo via a `local_file` row. A newly-added
53
+ fictional identity with no sourced media yet would still fall back to a placeholder
54
+ until someone sources it — this fallback is what stays permanently available, not a
55
+ fixed count of pending identities.
56
+
57
+ `s3_key` bytes are the platform's existing 2048px `image_web_variant` derivatives,
49
58
  copied verbatim. No re-encoding: the derivatives already match the brief's width, and an
50
- encoder here would drift against the platform's own ladder.
59
+ encoder here would drift against the platform's own ladder. `local_file` bytes are
60
+ copied verbatim from `sources/` the same way.
51
61
 
52
62
  **Rights are enforced, not just recorded.** The importer refuses to fetch any selection
53
63
  whose provenance is not listed in the file's `cleared` block, so adding a source without
@@ -61,7 +71,9 @@ silently resolved nothing would still come out green.
61
71
 
62
72
  ```
63
73
  npm run check # validate: schema, inventory coverage, files resolve, true dimensions
64
- npm run import # fetch the selected sources from S3 (needs dev AWS credentials)
74
+ npm run import # materialize selected sources: fetch s3_key rows from S3 (needs dev
75
+ # AWS credentials), copy local_file rows from sources/, extract real
76
+ # video posters via ffmpeg-in-Docker
65
77
  npm run generate # regenerate placeholders + manifest, prune superseded files
66
78
  npm run generate:videos # also re-encode the two MP4s — needs Docker (no ffmpeg on the dev host)
67
79
  ```
Binary file
Binary file
Binary file
package/manifest.json CHANGED
@@ -2,8 +2,8 @@
2
2
  "version": 1,
3
3
  "license": {
4
4
  "spdx": "LicenseRef-HomePages-DevMedia",
5
- "source": "Property media imported from the HomePages dev environment (see selection.json for per-asset provenance and rights clearance), plus generated placeholders for slots with no cleared source (scripts/generate-placeholders.mjs).",
6
- "notes": "Imported bytes are the platform's own 2048px web derivatives, copied verbatim and cleared per source address for redistribution. Placeholders are synthetic frames carrying no third-party content. Ids, tags, and sets are fixed by the derived contract and do not vary with which slots resolved to real media."
5
+ "source": "Property media imported from the HomePages dev environment, or contributed real photos/logos/video from other rights-cleared sources (see selection.json for per-asset provenance and rights clearance), plus generated placeholders for slots with no cleared source (scripts/generate-placeholders.mjs).",
6
+ "notes": "Dev-environment bytes are the platform's own 2048px web derivatives, copied verbatim and cleared per source address for redistribution. Contributed bytes (headshots, brand logos, stock video) are copied verbatim from a reviewed local source and cleared per selection.json's provenance record. Placeholders are synthetic frames carrying no third-party content. Ids, tags, and sets are fixed by the derived contract and do not vary with which slots resolved to real media."
7
7
  },
8
8
  "assets": [
9
9
  {
@@ -110,32 +110,6 @@
110
110
  "width": 2048,
111
111
  "height": 1529
112
112
  },
113
- {
114
- "id": "dev_upl_pearl_street_09_balcony",
115
- "kind": "photo",
116
- "name": "09-balcony.jpg",
117
- "caption": "Private balcony overlooking a landscaped courtyard.",
118
- "tags": {
119
- "room": "balcony",
120
- "category": "exterior"
121
- },
122
- "file": "assets/photo/pearl_street_09_balcony.png",
123
- "width": 2048,
124
- "height": 1453
125
- },
126
- {
127
- "id": "dev_upl_pearl_street_10_rooftop_deck",
128
- "kind": "photo",
129
- "name": "10-rooftop-deck.jpg",
130
- "caption": "Shared rooftop deck with skyline views.",
131
- "tags": {
132
- "room": "rooftop",
133
- "category": "exterior"
134
- },
135
- "file": "assets/photo/pearl_street_10_rooftop_deck.png",
136
- "width": 2048,
137
- "height": 1453
138
- },
139
113
  {
140
114
  "id": "dev_upl_queensway_01_lobby",
141
115
  "kind": "photo",
@@ -149,32 +123,6 @@
149
123
  "width": 2048,
150
124
  "height": 1536
151
125
  },
152
- {
153
- "id": "dev_upl_queensway_02_gym_a",
154
- "kind": "photo",
155
- "name": "02-gym-a.jpg",
156
- "caption": "Gym with cardio equipment and floor-to-ceiling mirrors.",
157
- "tags": {
158
- "room": "gym",
159
- "category": "interior"
160
- },
161
- "file": "assets/photo/queensway_02_gym_a.png",
162
- "width": 2048,
163
- "height": 1365
164
- },
165
- {
166
- "id": "dev_upl_queensway_03_gym_b",
167
- "kind": "photo",
168
- "name": "03-gym-b.jpg",
169
- "caption": "Gym free-weights area.",
170
- "tags": {
171
- "room": "gym",
172
- "category": "interior"
173
- },
174
- "file": "assets/photo/queensway_03_gym_b.png",
175
- "width": 2048,
176
- "height": 1365
177
- },
178
126
  {
179
127
  "id": "dev_upl_queensway_04_living_a",
180
128
  "kind": "photo",
@@ -266,32 +214,6 @@
266
214
  "width": 2048,
267
215
  "height": 1536
268
216
  },
269
- {
270
- "id": "dev_upl_queensway_11_living_e",
271
- "kind": "photo",
272
- "name": "11-living-e.jpg",
273
- "caption": "Sunken living area with built-in shelving.",
274
- "tags": {
275
- "room": "living",
276
- "category": "interior"
277
- },
278
- "file": "assets/photo/queensway_11_living_e.png",
279
- "width": 2048,
280
- "height": 1365
281
- },
282
- {
283
- "id": "dev_upl_queensway_12_living_f",
284
- "kind": "photo",
285
- "name": "12-living-f.jpg",
286
- "caption": "Living area corner with reading chair.",
287
- "tags": {
288
- "room": "living",
289
- "category": "interior"
290
- },
291
- "file": "assets/photo/queensway_12_living_f.png",
292
- "width": 2048,
293
- "height": 1365
294
- },
295
217
  {
296
218
  "id": "dev_upl_queensway_13_master_bedroom",
297
219
  "kind": "photo",
@@ -331,136 +253,19 @@
331
253
  "width": 2048,
332
254
  "height": 1536
333
255
  },
334
- {
335
- "id": "dev_upl_queensway_16_common_bath",
336
- "kind": "photo",
337
- "name": "16-common-bath.jpg",
338
- "caption": "Common bath with marble subway tile.",
339
- "tags": {
340
- "room": "bath",
341
- "category": "interior"
342
- },
343
- "file": "assets/photo/queensway_16_common_bath.png",
344
- "width": 2048,
345
- "height": 1365
346
- },
347
- {
348
- "id": "dev_upl_queensway_17_entrance",
349
- "kind": "photo",
350
- "name": "17-entrance.jpg",
351
- "caption": "Entrance foyer with original mosaic floor.",
352
- "tags": {
353
- "room": "entry",
354
- "category": "interior"
355
- },
356
- "file": "assets/photo/queensway_17_entrance.png",
357
- "width": 2048,
358
- "height": 1365
359
- },
360
- {
361
- "id": "dev_upl_queensway_18_patio",
362
- "kind": "photo",
363
- "name": "18-patio.jpg",
364
- "caption": "Patio with built-in seating and planters.",
365
- "tags": {
366
- "room": "patio",
367
- "category": "exterior"
368
- },
369
- "file": "assets/photo/queensway_18_patio.png",
370
- "width": 2048,
371
- "height": 1365
372
- },
373
256
  {
374
257
  "id": "dev_upl_queensway_19_outdoor_deck",
375
258
  "kind": "photo",
376
259
  "name": "19-outdoor-deck.jpg",
377
- "caption": "Outdoor deck with sunset view.",
260
+ "caption": "Rooftop deck at golden hour — the building's primary exterior shot.",
378
261
  "tags": {
379
- "room": "deck",
262
+ "room": "exterior-front",
380
263
  "category": "exterior"
381
264
  },
382
265
  "file": "assets/photo/queensway_19_outdoor_deck.jpg",
383
266
  "width": 2048,
384
267
  "height": 1536
385
268
  },
386
- {
387
- "id": "dev_upl_queensway_20_exterior_hero",
388
- "kind": "photo",
389
- "name": "20-exterior-hero.jpg",
390
- "caption": "Mansard victorian facade at golden hour.",
391
- "tags": {
392
- "room": "exterior-front",
393
- "category": "exterior"
394
- },
395
- "file": "assets/photo/queensway_20_exterior_hero.png",
396
- "width": 2048,
397
- "height": 1453
398
- },
399
- {
400
- "id": "dev_upl_tuscan_road_01_exterior_front",
401
- "kind": "photo",
402
- "name": "01-exterior-front.jpg",
403
- "caption": "Center-hall colonial facade with a covered front porch.",
404
- "tags": {
405
- "room": "exterior-front",
406
- "category": "exterior"
407
- },
408
- "file": "assets/photo/tuscan_road_01_exterior_front.png",
409
- "width": 2048,
410
- "height": 1365
411
- },
412
- {
413
- "id": "dev_upl_tuscan_road_02_living",
414
- "kind": "photo",
415
- "name": "02-living.jpg",
416
- "caption": "Living room with a bay window and original hardwood floors.",
417
- "tags": {
418
- "room": "living",
419
- "category": "interior"
420
- },
421
- "file": "assets/photo/tuscan_road_02_living.png",
422
- "width": 2048,
423
- "height": 1365
424
- },
425
- {
426
- "id": "dev_upl_tuscan_road_03_kitchen",
427
- "kind": "photo",
428
- "name": "03-kitchen.jpg",
429
- "caption": "Updated kitchen with white shaker cabinets and butcher-block counters.",
430
- "tags": {
431
- "room": "kitchen",
432
- "category": "interior"
433
- },
434
- "file": "assets/photo/tuscan_road_03_kitchen.png",
435
- "width": 2048,
436
- "height": 1365
437
- },
438
- {
439
- "id": "dev_upl_tuscan_road_04_bedroom",
440
- "kind": "photo",
441
- "name": "04-bedroom.jpg",
442
- "caption": "Primary bedroom with double-hung windows and a ceiling fan.",
443
- "tags": {
444
- "room": "bedroom",
445
- "category": "interior"
446
- },
447
- "file": "assets/photo/tuscan_road_04_bedroom.png",
448
- "width": 2048,
449
- "height": 1365
450
- },
451
- {
452
- "id": "dev_upl_tuscan_road_05_backyard",
453
- "kind": "photo",
454
- "name": "05-backyard.jpg",
455
- "caption": "Fenced backyard with a paver patio and mature shade trees.",
456
- "tags": {
457
- "room": "backyard",
458
- "category": "exterior"
459
- },
460
- "file": "assets/photo/tuscan_road_05_backyard.png",
461
- "width": 2048,
462
- "height": 1365
463
- },
464
269
  {
465
270
  "id": "dev_efp_pearl_street_unit04_main",
466
271
  "kind": "plan",
@@ -691,16 +496,6 @@
691
496
  "width": 424,
692
497
  "height": 479
693
498
  },
694
- {
695
- "id": "dev_efp_tuscan_road_main_floor",
696
- "kind": "plan",
697
- "name": "main-floor.png",
698
- "caption": "Full-house floor plan — first and second floor.",
699
- "tags": {},
700
- "file": "assets/plan/tuscan_road_main_floor.png",
701
- "width": 1024,
702
- "height": 1024
703
- },
704
499
  {
705
500
  "id": "dev_lib_bluebird_logo_dark",
706
501
  "kind": "library",
@@ -710,7 +505,9 @@
710
505
  "role": "logo",
711
506
  "variant": "dark"
712
507
  },
713
- "file": "assets/library/bluebird_logo_dark.svg"
508
+ "file": "assets/library/bluebird_logo_dark.png",
509
+ "width": 472,
510
+ "height": 75
714
511
  },
715
512
  {
716
513
  "id": "dev_lib_bluebird_logo_light",
@@ -721,7 +518,9 @@
721
518
  "role": "logo",
722
519
  "variant": "light"
723
520
  },
724
- "file": "assets/library/bluebird_logo_light.svg"
521
+ "file": "assets/library/bluebird_logo_light.png",
522
+ "width": 472,
523
+ "height": 75
725
524
  },
726
525
  {
727
526
  "id": "dev_lib_elena_marsh",
@@ -731,9 +530,9 @@
731
530
  "tags": {
732
531
  "role": "headshot"
733
532
  },
734
- "file": "assets/library/elena_marsh.png",
735
- "width": 640,
736
- "height": 854
533
+ "file": "assets/library/elena_marsh.jpg",
534
+ "width": 360,
535
+ "height": 360
737
536
  },
738
537
  {
739
538
  "id": "dev_lib_james_donovan",
@@ -744,8 +543,8 @@
744
543
  "role": "headshot"
745
544
  },
746
545
  "file": "assets/library/james_donovan.png",
747
- "width": 640,
748
- "height": 854
546
+ "width": 150,
547
+ "height": 150
749
548
  },
750
549
  {
751
550
  "id": "dev_lib_marco_bianchi",
@@ -755,9 +554,9 @@
755
554
  "tags": {
756
555
  "role": "headshot"
757
556
  },
758
- "file": "assets/library/marco_bianchi.png",
759
- "width": 640,
760
- "height": 854
557
+ "file": "assets/library/elena_marsh.jpg",
558
+ "width": 360,
559
+ "height": 360
761
560
  },
762
561
  {
763
562
  "id": "dev_lib_marcus_webb",
@@ -767,9 +566,9 @@
767
566
  "tags": {
768
567
  "role": "headshot"
769
568
  },
770
- "file": "assets/library/marcus_webb.png",
771
- "width": 640,
772
- "height": 854
569
+ "file": "assets/library/james_donovan.png",
570
+ "width": 150,
571
+ "height": 150
773
572
  },
774
573
  {
775
574
  "id": "dev_lib_ngozi_okafor",
@@ -779,9 +578,9 @@
779
578
  "tags": {
780
579
  "role": "headshot"
781
580
  },
782
- "file": "assets/library/ngozi_okafor.png",
783
- "width": 640,
784
- "height": 854
581
+ "file": "assets/library/elena_marsh.jpg",
582
+ "width": 360,
583
+ "height": 360
785
584
  },
786
585
  {
787
586
  "id": "dev_lib_okane_logo_dark",
@@ -792,7 +591,9 @@
792
591
  "role": "logo",
793
592
  "variant": "dark"
794
593
  },
795
- "file": "assets/library/okane_logo_dark.svg"
594
+ "file": "assets/library/bluebird_logo_dark.png",
595
+ "width": 472,
596
+ "height": 75
796
597
  },
797
598
  {
798
599
  "id": "dev_lib_okane_logo_light",
@@ -803,7 +604,9 @@
803
604
  "role": "logo",
804
605
  "variant": "light"
805
606
  },
806
- "file": "assets/library/okane_logo_light.svg"
607
+ "file": "assets/library/bluebird_logo_light.png",
608
+ "width": 472,
609
+ "height": 75
807
610
  },
808
611
  {
809
612
  "id": "dev_lib_priya_chandran",
@@ -813,9 +616,9 @@
813
616
  "tags": {
814
617
  "role": "headshot"
815
618
  },
816
- "file": "assets/library/priya_chandran.png",
817
- "width": 640,
818
- "height": 854
619
+ "file": "assets/library/james_donovan.png",
620
+ "width": 150,
621
+ "height": 150
819
622
  },
820
623
  {
821
624
  "id": "dev_vid_pearl_street_tour",
@@ -824,8 +627,8 @@
824
627
  "caption": "Walkthrough tour of the Pearl Street brick townhome",
825
628
  "tags": {},
826
629
  "file": "assets/video/pearl_street_tour.mp4",
827
- "width": 2048,
828
- "height": 1200,
630
+ "width": 1920,
631
+ "height": 1080,
829
632
  "poster": "assets/video/pearl_street_tour-poster.png"
830
633
  },
831
634
  {
@@ -834,9 +637,9 @@
834
637
  "name": "walkthrough.mp4",
835
638
  "caption": "Walkthrough tour of the Jamaica Plain mansard Victorian",
836
639
  "tags": {},
837
- "file": "assets/video/queensway_walkthrough.mp4",
838
- "width": 2048,
839
- "height": 1200,
640
+ "file": "assets/video/pearl_street_tour.mp4",
641
+ "width": 1920,
642
+ "height": 1080,
840
643
  "poster": "assets/video/queensway_walkthrough-poster.png"
841
644
  }
842
645
  ],
@@ -850,9 +653,7 @@
850
653
  "dev_upl_pearl_street_05_primary_bedroom",
851
654
  "dev_upl_pearl_street_06_second_bedroom",
852
655
  "dev_upl_pearl_street_07_primary_bath",
853
- "dev_upl_pearl_street_08_powder_room",
854
- "dev_upl_pearl_street_09_balcony",
855
- "dev_upl_pearl_street_10_rooftop_deck"
656
+ "dev_upl_pearl_street_08_powder_room"
856
657
  ],
857
658
  "plan": [
858
659
  "dev_efp_pearl_street_unit04_main",
@@ -869,8 +670,6 @@
869
670
  "luxuryMultiUnit": {
870
671
  "photo": [
871
672
  "dev_upl_queensway_01_lobby",
872
- "dev_upl_queensway_02_gym_a",
873
- "dev_upl_queensway_03_gym_b",
874
673
  "dev_upl_queensway_04_living_a",
875
674
  "dev_upl_queensway_05_living_b",
876
675
  "dev_upl_queensway_06_kitchen_a",
@@ -878,16 +677,10 @@
878
677
  "dev_upl_queensway_08_dining",
879
678
  "dev_upl_queensway_09_living_c",
880
679
  "dev_upl_queensway_10_living_d",
881
- "dev_upl_queensway_11_living_e",
882
- "dev_upl_queensway_12_living_f",
883
680
  "dev_upl_queensway_13_master_bedroom",
884
681
  "dev_upl_queensway_14_master_bath_a",
885
682
  "dev_upl_queensway_15_master_bath_b",
886
- "dev_upl_queensway_16_common_bath",
887
- "dev_upl_queensway_17_entrance",
888
- "dev_upl_queensway_18_patio",
889
- "dev_upl_queensway_19_outdoor_deck",
890
- "dev_upl_queensway_20_exterior_hero"
683
+ "dev_upl_queensway_19_outdoor_deck"
891
684
  ],
892
685
  "plan": [
893
686
  "dev_efp_queensway_2br_11_l1",
@@ -922,16 +715,6 @@
922
715
  ]
923
716
  },
924
717
  "sparseSingleFamily": {
925
- "photo": [
926
- "dev_upl_tuscan_road_01_exterior_front",
927
- "dev_upl_tuscan_road_02_living",
928
- "dev_upl_tuscan_road_03_kitchen",
929
- "dev_upl_tuscan_road_04_bedroom",
930
- "dev_upl_tuscan_road_05_backyard"
931
- ],
932
- "plan": [
933
- "dev_efp_tuscan_road_main_floor"
934
- ],
935
718
  "library": [
936
719
  "dev_lib_priya_chandran"
937
720
  ]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@homepages/dev-media",
3
- "version": "0.0.0",
3
+ "version": "0.0.1",
4
4
  "description": "Dev-only media pack for template authoring: the asset bytes the fixture corpus resolves against, plus the manifest that indexes them.",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "publishConfig": {
package/selection.json CHANGED
@@ -4,7 +4,11 @@
4
4
  "cleared": {
5
5
  "pearl-street": "cleared for public redistribution",
6
6
  "queensway": "cleared for public redistribution",
7
- "queensway-annex": "cleared for public redistribution"
7
+ "queensway-annex": "cleared for public redistribution",
8
+ "contributor-headshot": "personal photo contributed by a project maintainer, cleared for use as dev fixture media",
9
+ "stock-photo-library": "Unsplash License \u2014 free to use for commercial and non-commercial purposes without permission",
10
+ "compass-public-logo": "publicly available brand wordmark, used as illustrative placeholder logo art for a dev-only fixture pack \u2014 not an endorsement by or affiliation with Compass",
11
+ "stock-video-library": "licensed stock footage, cleared by the rights holder for redistribution in this pack"
8
12
  },
9
13
  "selections": [
10
14
  {
@@ -622,73 +626,122 @@
622
626
  "position": 1,
623
627
  "reused": true
624
628
  }
625
- }
626
- ],
627
- "skipped": [
628
- {
629
- "dev_id": "dev_upl_pearl_street_09_balcony",
630
- "reason": "room=balcony has no equivalent in the tagger vocabulary"
631
629
  },
632
630
  {
633
- "dev_id": "dev_upl_pearl_street_10_rooftop_deck",
634
- "reason": "room=rooftop has no equivalent in the tagger vocabulary"
635
- },
636
- {
637
- "dev_id": "dev_upl_queensway_02_gym_a",
638
- "reason": "room=gym has no equivalent in the tagger vocabulary"
639
- },
640
- {
641
- "dev_id": "dev_upl_queensway_03_gym_b",
642
- "reason": "room=gym has no equivalent in the tagger vocabulary"
643
- },
644
- {
645
- "dev_id": "dev_upl_queensway_11_living_e",
646
- "reason": "no unused source tagged room=living"
631
+ "dev_id": "dev_lib_bluebird_logo_dark",
632
+ "local_file": "sources/library/compass_wordmark.png",
633
+ "width": 472,
634
+ "height": 75,
635
+ "source_name": "compass_wordmark.png",
636
+ "provenance": "compass-public-logo",
637
+ "rights": "publicly available brand wordmark, used as illustrative placeholder logo art for a dev-only fixture pack \u2014 not an endorsement by or affiliation with Compass",
638
+ "sha256": "01bc4e40b17652d6ae221139a53bc3599eb24b197c7f787084309ee290b90872"
647
639
  },
648
640
  {
649
- "dev_id": "dev_upl_queensway_12_living_f",
650
- "reason": "no unused source tagged room=living"
641
+ "dev_id": "dev_lib_bluebird_logo_light",
642
+ "local_file": "sources/library/compass_wordmark_dark.png",
643
+ "width": 472,
644
+ "height": 75,
645
+ "source_name": "compass_wordmark_dark.png",
646
+ "provenance": "compass-public-logo",
647
+ "rights": "publicly available brand wordmark, used as illustrative placeholder logo art for a dev-only fixture pack \u2014 not an endorsement by or affiliation with Compass",
648
+ "sha256": "acb7287a9aa1eb378609e6a9c8c0e55b186669ae8e8a881c515c55332cf2faf8"
651
649
  },
652
650
  {
653
- "dev_id": "dev_upl_queensway_16_common_bath",
654
- "reason": "no unused source tagged room=bath"
651
+ "dev_id": "dev_lib_elena_marsh",
652
+ "local_file": "sources/library/headshot.jpg",
653
+ "width": 360,
654
+ "height": 360,
655
+ "source_name": "headshot.jpg",
656
+ "provenance": "contributor-headshot",
657
+ "rights": "personal photo contributed by a project maintainer, cleared for use as dev fixture media",
658
+ "sha256": "c0e230b8532c648f2c0bb51e821ca981fac218cb5ee8f78358782753af21b1d6"
655
659
  },
656
660
  {
657
- "dev_id": "dev_upl_queensway_17_entrance",
658
- "reason": "no unused source tagged room=entry"
661
+ "dev_id": "dev_lib_james_donovan",
662
+ "local_file": "sources/library/unsplash_7YVZYZeITc8.png",
663
+ "width": 150,
664
+ "height": 150,
665
+ "source_name": "unsplash_7YVZYZeITc8.png",
666
+ "provenance": "stock-photo-library",
667
+ "rights": "Unsplash License \u2014 free to use for commercial and non-commercial purposes without permission",
668
+ "sha256": "b85f10a4c182d510d98a9bc30559e942b7304809e964b167c6dea081d4ad633b"
659
669
  },
660
670
  {
661
- "dev_id": "dev_upl_queensway_18_patio",
662
- "reason": "room=patio has no equivalent in the tagger vocabulary"
671
+ "dev_id": "dev_lib_marco_bianchi",
672
+ "local_file": "sources/library/headshot.jpg",
673
+ "width": 360,
674
+ "height": 360,
675
+ "source_name": "headshot.jpg",
676
+ "provenance": "contributor-headshot",
677
+ "rights": "personal photo contributed by a project maintainer, cleared for use as dev fixture media"
663
678
  },
664
679
  {
665
- "dev_id": "dev_upl_queensway_20_exterior_hero",
666
- "reason": "no unused source tagged room=exterior-front"
680
+ "dev_id": "dev_lib_marcus_webb",
681
+ "local_file": "sources/library/unsplash_7YVZYZeITc8.png",
682
+ "width": 150,
683
+ "height": 150,
684
+ "source_name": "unsplash_7YVZYZeITc8.png",
685
+ "provenance": "stock-photo-library",
686
+ "rights": "Unsplash License \u2014 free to use for commercial and non-commercial purposes without permission"
667
687
  },
668
688
  {
669
- "dev_id": "dev_upl_tuscan_road_01_exterior_front",
670
- "reason": "no source property for scenario sparseSingleFamily"
689
+ "dev_id": "dev_lib_ngozi_okafor",
690
+ "local_file": "sources/library/headshot.jpg",
691
+ "width": 360,
692
+ "height": 360,
693
+ "source_name": "headshot.jpg",
694
+ "provenance": "contributor-headshot",
695
+ "rights": "personal photo contributed by a project maintainer, cleared for use as dev fixture media"
671
696
  },
672
697
  {
673
- "dev_id": "dev_upl_tuscan_road_02_living",
674
- "reason": "no source property for scenario sparseSingleFamily"
698
+ "dev_id": "dev_lib_okane_logo_dark",
699
+ "local_file": "sources/library/compass_wordmark.png",
700
+ "width": 472,
701
+ "height": 75,
702
+ "source_name": "compass_wordmark.png",
703
+ "provenance": "compass-public-logo",
704
+ "rights": "publicly available brand wordmark, used as illustrative placeholder logo art for a dev-only fixture pack \u2014 not an endorsement by or affiliation with Compass"
675
705
  },
676
706
  {
677
- "dev_id": "dev_upl_tuscan_road_03_kitchen",
678
- "reason": "no source property for scenario sparseSingleFamily"
707
+ "dev_id": "dev_lib_okane_logo_light",
708
+ "local_file": "sources/library/compass_wordmark_dark.png",
709
+ "width": 472,
710
+ "height": 75,
711
+ "source_name": "compass_wordmark_dark.png",
712
+ "provenance": "compass-public-logo",
713
+ "rights": "publicly available brand wordmark, used as illustrative placeholder logo art for a dev-only fixture pack \u2014 not an endorsement by or affiliation with Compass"
679
714
  },
680
715
  {
681
- "dev_id": "dev_upl_tuscan_road_04_bedroom",
682
- "reason": "no source property for scenario sparseSingleFamily"
716
+ "dev_id": "dev_lib_priya_chandran",
717
+ "local_file": "sources/library/unsplash_7YVZYZeITc8.png",
718
+ "width": 150,
719
+ "height": 150,
720
+ "source_name": "unsplash_7YVZYZeITc8.png",
721
+ "provenance": "stock-photo-library",
722
+ "rights": "Unsplash License \u2014 free to use for commercial and non-commercial purposes without permission"
683
723
  },
684
724
  {
685
- "dev_id": "dev_upl_tuscan_road_05_backyard",
686
- "reason": "no source property for scenario sparseSingleFamily"
725
+ "dev_id": "dev_vid_pearl_street_tour",
726
+ "local_file": "sources/video/property_walkthrough.mp4",
727
+ "width": 1920,
728
+ "height": 1080,
729
+ "source_name": "property_walkthrough.mp4",
730
+ "provenance": "stock-video-library",
731
+ "rights": "licensed stock footage, cleared by the rights holder for redistribution in this pack",
732
+ "sha256": "e415dd70c89355d47c01795092b6ec7560750257a83b9e81df079439fbada616"
687
733
  },
688
734
  {
689
- "dev_id": "dev_efp_tuscan_road_main_floor",
690
- "reason": "no source property for scenario sparseSingleFamily"
691
- },
735
+ "dev_id": "dev_vid_queensway_walkthrough",
736
+ "local_file": "sources/video/property_walkthrough.mp4",
737
+ "width": 1920,
738
+ "height": 1080,
739
+ "source_name": "property_walkthrough.mp4",
740
+ "provenance": "stock-video-library",
741
+ "rights": "licensed stock footage, cleared by the rights holder for redistribution in this pack"
742
+ }
743
+ ],
744
+ "skipped": [
692
745
  {
693
746
  "dev_id": "dev_lib_bluebird_logo_dark",
694
747
  "reason": "no source: logos are fictional brands and headshots are fictional people"
@@ -1,5 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 480 120" role="img" aria-label="Bluebird Realty Group">
2
- <rect width="480" height="120" fill="#22262c"/>
3
- <circle cx="60" cy="60" r="28" fill="none" stroke="#f4f6f8" stroke-width="6"/>
4
- <text x="108" y="70" font-family="Helvetica, Arial, sans-serif" font-size="26" fill="#f4f6f8">Bluebird Realty Group</text>
5
- </svg>
@@ -1,5 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 480 120" role="img" aria-label="Bluebird Realty Group">
2
- <rect width="480" height="120" fill="#f4f6f8"/>
3
- <circle cx="60" cy="60" r="28" fill="none" stroke="#22262c" stroke-width="6"/>
4
- <text x="108" y="70" font-family="Helvetica, Arial, sans-serif" font-size="26" fill="#22262c">Bluebird Realty Group</text>
5
- </svg>
Binary file
Binary file
Binary file
Binary file
@@ -1,5 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 480 120" role="img" aria-label="Okane Marketing">
2
- <rect width="480" height="120" fill="#22262c"/>
3
- <circle cx="60" cy="60" r="28" fill="none" stroke="#f4f6f8" stroke-width="6"/>
4
- <text x="108" y="70" font-family="Helvetica, Arial, sans-serif" font-size="26" fill="#f4f6f8">Okane Marketing</text>
5
- </svg>
@@ -1,5 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 480 120" role="img" aria-label="Okane Marketing">
2
- <rect width="480" height="120" fill="#f4f6f8"/>
3
- <circle cx="60" cy="60" r="28" fill="none" stroke="#22262c" stroke-width="6"/>
4
- <text x="108" y="70" font-family="Helvetica, Arial, sans-serif" font-size="26" fill="#22262c">Okane Marketing</text>
5
- </svg>
Binary file
Binary file
Binary file
Binary file