bookcover-core 0.18.0 → 0.19.0
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.
- package/dist/defaults.js +1 -0
- package/dist/form_state.d.ts +21 -13
- package/dist/generated/builtin_bg_regions.d.ts +12 -8
- package/dist/generated/builtin_bg_regions.js +64 -63
- package/dist/image_regions.d.ts +16 -6
- package/dist/image_regions.js +18 -8
- package/dist/index.d.ts +3 -2
- package/dist/index.js +2 -2
- package/package.json +1 -1
package/dist/defaults.js
CHANGED
package/dist/form_state.d.ts
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import type { CjkVariant } from 'typst-fonts';
|
|
2
2
|
import type { PmDoc } from 'pm-to-typst';
|
|
3
|
-
/** JSON-safe form values — every form field except the bg_image binary
|
|
3
|
+
/** JSON-safe form values — every form field except the background image (bg_image's binary, or
|
|
4
|
+
* the bg_image_builtin reference that stands in for one). This is the shape
|
|
4
5
|
* hosts store and round-trip (e.g. via the widget's embed protocol).
|
|
5
6
|
*
|
|
6
7
|
* Two invariants hosts can rely on, and must preserve:
|
|
7
8
|
* - NO BINARIES. The background image and custom font bytes are never in this record; they
|
|
8
|
-
* are referenced out-of-band by the host, which owns their storage and identity.
|
|
9
|
-
*
|
|
10
|
-
*
|
|
9
|
+
* are referenced out-of-band by the host, which owns their storage and identity. A built-in
|
|
10
|
+
* background travels as its ID in the protocol's bg_image_builtin field, never as a field in
|
|
11
|
+
* here (see generator-web's embed_types.ts).
|
|
11
12
|
* - ABSENCE MEANS NOTHING. Every field is always present and explicitly valued. Where a value
|
|
12
13
|
* is meant to be derived at render time, it says so with an explicit sentinel ('auto'/null),
|
|
13
14
|
* never by omitting the key — so a record's meaning can't shift when a default changes. */
|
|
@@ -109,23 +110,30 @@ export interface EmbedFormState {
|
|
|
109
110
|
isbn: string;
|
|
110
111
|
cjk_variant: CjkVariant | 'auto';
|
|
111
112
|
}
|
|
112
|
-
/** Live form values — adds the background image
|
|
113
|
-
*
|
|
113
|
+
/** Live form values — adds the background image, which is held only in the browser and never
|
|
114
|
+
* serialized with the rest of the form. At most one of bg_image and bg_image_builtin is set:
|
|
115
|
+
* a built-in background is held by ID alone, an upload by its bytes */
|
|
114
116
|
export interface FormState extends EmbedFormState {
|
|
115
|
-
/**
|
|
117
|
+
/** An uploaded background image (a user upload or a host-supplied one), held byte-for-byte.
|
|
118
|
+
* Always null for a built-in background — see bg_image_builtin.
|
|
116
119
|
*
|
|
117
|
-
* BYTES ROUND-TRIP UNMODIFIED. A File put in this slot — whether the user uploaded it
|
|
118
|
-
* host handed it over the embed protocol
|
|
119
|
-
*
|
|
120
|
-
*
|
|
121
|
-
*
|
|
122
|
-
* round trip through the editor.
|
|
120
|
+
* BYTES ROUND-TRIP UNMODIFIED. A File put in this slot — whether the user uploaded it or a
|
|
121
|
+
* host handed it over the embed protocol — is the exact File handed back out again: never
|
|
122
|
+
* re-encoded, resized, recompressed or stripped of metadata. So any host may use the bytes
|
|
123
|
+
* themselves as the image's identity (hashing them to recognise an image it already
|
|
124
|
+
* stores), and that identity survives a round trip through the editor.
|
|
123
125
|
*
|
|
124
126
|
* Everything the editor derives FROM the pixels — crop/coverage choices, sampled colors,
|
|
125
127
|
* region analysis — lives in the form values or is recomputed at render time, never by
|
|
126
128
|
* rewriting this file. Downscaling for preview rendering is fine, but the result is a
|
|
127
129
|
* separate Blob that must not be written back here. */
|
|
128
130
|
bg_image: File | null;
|
|
131
|
+
/** Filename of the built-in background in use (e.g. 'beach.jpg') — its ID, and the whole of
|
|
132
|
+
* its identity: no bytes are held for it. Renderers fetch whichever copy they need by this
|
|
133
|
+
* name (the preview-sized one in BG_PREVIEW_DIR, or the original under backgrounds/), and
|
|
134
|
+
* its colors come from the baked table by the same name (get_builtin_bg_regions). Null
|
|
135
|
+
* for an upload or no image. */
|
|
136
|
+
bg_image_builtin: string | null;
|
|
129
137
|
}
|
|
130
138
|
/** Plain object with blank/empty values — no demo content, white background, no icon or
|
|
131
139
|
* pattern. Values come from FORM_DEFAULTS; the blurb document is cloned so each form gets its
|
|
@@ -1,15 +1,19 @@
|
|
|
1
1
|
import type { ImageRegions } from '../design.js';
|
|
2
|
+
/** One built-in background photo's baked metadata */
|
|
3
|
+
export interface BuiltinBg {
|
|
4
|
+
width: number;
|
|
5
|
+
height: number;
|
|
6
|
+
regions: ImageRegions;
|
|
7
|
+
}
|
|
2
8
|
/** Precomputed ImageRegions for every builtin background photo (assets/backgrounds/<key>),
|
|
3
9
|
* sampled against a fixed reference size — a 6in x 9in trim, 250-page Lulu paperback — rather
|
|
4
10
|
* than the actual cover being generated, since the source photo's dominant colors barely shift
|
|
5
11
|
* across trim sizes/spine widths and doing this once at build time skips a real image decode
|
|
6
12
|
* (measured 100-350ms for this app's own background photos) for the common case of a builtin
|
|
7
|
-
* pick.
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
regions: ImageRegions;
|
|
14
|
-
}>;
|
|
13
|
+
* pick. The filename key is the built-in's ID, so get_builtin_bg_regions() looks entries up by
|
|
14
|
+
* it alone — the regions hold for the preview-sized copy, or any visually identical
|
|
15
|
+
* re-encode, too: they are a rough colour read, not a fingerprint. `width`/`height` are the
|
|
16
|
+
* original's pixel size, for resolution checks without downloading it. Callers fall back to a
|
|
17
|
+
* live analyze_pixel_regions() for anything not in this table. */
|
|
18
|
+
export declare const BUILTIN_BG_REGIONS: Record<string, BuiltinBg>;
|
|
15
19
|
//# sourceMappingURL=builtin_bg_regions.d.ts.map
|
|
@@ -5,69 +5,70 @@
|
|
|
5
5
|
* than the actual cover being generated, since the source photo's dominant colors barely shift
|
|
6
6
|
* across trim sizes/spine widths and doing this once at build time skips a real image decode
|
|
7
7
|
* (measured 100-350ms for this app's own background photos) for the common case of a builtin
|
|
8
|
-
* pick.
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
8
|
+
* pick. The filename key is the built-in's ID, so get_builtin_bg_regions() looks entries up by
|
|
9
|
+
* it alone — the regions hold for the preview-sized copy, or any visually identical
|
|
10
|
+
* re-encode, too: they are a rough colour read, not a fingerprint. `width`/`height` are the
|
|
11
|
+
* original's pixel size, for resolution checks without downloading it. Callers fall back to a
|
|
12
|
+
* live analyze_pixel_regions() for anything not in this table. */
|
|
12
13
|
export const BUILTIN_BG_REGIONS = {
|
|
13
|
-
"adventure.jpg": {
|
|
14
|
-
"awe.jpg": {
|
|
15
|
-
"beach.jpg": {
|
|
16
|
-
"bible.jpg": {
|
|
17
|
-
"bird.jpg": {
|
|
18
|
-
"books.jpg": {
|
|
19
|
-
"burning.jpg": {
|
|
20
|
-
"church.jpg": {
|
|
21
|
-
"city.jpg": {
|
|
22
|
-
"city_sunset.jpg": {
|
|
23
|
-
"countryside.jpg": {
|
|
24
|
-
"crops.jpg": {
|
|
25
|
-
"cross.jpg": {
|
|
26
|
-
"cross_sun.jpg": {
|
|
27
|
-
"crown.jpg": {
|
|
28
|
-
"desert.jpg": {
|
|
29
|
-
"desert_sunset.jpg": {
|
|
30
|
-
"earth.jpg": {
|
|
31
|
-
"earth_whole.jpg": {
|
|
32
|
-
"fire.jpg": {
|
|
33
|
-
"flowers.jpg": {
|
|
34
|
-
"flowers_field.jpg": {
|
|
35
|
-
"flowers_red.jpg": {
|
|
36
|
-
"funding.jpg": {
|
|
37
|
-
"grass.jpg": {
|
|
38
|
-
"green.jpg": {
|
|
39
|
-
"growing.jpg": {
|
|
40
|
-
"hills.jpg": {
|
|
41
|
-
"hills_trees.jpg": {
|
|
42
|
-
"island.jpg": {
|
|
43
|
-
"israel.jpg": {
|
|
44
|
-
"israel_lake.jpg": {
|
|
45
|
-
"lake.jpg": {
|
|
46
|
-
"lake_tree.jpg": {
|
|
47
|
-
"lion.jpg": {
|
|
48
|
-
"lost_sheep.jpg": {
|
|
49
|
-
"mist.jpg": {
|
|
50
|
-
"mountains.jpg": {
|
|
51
|
-
"opening.jpg": {
|
|
52
|
-
"plane.jpg": {
|
|
53
|
-
"plant.jpg": {
|
|
54
|
-
"plant_table.jpg": {
|
|
55
|
-
"reflecting.jpg": {
|
|
56
|
-
"rocket.jpg": {
|
|
57
|
-
"sea.jpg": {
|
|
58
|
-
"sheep.jpg": {
|
|
59
|
-
"snow.jpg": {
|
|
60
|
-
"snow_trees.jpg": {
|
|
61
|
-
"stars.jpg": {
|
|
62
|
-
"sunset.jpg": {
|
|
63
|
-
"sunset_tree.jpg": {
|
|
64
|
-
"surge.jpg": {
|
|
65
|
-
"sword.jpg": {
|
|
66
|
-
"tomb.jpg": {
|
|
67
|
-
"tropical.jpg": {
|
|
68
|
-
"vineyard.jpg": {
|
|
69
|
-
"wasteland.jpg": {
|
|
70
|
-
"wilderness.jpg": {
|
|
71
|
-
"work.jpg": {
|
|
14
|
+
"adventure.jpg": { width: 3506, height: 2329, regions: { "front_top": { "hue": 53.853, "saturation": 0.177, "lightness": 0.492, "lightness_spread": 0.065 }, "front_bottom": { "hue": 59.163, "saturation": 0.411, "lightness": 0.148, "lightness_spread": 0.085 }, "front_top_full": { "hue": 42.53, "saturation": 0.248, "lightness": 0.523, "lightness_spread": 0.046 }, "front_bottom_full": { "hue": 62.659, "saturation": 0.277, "lightness": 0.114, "lightness_spread": 0.089 }, "back": { "hue": 65.834, "saturation": 0.203, "lightness": 0.366, "lightness_spread": 0.13 }, "spine": { "hue": 51.015, "saturation": 0.19, "lightness": 0.415, "lightness_spread": 0.149 } } },
|
|
15
|
+
"awe.jpg": { width: 5000, height: 3333, regions: { "front_top": { "hue": 197.469, "saturation": 0.412, "lightness": 0.632, "lightness_spread": 0.1 }, "front_bottom": { "hue": 40.53, "saturation": 0.586, "lightness": 0.247, "lightness_spread": 0.219 }, "front_top_full": { "hue": 197.375, "saturation": 0.414, "lightness": 0.626, "lightness_spread": 0.1 }, "front_bottom_full": { "hue": 35.006, "saturation": 0.581, "lightness": 0.264, "lightness_spread": 0.191 }, "back": { "hue": 100.052, "saturation": 0.427, "lightness": 0.558, "lightness_spread": 0.307 }, "spine": { "hue": 55.877, "saturation": 0.445, "lightness": 0.797, "lightness_spread": 0.168 } } },
|
|
16
|
+
"beach.jpg": { width: 4621, height: 3072, regions: { "front_top": { "hue": 156.52, "saturation": 0.203, "lightness": 0.736, "lightness_spread": 0.087 }, "front_bottom": { "hue": 20.308, "saturation": 0.253, "lightness": 0.731, "lightness_spread": 0.056 }, "front_top_full": { "hue": 185.142, "saturation": 0.208, "lightness": 0.694, "lightness_spread": 0.079 }, "front_bottom_full": { "hue": 14.105, "saturation": 0.141, "lightness": 0.699, "lightness_spread": 0.053 }, "back": { "hue": 27.684, "saturation": 0.32, "lightness": 0.771, "lightness_spread": 0.081 }, "spine": { "hue": 73.634, "saturation": 0.126, "lightness": 0.691, "lightness_spread": 0.084 } } },
|
|
17
|
+
"bible.jpg": { width: 4608, height: 3456, regions: { "front_top": { "hue": 31.57, "saturation": 0.34, "lightness": 0.353, "lightness_spread": 0.128 }, "front_bottom": { "hue": 30.561, "saturation": 0.2, "lightness": 0.224, "lightness_spread": 0.201 }, "front_top_full": { "hue": 30.385, "saturation": 0.267, "lightness": 0.283, "lightness_spread": 0.088 }, "front_bottom_full": { "hue": 37.048, "saturation": 0.175, "lightness": 0.263, "lightness_spread": 0.224 }, "back": { "hue": 29.602, "saturation": 0.315, "lightness": 0.383, "lightness_spread": 0.216 }, "spine": { "hue": 24.906, "saturation": 0.374, "lightness": 0.469, "lightness_spread": 0.211 } } },
|
|
18
|
+
"bird.jpg": { width: 4036, height: 2691, regions: { "front_top": { "hue": 214.411, "saturation": 0.44, "lightness": 0.592, "lightness_spread": 0.087 }, "front_bottom": { "hue": 213.727, "saturation": 0.456, "lightness": 0.595, "lightness_spread": 0.012 }, "front_top_full": { "hue": 214.182, "saturation": 0.446, "lightness": 0.627, "lightness_spread": 0.016 }, "front_bottom_full": { "hue": 213.974, "saturation": 0.456, "lightness": 0.602, "lightness_spread": 0.012 }, "back": { "hue": 215.141, "saturation": 0.432, "lightness": 0.542, "lightness_spread": 0.143 }, "spine": { "hue": 216.838, "saturation": 0.407, "lightness": 0.504, "lightness_spread": 0.174 } } },
|
|
19
|
+
"books.jpg": { width: 4480, height: 3360, regions: { "front_top": { "hue": 102.789, "saturation": 0.114, "lightness": 0.936, "lightness_spread": 0.034 }, "front_bottom": { "hue": 163.276, "saturation": 0.14, "lightness": 0.717, "lightness_spread": 0.207 }, "front_top_full": { "hue": 114.719, "saturation": 0.103, "lightness": 0.931, "lightness_spread": 0.038 }, "front_bottom_full": { "hue": 177.717, "saturation": 0.153, "lightness": 0.743, "lightness_spread": 0.189 }, "back": { "hue": 119.388, "saturation": 0.133, "lightness": 0.776, "lightness_spread": 0.22 }, "spine": { "hue": 115.939, "saturation": 0.142, "lightness": 0.761, "lightness_spread": 0.202 } } },
|
|
20
|
+
"burning.jpg": { width: 4032, height: 3024, regions: { "front_top": { "hue": 2.3, "saturation": 0.725, "lightness": 0.042, "lightness_spread": 0.06 }, "front_bottom": { "hue": 6.292, "saturation": 0.907, "lightness": 0.095, "lightness_spread": 0.101 }, "front_top_full": { "hue": 1.512, "saturation": 0.982, "lightness": 0.05, "lightness_spread": 0.032 }, "front_bottom_full": { "hue": 10.809, "saturation": 0.951, "lightness": 0.155, "lightness_spread": 0.124 }, "back": { "hue": 2.963, "saturation": 0.668, "lightness": 0.044, "lightness_spread": 0.071 }, "spine": { "hue": 10.518, "saturation": 0.968, "lightness": 0.158, "lightness_spread": 0.129 } } },
|
|
21
|
+
"church.jpg": { width: 6240, height: 3510, regions: { "front_top": { "hue": 7.129, "saturation": 0.218, "lightness": 0.446, "lightness_spread": 0.101 }, "front_bottom": { "hue": 30.511, "saturation": 0.515, "lightness": 0.111, "lightness_spread": 0.055 }, "front_top_full": { "hue": 12.033, "saturation": 0.252, "lightness": 0.462, "lightness_spread": 0.101 }, "front_bottom_full": { "hue": 30.714, "saturation": 0.498, "lightness": 0.115, "lightness_spread": 0.05 }, "back": { "hue": 31.991, "saturation": 0.486, "lightness": 0.412, "lightness_spread": 0.246 }, "spine": { "hue": 32.696, "saturation": 0.46, "lightness": 0.449, "lightness_spread": 0.275 } } },
|
|
22
|
+
"city.jpg": { width: 3520, height: 1980, regions: { "front_top": { "hue": 213.093, "saturation": 0.237, "lightness": 0.824, "lightness_spread": 0.028 }, "front_bottom": { "hue": 222.764, "saturation": 0.417, "lightness": 0.184, "lightness_spread": 0.109 }, "front_top_full": { "hue": 213.017, "saturation": 0.246, "lightness": 0.818, "lightness_spread": 0.025 }, "front_bottom_full": { "hue": 222.134, "saturation": 0.406, "lightness": 0.196, "lightness_spread": 0.113 }, "back": { "hue": 249.993, "saturation": 0.313, "lightness": 0.598, "lightness_spread": 0.298 }, "spine": { "hue": 247.817, "saturation": 0.257, "lightness": 0.612, "lightness_spread": 0.267 } } },
|
|
23
|
+
"city_sunset.jpg": { width: 2532, height: 1537, regions: { "front_top": { "hue": 205.058, "saturation": 0.671, "lightness": 0.644, "lightness_spread": 0.069 }, "front_bottom": { "hue": 201.446, "saturation": 0.557, "lightness": 0.29, "lightness_spread": 0.099 }, "front_top_full": { "hue": 204.963, "saturation": 0.672, "lightness": 0.638, "lightness_spread": 0.069 }, "front_bottom_full": { "hue": 201.759, "saturation": 0.511, "lightness": 0.29, "lightness_spread": 0.103 }, "back": { "hue": 207.517, "saturation": 0.534, "lightness": 0.549, "lightness_spread": 0.196 }, "spine": { "hue": 210.585, "saturation": 0.497, "lightness": 0.585, "lightness_spread": 0.202 } } },
|
|
24
|
+
"countryside.jpg": { width: 4957, height: 3305, regions: { "front_top": { "hue": 229.906, "saturation": 0.282, "lightness": 0.921, "lightness_spread": 0.12 }, "front_bottom": { "hue": 74.204, "saturation": 0.633, "lightness": 0.312, "lightness_spread": 0.056 }, "front_top_full": { "hue": 227.19, "saturation": 0.249, "lightness": 0.968, "lightness_spread": 0.037 }, "front_bottom_full": { "hue": 73.87, "saturation": 0.64, "lightness": 0.314, "lightness_spread": 0.062 }, "back": { "hue": 95.017, "saturation": 0.36, "lightness": 0.561, "lightness_spread": 0.275 }, "spine": { "hue": 101.947, "saturation": 0.327, "lightness": 0.667, "lightness_spread": 0.277 } } },
|
|
25
|
+
"crops.jpg": { width: 3339, height: 1876, regions: { "front_top": { "hue": 192.799, "saturation": 0.341, "lightness": 0.606, "lightness_spread": 0.152 }, "front_bottom": { "hue": 35.026, "saturation": 0.663, "lightness": 0.449, "lightness_spread": 0.112 }, "front_top_full": { "hue": 192.145, "saturation": 0.415, "lightness": 0.564, "lightness_spread": 0.166 }, "front_bottom_full": { "hue": 34.742, "saturation": 0.707, "lightness": 0.42, "lightness_spread": 0.109 }, "back": { "hue": 46.564, "saturation": 0.419, "lightness": 0.579, "lightness_spread": 0.135 }, "spine": { "hue": 49.05, "saturation": 0.456, "lightness": 0.572, "lightness_spread": 0.152 } } },
|
|
26
|
+
"cross.jpg": { width: 4032, height: 3024, regions: { "front_top": { "hue": 65.291, "saturation": 0.002, "lightness": 0.004, "lightness_spread": 0 }, "front_bottom": { "hue": 21.86, "saturation": 0.736, "lightness": 0.041, "lightness_spread": 0.073 }, "front_top_full": { "hue": 60, "saturation": 0.004, "lightness": 0.004, "lightness_spread": 0 }, "front_bottom_full": { "hue": 6.788, "saturation": 0.827, "lightness": 0.071, "lightness_spread": 0.099 }, "back": { "hue": 57.399, "saturation": 0.252, "lightness": 0.012, "lightness_spread": 0.031 }, "spine": { "hue": 31.63, "saturation": 0.396, "lightness": 0.024, "lightness_spread": 0.041 } } },
|
|
27
|
+
"cross_sun.jpg": { width: 6000, height: 4000, regions: { "front_top": { "hue": 215.261, "saturation": 0.2, "lightness": 0.323, "lightness_spread": 0.037 }, "front_bottom": { "hue": 29.6, "saturation": 0.717, "lightness": 0.276, "lightness_spread": 0.221 }, "front_top_full": { "hue": 214.434, "saturation": 0.231, "lightness": 0.315, "lightness_spread": 0.035 }, "front_bottom_full": { "hue": 25.524, "saturation": 0.617, "lightness": 0.241, "lightness_spread": 0.202 }, "back": { "hue": 36.336, "saturation": 0.462, "lightness": 0.396, "lightness_spread": 0.175 }, "spine": { "hue": 43.042, "saturation": 0.473, "lightness": 0.431, "lightness_spread": 0.226 } } },
|
|
28
|
+
"crown.jpg": { width: 6000, height: 4000, regions: { "front_top": { "hue": 184.268, "saturation": 0.78, "lightness": 0.067, "lightness_spread": 0.071 }, "front_bottom": { "hue": 187.149, "saturation": 0.541, "lightness": 0.395, "lightness_spread": 0.241 }, "front_top_full": { "hue": 185.243, "saturation": 0.852, "lightness": 0.111, "lightness_spread": 0.075 }, "front_bottom_full": { "hue": 184.884, "saturation": 0.407, "lightness": 0.586, "lightness_spread": 0.195 }, "back": { "hue": 185.917, "saturation": 0.707, "lightness": 0.109, "lightness_spread": 0.109 }, "spine": { "hue": 184.658, "saturation": 0.623, "lightness": 0.191, "lightness_spread": 0.13 } } },
|
|
29
|
+
"desert.jpg": { width: 3872, height: 2178, regions: { "front_top": { "hue": 28.124, "saturation": 0.774, "lightness": 0.957, "lightness_spread": 0.054 }, "front_bottom": { "hue": 18.297, "saturation": 0.832, "lightness": 0.693, "lightness_spread": 0.062 }, "front_top_full": { "hue": 30.431, "saturation": 0.8, "lightness": 0.974, "lightness_spread": 0.005 }, "front_bottom_full": { "hue": 18.449, "saturation": 0.903, "lightness": 0.739, "lightness_spread": 0.043 }, "back": { "hue": 21.289, "saturation": 0.831, "lightness": 0.814, "lightness_spread": 0.126 }, "spine": { "hue": 22.343, "saturation": 0.845, "lightness": 0.848, "lightness_spread": 0.119 } } },
|
|
30
|
+
"desert_sunset.jpg": { width: 4263, height: 2822, regions: { "front_top": { "hue": 1.343, "saturation": 0.954, "lightness": 0.791, "lightness_spread": 0.019 }, "front_bottom": { "hue": 209.341, "saturation": 0.282, "lightness": 0.601, "lightness_spread": 0.107 }, "front_top_full": { "hue": 0.408, "saturation": 0.948, "lightness": 0.788, "lightness_spread": 0.019 }, "front_bottom_full": { "hue": 211.086, "saturation": 0.262, "lightness": 0.624, "lightness_spread": 0.049 }, "back": { "hue": 325.997, "saturation": 0.65, "lightness": 0.641, "lightness_spread": 0.165 }, "spine": { "hue": 311.993, "saturation": 0.75, "lightness": 0.653, "lightness_spread": 0.151 } } },
|
|
31
|
+
"earth.jpg": { width: 8256, height: 5504, regions: { "front_top": { "hue": 216.02, "saturation": 0.575, "lightness": 0.508, "lightness_spread": 0.313 }, "front_bottom": { "hue": 209.702, "saturation": 0.289, "lightness": 0.554, "lightness_spread": 0.135 }, "front_top_full": { "hue": 216.514, "saturation": 0.579, "lightness": 0.534, "lightness_spread": 0.327 }, "front_bottom_full": { "hue": 207.85, "saturation": 0.254, "lightness": 0.552, "lightness_spread": 0.112 }, "back": { "hue": 213.127, "saturation": 0.425, "lightness": 0.556, "lightness_spread": 0.186 }, "spine": { "hue": 210.071, "saturation": 0.468, "lightness": 0.569, "lightness_spread": 0.166 } } },
|
|
32
|
+
"earth_whole.jpg": { width: 3840, height: 4004, regions: { "front_top": { "hue": 0, "saturation": 0, "lightness": 0, "lightness_spread": 0 }, "front_bottom": { "hue": 217.681, "saturation": 0.036, "lightness": 0.048, "lightness_spread": 0.15 }, "front_top_full": { "hue": 0, "saturation": 0, "lightness": 0, "lightness_spread": 0 }, "front_bottom_full": { "hue": 217.675, "saturation": 0.034, "lightness": 0.049, "lightness_spread": 0.15 }, "back": { "hue": 221.204, "saturation": 0.046, "lightness": 0.1, "lightness_spread": 0.213 }, "spine": { "hue": 222.062, "saturation": 0.112, "lightness": 0.256, "lightness_spread": 0.281 } } },
|
|
33
|
+
"fire.jpg": { width: 4928, height: 3264, regions: { "front_top": { "hue": 336.921, "saturation": 0.854, "lightness": 0.018, "lightness_spread": 0.035 }, "front_bottom": { "hue": 354.143, "saturation": 0.911, "lightness": 0.103, "lightness_spread": 0.18 }, "front_top_full": { "hue": 325.737, "saturation": 0.855, "lightness": 0.013, "lightness_spread": 0.019 }, "front_bottom_full": { "hue": 352.679, "saturation": 0.914, "lightness": 0.127, "lightness_spread": 0.203 }, "back": { "hue": 352.717, "saturation": 0.883, "lightness": 0.041, "lightness_spread": 0.084 }, "spine": { "hue": 14.079, "saturation": 0.948, "lightness": 0.295, "lightness_spread": 0.24 } } },
|
|
34
|
+
"flowers.jpg": { width: 6000, height: 4000, regions: { "front_top": { "hue": 359.525, "saturation": 0.257, "lightness": 0.857, "lightness_spread": 0.059 }, "front_bottom": { "hue": 11.121, "saturation": 0.213, "lightness": 0.632, "lightness_spread": 0.118 }, "front_top_full": { "hue": 10.868, "saturation": 0.302, "lightness": 0.836, "lightness_spread": 0.033 }, "front_bottom_full": { "hue": 29.7, "saturation": 0.192, "lightness": 0.656, "lightness_spread": 0.121 }, "back": { "hue": 2.179, "saturation": 0.241, "lightness": 0.738, "lightness_spread": 0.141 }, "spine": { "hue": 352.672, "saturation": 0.305, "lightness": 0.784, "lightness_spread": 0.111 } } },
|
|
35
|
+
"flowers_field.jpg": { width: 6000, height: 4000, regions: { "front_top": { "hue": 22.369, "saturation": 0.653, "lightness": 0.774, "lightness_spread": 0.14 }, "front_bottom": { "hue": 272.415, "saturation": 0.606, "lightness": 0.192, "lightness_spread": 0.206 }, "front_top_full": { "hue": 27.782, "saturation": 0.772, "lightness": 0.743, "lightness_spread": 0.2 }, "front_bottom_full": { "hue": 277.885, "saturation": 0.565, "lightness": 0.21, "lightness_spread": 0.204 }, "back": { "hue": 331.502, "saturation": 0.616, "lightness": 0.465, "lightness_spread": 0.309 }, "spine": { "hue": 334.484, "saturation": 0.672, "lightness": 0.456, "lightness_spread": 0.298 } } },
|
|
36
|
+
"flowers_red.jpg": { width: 6000, height: 4000, regions: { "front_top": { "hue": 214.211, "saturation": 0.394, "lightness": 0.646, "lightness_spread": 0.077 }, "front_bottom": { "hue": 79.975, "saturation": 0.552, "lightness": 0.244, "lightness_spread": 0.187 }, "front_top_full": { "hue": 208.432, "saturation": 0.381, "lightness": 0.708, "lightness_spread": 0.033 }, "front_bottom_full": { "hue": 83.209, "saturation": 0.566, "lightness": 0.201, "lightness_spread": 0.143 }, "back": { "hue": 20.111, "saturation": 0.542, "lightness": 0.501, "lightness_spread": 0.196 }, "spine": { "hue": 22.569, "saturation": 0.549, "lightness": 0.532, "lightness_spread": 0.213 } } },
|
|
37
|
+
"funding.jpg": { width: 4979, height: 3319, regions: { "front_top": { "hue": 90.48, "saturation": 0.049, "lightness": 0.54, "lightness_spread": 0.068 }, "front_bottom": { "hue": 314.715, "saturation": 0.263, "lightness": 0.806, "lightness_spread": 0.223 }, "front_top_full": { "hue": 89.426, "saturation": 0.093, "lightness": 0.549, "lightness_spread": 0.097 }, "front_bottom_full": { "hue": 11.233, "saturation": 0.334, "lightness": 0.727, "lightness_spread": 0.267 }, "back": { "hue": 78.106, "saturation": 0.093, "lightness": 0.594, "lightness_spread": 0.18 }, "spine": { "hue": 19.89, "saturation": 0.128, "lightness": 0.568, "lightness_spread": 0.195 } } },
|
|
38
|
+
"grass.jpg": { width: 5500, height: 3667, regions: { "front_top": { "hue": 84.038, "saturation": 0.364, "lightness": 0.62, "lightness_spread": 0.108 }, "front_bottom": { "hue": 101.932, "saturation": 0.802, "lightness": 0.214, "lightness_spread": 0.113 }, "front_top_full": { "hue": 85.783, "saturation": 0.308, "lightness": 0.561, "lightness_spread": 0.114 }, "front_bottom_full": { "hue": 106.376, "saturation": 0.9, "lightness": 0.164, "lightness_spread": 0.091 }, "back": { "hue": 89.967, "saturation": 0.509, "lightness": 0.466, "lightness_spread": 0.184 }, "spine": { "hue": 93.954, "saturation": 0.649, "lightness": 0.431, "lightness_spread": 0.218 } } },
|
|
39
|
+
"green.jpg": { width: 5464, height: 3640, regions: { "front_top": { "hue": 88.154, "saturation": 0.371, "lightness": 0.682, "lightness_spread": 0.125 }, "front_bottom": { "hue": 70.958, "saturation": 0.75, "lightness": 0.139, "lightness_spread": 0.126 }, "front_top_full": { "hue": 37.851, "saturation": 0.386, "lightness": 0.73, "lightness_spread": 0.133 }, "front_bottom_full": { "hue": 76.589, "saturation": 0.81, "lightness": 0.099, "lightness_spread": 0.046 }, "back": { "hue": 72.64, "saturation": 0.582, "lightness": 0.35, "lightness_spread": 0.253 }, "spine": { "hue": 76.817, "saturation": 0.611, "lightness": 0.329, "lightness_spread": 0.259 } } },
|
|
40
|
+
"growing.jpg": { width: 3472, height: 1954, regions: { "front_top": { "hue": 28.178, "saturation": 0.058, "lightness": 0.36, "lightness_spread": 0.071 }, "front_bottom": { "hue": 33.518, "saturation": 0.103, "lightness": 0.234, "lightness_spread": 0.07 }, "front_top_full": { "hue": 27.718, "saturation": 0.062, "lightness": 0.345, "lightness_spread": 0.074 }, "front_bottom_full": { "hue": 43.211, "saturation": 0.132, "lightness": 0.226, "lightness_spread": 0.068 }, "back": { "hue": 33.722, "saturation": 0.076, "lightness": 0.32, "lightness_spread": 0.094 }, "spine": { "hue": 41.412, "saturation": 0.105, "lightness": 0.319, "lightness_spread": 0.112 } } },
|
|
41
|
+
"hills.jpg": { width: 5832, height: 3893, regions: { "front_top": { "hue": 192.459, "saturation": 0.283, "lightness": 0.823, "lightness_spread": 0.022 }, "front_bottom": { "hue": 193.529, "saturation": 0.185, "lightness": 0.694, "lightness_spread": 0.094 }, "front_top_full": { "hue": 192.98, "saturation": 0.285, "lightness": 0.812, "lightness_spread": 0.016 }, "front_bottom_full": { "hue": 195.772, "saturation": 0.194, "lightness": 0.638, "lightness_spread": 0.084 }, "back": { "hue": 187.953, "saturation": 0.211, "lightness": 0.809, "lightness_spread": 0.065 }, "spine": { "hue": 189.125, "saturation": 0.214, "lightness": 0.786, "lightness_spread": 0.059 } } },
|
|
42
|
+
"hills_trees.jpg": { width: 5577, height: 3718, regions: { "front_top": { "hue": 26.64, "saturation": 0.682, "lightness": 0.647, "lightness_spread": 0.094 }, "front_bottom": { "hue": 29.738, "saturation": 0.521, "lightness": 0.21, "lightness_spread": 0.187 }, "front_top_full": { "hue": 28.288, "saturation": 0.709, "lightness": 0.635, "lightness_spread": 0.047 }, "front_bottom_full": { "hue": 28.319, "saturation": 0.501, "lightness": 0.29, "lightness_spread": 0.185 }, "back": { "hue": 28.031, "saturation": 0.541, "lightness": 0.422, "lightness_spread": 0.253 }, "spine": { "hue": 28.831, "saturation": 0.506, "lightness": 0.517, "lightness_spread": 0.153 } } },
|
|
43
|
+
"island.jpg": { width: 5480, height: 3654, regions: { "front_top": { "hue": 183.004, "saturation": 0.739, "lightness": 0.598, "lightness_spread": 0.27 }, "front_bottom": { "hue": 29.886, "saturation": 0.359, "lightness": 0.753, "lightness_spread": 0.075 }, "front_top_full": { "hue": 205.803, "saturation": 0.896, "lightness": 0.81, "lightness_spread": 0.042 }, "front_bottom_full": { "hue": 25.859, "saturation": 0.219, "lightness": 0.732, "lightness_spread": 0.079 }, "back": { "hue": 59.35, "saturation": 0.527, "lightness": 0.441, "lightness_spread": 0.269 }, "spine": { "hue": 115.095, "saturation": 0.528, "lightness": 0.558, "lightness_spread": 0.267 } } },
|
|
44
|
+
"israel.jpg": { width: 5019, height: 3346, regions: { "front_top": { "hue": 212.339, "saturation": 0.53, "lightness": 0.636, "lightness_spread": 0.087 }, "front_bottom": { "hue": 37.962, "saturation": 0.788, "lightness": 0.747, "lightness_spread": 0.191 }, "front_top_full": { "hue": 212.782, "saturation": 0.511, "lightness": 0.652, "lightness_spread": 0.081 }, "front_bottom_full": { "hue": 43.884, "saturation": 0.771, "lightness": 0.691, "lightness_spread": 0.239 }, "back": { "hue": 221.786, "saturation": 0.471, "lightness": 0.684, "lightness_spread": 0.123 }, "spine": { "hue": 228.331, "saturation": 0.48, "lightness": 0.715, "lightness_spread": 0.123 } } },
|
|
45
|
+
"israel_lake.jpg": { width: 5184, height: 3456, regions: { "front_top": { "hue": 200.86, "saturation": 0.787, "lightness": 0.428, "lightness_spread": 0.08 }, "front_bottom": { "hue": 236.092, "saturation": 0.485, "lightness": 0.191, "lightness_spread": 0.065 }, "front_top_full": { "hue": 199.559, "saturation": 0.789, "lightness": 0.438, "lightness_spread": 0.086 }, "front_bottom_full": { "hue": 243.249, "saturation": 0.485, "lightness": 0.195, "lightness_spread": 0.074 }, "back": { "hue": 207.865, "saturation": 0.476, "lightness": 0.432, "lightness_spread": 0.18 }, "spine": { "hue": 204.557, "saturation": 0.535, "lightness": 0.429, "lightness_spread": 0.177 } } },
|
|
46
|
+
"lake.jpg": { width: 4000, height: 3000, regions: { "front_top": { "hue": 216.275, "saturation": 0.671, "lightness": 0.704, "lightness_spread": 0.131 }, "front_bottom": { "hue": 178.136, "saturation": 0.131, "lightness": 0.521, "lightness_spread": 0.096 }, "front_top_full": { "hue": 216.746, "saturation": 0.682, "lightness": 0.713, "lightness_spread": 0.043 }, "front_bottom_full": { "hue": 191.587, "saturation": 0.163, "lightness": 0.517, "lightness_spread": 0.075 }, "back": { "hue": 207.78, "saturation": 0.357, "lightness": 0.489, "lightness_spread": 0.261 }, "spine": { "hue": 208.761, "saturation": 0.378, "lightness": 0.557, "lightness_spread": 0.203 } } },
|
|
47
|
+
"lake_tree.jpg": { width: 5472, height: 3648, regions: { "front_top": { "hue": 214.387, "saturation": 0.247, "lightness": 0.773, "lightness_spread": 0.07 }, "front_bottom": { "hue": 204.49, "saturation": 0.12, "lightness": 0.538, "lightness_spread": 0.102 }, "front_top_full": { "hue": 216.486, "saturation": 0.197, "lightness": 0.781, "lightness_spread": 0.061 }, "front_bottom_full": { "hue": 196.376, "saturation": 0.086, "lightness": 0.507, "lightness_spread": 0.131 }, "back": { "hue": 212.441, "saturation": 0.238, "lightness": 0.626, "lightness_spread": 0.17 }, "spine": { "hue": 200.983, "saturation": 0.223, "lightness": 0.655, "lightness_spread": 0.196 } } },
|
|
48
|
+
"lion.jpg": { width: 5472, height: 3648, regions: { "front_top": { "hue": 40.978, "saturation": 0.737, "lightness": 0.67, "lightness_spread": 0.02 }, "front_bottom": { "hue": 26.342, "saturation": 0.54, "lightness": 0.269, "lightness_spread": 0.091 }, "front_top_full": { "hue": 41.05, "saturation": 0.771, "lightness": 0.663, "lightness_spread": 0.02 }, "front_bottom_full": { "hue": 25.125, "saturation": 0.544, "lightness": 0.287, "lightness_spread": 0.085 }, "back": { "hue": 32.332, "saturation": 0.635, "lightness": 0.485, "lightness_spread": 0.185 }, "spine": { "hue": 33.272, "saturation": 0.67, "lightness": 0.56, "lightness_spread": 0.127 } } },
|
|
49
|
+
"lost_sheep.jpg": { width: 5931, height: 3336, regions: { "front_top": { "hue": 204.631, "saturation": 0.338, "lightness": 0.297, "lightness_spread": 0.068 }, "front_bottom": { "hue": 27.535, "saturation": 0.675, "lightness": 0.294, "lightness_spread": 0.118 }, "front_top_full": { "hue": 204.723, "saturation": 0.341, "lightness": 0.292, "lightness_spread": 0.064 }, "front_bottom_full": { "hue": 27.238, "saturation": 0.635, "lightness": 0.322, "lightness_spread": 0.12 }, "back": { "hue": 28.646, "saturation": 0.496, "lightness": 0.341, "lightness_spread": 0.15 }, "spine": { "hue": 29.267, "saturation": 0.496, "lightness": 0.373, "lightness_spread": 0.138 } } },
|
|
50
|
+
"mist.jpg": { width: 2200, height: 1467, regions: { "front_top": { "hue": 26.249, "saturation": 0.702, "lightness": 0.967, "lightness_spread": 0.024 }, "front_bottom": { "hue": 209.76, "saturation": 0.359, "lightness": 0.136, "lightness_spread": 0.061 }, "front_top_full": { "hue": 26.513, "saturation": 0.661, "lightness": 0.958, "lightness_spread": 0.033 }, "front_bottom_full": { "hue": 205.366, "saturation": 0.364, "lightness": 0.142, "lightness_spread": 0.07 }, "back": { "hue": 29.044, "saturation": 0.46, "lightness": 0.571, "lightness_spread": 0.378 }, "spine": { "hue": 42.01, "saturation": 0.4, "lightness": 0.546, "lightness_spread": 0.36 } } },
|
|
51
|
+
"mountains.jpg": { width: 6316, height: 4211, regions: { "front_top": { "hue": 57.715, "saturation": 0.745, "lightness": 0.917, "lightness_spread": 0.171 }, "front_bottom": { "hue": 215.393, "saturation": 0.365, "lightness": 0.131, "lightness_spread": 0.131 }, "front_top_full": { "hue": 53.684, "saturation": 0.757, "lightness": 0.923, "lightness_spread": 0.156 }, "front_bottom_full": { "hue": 216.876, "saturation": 0.301, "lightness": 0.168, "lightness_spread": 0.148 }, "back": { "hue": 84.473, "saturation": 0.434, "lightness": 0.519, "lightness_spread": 0.352 }, "spine": { "hue": 153.543, "saturation": 0.321, "lightness": 0.435, "lightness_spread": 0.299 } } },
|
|
52
|
+
"opening.jpg": { width: 4906, height: 3258, regions: { "front_top": { "hue": 30.056, "saturation": 0.05, "lightness": 0.073, "lightness_spread": 0.116 }, "front_bottom": { "hue": 33.193, "saturation": 0.12, "lightness": 0.025, "lightness_spread": 0.043 }, "front_top_full": { "hue": 43.213, "saturation": 0.054, "lightness": 0.119, "lightness_spread": 0.099 }, "front_bottom_full": { "hue": 33.204, "saturation": 0.132, "lightness": 0.032, "lightness_spread": 0.047 }, "back": { "hue": 26.211, "saturation": 0.128, "lightness": 0.069, "lightness_spread": 0.175 }, "spine": { "hue": 33.939, "saturation": 0.218, "lightness": 0.461, "lightness_spread": 0.432 } } },
|
|
53
|
+
"plane.jpg": { width: 4288, height: 2848, regions: { "front_top": { "hue": 195.996, "saturation": 0.304, "lightness": 0.706, "lightness_spread": 0.113 }, "front_bottom": { "hue": 261.078, "saturation": 0.333, "lightness": 0.527, "lightness_spread": 0.195 }, "front_top_full": { "hue": 27.271, "saturation": 0.317, "lightness": 0.778, "lightness_spread": 0.085 }, "front_bottom_full": { "hue": 22.135, "saturation": 0.328, "lightness": 0.673, "lightness_spread": 0.143 }, "back": { "hue": 206.021, "saturation": 0.322, "lightness": 0.581, "lightness_spread": 0.16 }, "spine": { "hue": 31.419, "saturation": 0.405, "lightness": 0.725, "lightness_spread": 0.185 } } },
|
|
54
|
+
"plant.jpg": { width: 6000, height: 4000, regions: { "front_top": { "hue": 78.493, "saturation": 0.103, "lightness": 0.018, "lightness_spread": 0.075 }, "front_bottom": { "hue": 19.299, "saturation": 0.562, "lightness": 0.057, "lightness_spread": 0.062 }, "front_top_full": { "hue": 61.914, "saturation": 0.138, "lightness": 0.02, "lightness_spread": 0.084 }, "front_bottom_full": { "hue": 16.765, "saturation": 0.628, "lightness": 0.09, "lightness_spread": 0.076 }, "back": { "hue": 40.407, "saturation": 0.257, "lightness": 0.026, "lightness_spread": 0.075 }, "spine": { "hue": 102.277, "saturation": 0.448, "lightness": 0.075, "lightness_spread": 0.139 } } },
|
|
55
|
+
"plant_table.jpg": { width: 7351, height: 4903, regions: { "front_top": { "hue": 198.339, "saturation": 0.773, "lightness": 0.049, "lightness_spread": 0.082 }, "front_bottom": { "hue": 149.308, "saturation": 0.6, "lightness": 0.21, "lightness_spread": 0.202 }, "front_top_full": { "hue": 200.271, "saturation": 0.715, "lightness": 0.072, "lightness_spread": 0.12 }, "front_bottom_full": { "hue": 22.69, "saturation": 0.348, "lightness": 0.249, "lightness_spread": 0.175 }, "back": { "hue": 193.39, "saturation": 0.818, "lightness": 0.062, "lightness_spread": 0.116 }, "spine": { "hue": 183.36, "saturation": 0.615, "lightness": 0.234, "lightness_spread": 0.217 } } },
|
|
56
|
+
"reflecting.jpg": { width: 6000, height: 4000, regions: { "front_top": { "hue": 32.362, "saturation": 0.601, "lightness": 0.746, "lightness_spread": 0.06 }, "front_bottom": { "hue": 30.088, "saturation": 0.653, "lightness": 0.086, "lightness_spread": 0.051 }, "front_top_full": { "hue": 31.463, "saturation": 0.75, "lightness": 0.782, "lightness_spread": 0.018 }, "front_bottom_full": { "hue": 28.549, "saturation": 0.732, "lightness": 0.121, "lightness_spread": 0.051 }, "back": { "hue": 30.002, "saturation": 0.493, "lightness": 0.381, "lightness_spread": 0.299 }, "spine": { "hue": 27.784, "saturation": 0.604, "lightness": 0.383, "lightness_spread": 0.334 } } },
|
|
57
|
+
"rocket.jpg": { width: 6437, height: 4291, regions: { "front_top": { "hue": 220.291, "saturation": 0.117, "lightness": 0.427, "lightness_spread": 0.026 }, "front_bottom": { "hue": 33.292, "saturation": 0.381, "lightness": 0.269, "lightness_spread": 0.239 }, "front_top_full": { "hue": 222.485, "saturation": 0.107, "lightness": 0.438, "lightness_spread": 0.027 }, "front_bottom_full": { "hue": 33.391, "saturation": 0.411, "lightness": 0.317, "lightness_spread": 0.276 }, "back": { "hue": 4.266, "saturation": 0.18, "lightness": 0.38, "lightness_spread": 0.131 }, "spine": { "hue": 14.518, "saturation": 0.182, "lightness": 0.396, "lightness_spread": 0.131 } } },
|
|
58
|
+
"sea.jpg": { width: 6000, height: 4000, regions: { "front_top": { "hue": 187.102, "saturation": 0.188, "lightness": 0.844, "lightness_spread": 0.025 }, "front_bottom": { "hue": 190.313, "saturation": 0.395, "lightness": 0.306, "lightness_spread": 0.137 }, "front_top_full": { "hue": 183.78, "saturation": 0.184, "lightness": 0.864, "lightness_spread": 0.016 }, "front_bottom_full": { "hue": 190.437, "saturation": 0.308, "lightness": 0.379, "lightness_spread": 0.156 }, "back": { "hue": 190.777, "saturation": 0.367, "lightness": 0.497, "lightness_spread": 0.281 }, "spine": { "hue": 188.845, "saturation": 0.291, "lightness": 0.562, "lightness_spread": 0.268 } } },
|
|
59
|
+
"sheep.jpg": { width: 5184, height: 3456, regions: { "front_top": { "hue": 206.693, "saturation": 0.505, "lightness": 0.726, "lightness_spread": 0.247 }, "front_bottom": { "hue": 19.526, "saturation": 0.296, "lightness": 0.309, "lightness_spread": 0.179 }, "front_top_full": { "hue": 204.645, "saturation": 0.507, "lightness": 0.843, "lightness_spread": 0.111 }, "front_bottom_full": { "hue": 20.808, "saturation": 0.24, "lightness": 0.332, "lightness_spread": 0.207 }, "back": { "hue": 15.911, "saturation": 0.387, "lightness": 0.478, "lightness_spread": 0.246 }, "spine": { "hue": 213.3, "saturation": 0.361, "lightness": 0.617, "lightness_spread": 0.236 } } },
|
|
60
|
+
"snow.jpg": { width: 4163, height: 2769, regions: { "front_top": { "hue": 205.584, "saturation": 0.109, "lightness": 0.838, "lightness_spread": 0.091 }, "front_bottom": { "hue": 201.878, "saturation": 0.137, "lightness": 0.553, "lightness_spread": 0.248 }, "front_top_full": { "hue": 207.511, "saturation": 0.102, "lightness": 0.848, "lightness_spread": 0.009 }, "front_bottom_full": { "hue": 202.758, "saturation": 0.127, "lightness": 0.553, "lightness_spread": 0.221 }, "back": { "hue": 202.002, "saturation": 0.122, "lightness": 0.644, "lightness_spread": 0.24 }, "spine": { "hue": 205.215, "saturation": 0.095, "lightness": 0.74, "lightness_spread": 0.147 } } },
|
|
61
|
+
"snow_trees.jpg": { width: 4199, height: 2362, regions: { "front_top": { "hue": 14.593, "saturation": 0.868, "lightness": 0.841, "lightness_spread": 0.005 }, "front_bottom": { "hue": 242.436, "saturation": 0.25, "lightness": 0.711, "lightness_spread": 0.094 }, "front_top_full": { "hue": 11.62, "saturation": 0.794, "lightness": 0.845, "lightness_spread": 0.004 }, "front_bottom_full": { "hue": 247.651, "saturation": 0.225, "lightness": 0.729, "lightness_spread": 0.089 }, "back": { "hue": 8.932, "saturation": 0.604, "lightness": 0.776, "lightness_spread": 0.093 }, "spine": { "hue": 6.137, "saturation": 0.554, "lightness": 0.796, "lightness_spread": 0.075 } } },
|
|
62
|
+
"stars.jpg": { width: 6000, height: 4000, regions: { "front_top": { "hue": 189.927, "saturation": 0.443, "lightness": 0.179, "lightness_spread": 0.027 }, "front_bottom": { "hue": 31.853, "saturation": 0.196, "lightness": 0.124, "lightness_spread": 0.045 }, "front_top_full": { "hue": 190.529, "saturation": 0.44, "lightness": 0.192, "lightness_spread": 0.025 }, "front_bottom_full": { "hue": 30.242, "saturation": 0.223, "lightness": 0.131, "lightness_spread": 0.05 }, "back": { "hue": 183.075, "saturation": 0.361, "lightness": 0.189, "lightness_spread": 0.072 }, "spine": { "hue": 176.444, "saturation": 0.333, "lightness": 0.246, "lightness_spread": 0.109 } } },
|
|
63
|
+
"sunset.jpg": { width: 6000, height: 4000, regions: { "front_top": { "hue": 274.427, "saturation": 0.16, "lightness": 0.301, "lightness_spread": 0.13 }, "front_bottom": { "hue": 8.075, "saturation": 0.244, "lightness": 0.16, "lightness_spread": 0.195 }, "front_top_full": { "hue": 252.675, "saturation": 0.156, "lightness": 0.331, "lightness_spread": 0.126 }, "front_bottom_full": { "hue": 16.226, "saturation": 0.243, "lightness": 0.183, "lightness_spread": 0.209 }, "back": { "hue": 354.746, "saturation": 0.287, "lightness": 0.282, "lightness_spread": 0.227 }, "spine": { "hue": 16.92, "saturation": 0.393, "lightness": 0.448, "lightness_spread": 0.258 } } },
|
|
64
|
+
"sunset_tree.jpg": { width: 5762, height: 3841, regions: { "front_top": { "hue": 196.994, "saturation": 0.954, "lightness": 0.165, "lightness_spread": 0.048 }, "front_bottom": { "hue": 180.153, "saturation": 0.33, "lightness": 0.176, "lightness_spread": 0.13 }, "front_top_full": { "hue": 195.813, "saturation": 0.977, "lightness": 0.188, "lightness_spread": 0.04 }, "front_bottom_full": { "hue": 167.16, "saturation": 0.31, "lightness": 0.263, "lightness_spread": 0.141 }, "back": { "hue": 197.466, "saturation": 0.551, "lightness": 0.151, "lightness_spread": 0.101 }, "spine": { "hue": 194.694, "saturation": 0.504, "lightness": 0.25, "lightness_spread": 0.147 } } },
|
|
65
|
+
"surge.jpg": { width: 6000, height: 4000, regions: { "front_top": { "hue": 203.871, "saturation": 0.247, "lightness": 0.642, "lightness_spread": 0.069 }, "front_bottom": { "hue": 171.049, "saturation": 0.162, "lightness": 0.514, "lightness_spread": 0.208 }, "front_top_full": { "hue": 203.103, "saturation": 0.248, "lightness": 0.655, "lightness_spread": 0.049 }, "front_bottom_full": { "hue": 162.989, "saturation": 0.145, "lightness": 0.529, "lightness_spread": 0.189 }, "back": { "hue": 195.534, "saturation": 0.249, "lightness": 0.59, "lightness_spread": 0.181 }, "spine": { "hue": 198.382, "saturation": 0.229, "lightness": 0.623, "lightness_spread": 0.174 } } },
|
|
66
|
+
"sword.jpg": { width: 6264, height: 4176, regions: { "front_top": { "hue": 207.422, "saturation": 0.322, "lightness": 0.66, "lightness_spread": 0.204 }, "front_bottom": { "hue": 207.147, "saturation": 0.337, "lightness": 0.515, "lightness_spread": 0.203 }, "front_top_full": { "hue": 207.493, "saturation": 0.317, "lightness": 0.586, "lightness_spread": 0.251 }, "front_bottom_full": { "hue": 206.121, "saturation": 0.38, "lightness": 0.563, "lightness_spread": 0.217 }, "back": { "hue": 208.648, "saturation": 0.298, "lightness": 0.583, "lightness_spread": 0.19 }, "spine": { "hue": 207.453, "saturation": 0.327, "lightness": 0.656, "lightness_spread": 0.15 } } },
|
|
67
|
+
"tomb.jpg": { width: 4928, height: 3264, regions: { "front_top": { "hue": 29.481, "saturation": 0.207, "lightness": 0.442, "lightness_spread": 0.223 }, "front_bottom": { "hue": 27.291, "saturation": 0.253, "lightness": 0.291, "lightness_spread": 0.195 }, "front_top_full": { "hue": 29.453, "saturation": 0.179, "lightness": 0.466, "lightness_spread": 0.234 }, "front_bottom_full": { "hue": 27.081, "saturation": 0.307, "lightness": 0.218, "lightness_spread": 0.073 }, "back": { "hue": 28.492, "saturation": 0.213, "lightness": 0.381, "lightness_spread": 0.246 }, "spine": { "hue": 27.539, "saturation": 0.281, "lightness": 0.281, "lightness_spread": 0.106 } } },
|
|
68
|
+
"tropical.jpg": { width: 2560, height: 1440, regions: { "front_top": { "hue": 184.914, "saturation": 0.683, "lightness": 0.465, "lightness_spread": 0.213 }, "front_bottom": { "hue": 147.063, "saturation": 0.477, "lightness": 0.24, "lightness_spread": 0.146 }, "front_top_full": { "hue": 190.393, "saturation": 0.768, "lightness": 0.509, "lightness_spread": 0.064 }, "front_bottom_full": { "hue": 164.906, "saturation": 0.488, "lightness": 0.287, "lightness_spread": 0.153 }, "back": { "hue": 152.551, "saturation": 0.502, "lightness": 0.273, "lightness_spread": 0.219 }, "spine": { "hue": 166.024, "saturation": 0.519, "lightness": 0.421, "lightness_spread": 0.212 } } },
|
|
69
|
+
"vineyard.jpg": { width: 5272, height: 3948, regions: { "front_top": { "hue": 212.221, "saturation": 0.438, "lightness": 0.741, "lightness_spread": 0.102 }, "front_bottom": { "hue": 62.602, "saturation": 0.623, "lightness": 0.197, "lightness_spread": 0.086 }, "front_top_full": { "hue": 210.808, "saturation": 0.413, "lightness": 0.808, "lightness_spread": 0.091 }, "front_bottom_full": { "hue": 63.029, "saturation": 0.628, "lightness": 0.19, "lightness_spread": 0.079 }, "back": { "hue": 82.509, "saturation": 0.527, "lightness": 0.391, "lightness_spread": 0.239 }, "spine": { "hue": 76.283, "saturation": 0.491, "lightness": 0.406, "lightness_spread": 0.264 } } },
|
|
70
|
+
"wasteland.jpg": { width: 5474, height: 3649, regions: { "front_top": { "hue": 214.698, "saturation": 0.276, "lightness": 0.268, "lightness_spread": 0.14 }, "front_bottom": { "hue": 26.97, "saturation": 0.2, "lightness": 0.161, "lightness_spread": 0.065 }, "front_top_full": { "hue": 213.884, "saturation": 0.299, "lightness": 0.237, "lightness_spread": 0.122 }, "front_bottom_full": { "hue": 25.05, "saturation": 0.231, "lightness": 0.167, "lightness_spread": 0.053 }, "back": { "hue": 210.06, "saturation": 0.186, "lightness": 0.254, "lightness_spread": 0.15 }, "spine": { "hue": 339.732, "saturation": 0.204, "lightness": 0.283, "lightness_spread": 0.148 } } },
|
|
71
|
+
"wilderness.jpg": { width: 4032, height: 3024, regions: { "front_top": { "hue": 215.436, "saturation": 0.233, "lightness": 0.719, "lightness_spread": 0.101 }, "front_bottom": { "hue": 31.604, "saturation": 0.489, "lightness": 0.502, "lightness_spread": 0.141 }, "front_top_full": { "hue": 215.056, "saturation": 0.25, "lightness": 0.761, "lightness_spread": 0.044 }, "front_bottom_full": { "hue": 31.914, "saturation": 0.46, "lightness": 0.521, "lightness_spread": 0.121 }, "back": { "hue": 32.365, "saturation": 0.358, "lightness": 0.582, "lightness_spread": 0.185 }, "spine": { "hue": 30.638, "saturation": 0.33, "lightness": 0.611, "lightness_spread": 0.158 } } },
|
|
72
|
+
"work.jpg": { width: 5184, height: 3456, regions: { "front_top": { "hue": 201.939, "saturation": 0.574, "lightness": 0.963, "lightness_spread": 0.06 }, "front_bottom": { "hue": 204.081, "saturation": 0.266, "lightness": 0.569, "lightness_spread": 0.315 }, "front_top_full": { "hue": 207.197, "saturation": 0.595, "lightness": 0.983, "lightness_spread": 0.014 }, "front_bottom_full": { "hue": 236.915, "saturation": 0.249, "lightness": 0.667, "lightness_spread": 0.228 }, "back": { "hue": 206.291, "saturation": 0.448, "lightness": 0.818, "lightness_spread": 0.281 }, "spine": { "hue": 214.079, "saturation": 0.455, "lightness": 0.857, "lightness_spread": 0.271 } } },
|
|
72
73
|
};
|
|
73
74
|
//# sourceMappingURL=builtin_bg_regions.js.map
|
package/dist/image_regions.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { GetDimensionsResult } from './dimensions.js';
|
|
2
2
|
import type { RegionStats, ImageRegions } from './design.js';
|
|
3
|
+
import type { BuiltinBg } from './generated/builtin_bg_regions.js';
|
|
3
4
|
/** Average a rectangle of pixel data into a RegionStats — saturation-weighted circular mean
|
|
4
5
|
* for hue (biases toward colorful pixels over a muddy gray average), plain mean for
|
|
5
6
|
* saturation/lightness, plus the lightness standard deviation (lightness_spread) — a region
|
|
@@ -19,10 +20,19 @@ export declare function analyze_rect(data: Uint8ClampedArray, img_w: number, img
|
|
|
19
20
|
* pass null to skip that (front_top_full/front_bottom_full/back/spine all come back null).
|
|
20
21
|
*/
|
|
21
22
|
export declare function analyze_pixel_regions(data: Uint8ClampedArray, width: number, height: number, dims: GetDimensionsResult | null): ImageRegions;
|
|
22
|
-
/**
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
|
|
27
|
-
|
|
23
|
+
/** Path (relative to the assets root) of the preview-sized copies of the builtin backgrounds —
|
|
24
|
+
* 2700px wide, ~380KB, for rendering previews without downloading the original. Join a
|
|
25
|
+
* builtin's filename onto it; the filename is the same ID as the original's. Generated by
|
|
26
|
+
* .bin/gen_bg_thumbnails, whose header explains the size */
|
|
27
|
+
export declare const BG_PREVIEW_DIR = "backgrounds/previews_2700/";
|
|
28
|
+
/** Baked metadata for a builtin background (assets/backgrounds/<filename>) — its original's pixel
|
|
29
|
+
* size and its precomputed ImageRegions (see builtin_bg_regions.ts for how/why these are baked
|
|
30
|
+
* in). Returns null for anything not in the table */
|
|
31
|
+
export declare function get_builtin_bg(filename: string): BuiltinBg | null;
|
|
32
|
+
/** Precomputed ImageRegions for a builtin background, looked up by its filename (its ID) alone —
|
|
33
|
+
* so they apply whatever copy of it is being rendered, the original or the preview-sized one in
|
|
34
|
+
* BG_PREVIEW_DIR. They include the full-wrap regions (sampled against a 6x9 reference cover).
|
|
35
|
+
* Returns null for anything not in the table, in which case callers fall back to
|
|
36
|
+
* analyze_pixel_regions() against the actual decoded image */
|
|
37
|
+
export declare function get_builtin_bg_regions(filename: string): ImageRegions | null;
|
|
28
38
|
//# sourceMappingURL=image_regions.d.ts.map
|
package/dist/image_regions.js
CHANGED
|
@@ -123,13 +123,23 @@ export function analyze_pixel_regions(data, width, height, dims) {
|
|
|
123
123
|
}
|
|
124
124
|
return { front_top, front_bottom, front_top_full, front_bottom_full, back, spine };
|
|
125
125
|
}
|
|
126
|
-
/**
|
|
127
|
-
*
|
|
128
|
-
*
|
|
129
|
-
*
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
126
|
+
/** Path (relative to the assets root) of the preview-sized copies of the builtin backgrounds —
|
|
127
|
+
* 2700px wide, ~380KB, for rendering previews without downloading the original. Join a
|
|
128
|
+
* builtin's filename onto it; the filename is the same ID as the original's. Generated by
|
|
129
|
+
* .bin/gen_bg_thumbnails, whose header explains the size */
|
|
130
|
+
export const BG_PREVIEW_DIR = 'backgrounds/previews_2700/';
|
|
131
|
+
/** Baked metadata for a builtin background (assets/backgrounds/<filename>) — its original's pixel
|
|
132
|
+
* size and its precomputed ImageRegions (see builtin_bg_regions.ts for how/why these are baked
|
|
133
|
+
* in). Returns null for anything not in the table */
|
|
134
|
+
export function get_builtin_bg(filename) {
|
|
135
|
+
return Object.hasOwn(BUILTIN_BG_REGIONS, filename) ? BUILTIN_BG_REGIONS[filename] : null;
|
|
136
|
+
}
|
|
137
|
+
/** Precomputed ImageRegions for a builtin background, looked up by its filename (its ID) alone —
|
|
138
|
+
* so they apply whatever copy of it is being rendered, the original or the preview-sized one in
|
|
139
|
+
* BG_PREVIEW_DIR. They include the full-wrap regions (sampled against a 6x9 reference cover).
|
|
140
|
+
* Returns null for anything not in the table, in which case callers fall back to
|
|
141
|
+
* analyze_pixel_regions() against the actual decoded image */
|
|
142
|
+
export function get_builtin_bg_regions(filename) {
|
|
143
|
+
return get_builtin_bg(filename)?.regions ?? null;
|
|
134
144
|
}
|
|
135
145
|
//# sourceMappingURL=image_regions.js.map
|
package/dist/index.d.ts
CHANGED
|
@@ -28,7 +28,8 @@ export { SCHEMA_VERSION, RENDER_VERSION, SCHEMA_DEFAULTS, FORM_DEFAULTS } from '
|
|
|
28
28
|
export { warn_unknown } from './utils.js';
|
|
29
29
|
export { build_schema, curly_quotes, parse_font_family, normalize_font_family, font_families_in_form } from './form_schema.js';
|
|
30
30
|
export type { CustomFontStyle } from './form_schema.js';
|
|
31
|
-
export { analyze_pixel_regions, get_builtin_bg_regions } from './image_regions.js';
|
|
31
|
+
export { analyze_pixel_regions, get_builtin_bg, get_builtin_bg_regions, BG_PREVIEW_DIR } from './image_regions.js';
|
|
32
|
+
export type { BuiltinBg } from './generated/builtin_bg_regions.js';
|
|
32
33
|
export { derive_colors, hex_override_to_hsl, hex_to_hsl, is_dark_color } from './colors.js';
|
|
33
34
|
export type { DerivedColors } from './colors.js';
|
|
34
35
|
export type { FontSizes } from './font_sizes.js';
|
|
@@ -61,7 +62,7 @@ export { frame_image, frame_asset_path } from './frame.js';
|
|
|
61
62
|
* image_regions, when provided, is passed straight through to resolve_colors() to fill in any
|
|
62
63
|
* color fields the schema left unset (see design.ts) — this function does no image decoding
|
|
63
64
|
* itself (stays pure/no I/O); generator-node/generator-web compute image_regions (via
|
|
64
|
-
*
|
|
65
|
+
* the builtin lookups or a live analyze_pixel_regions decode) and pass it in.
|
|
65
66
|
*/
|
|
66
67
|
export declare function build(schema: CoverSchema, image?: {
|
|
67
68
|
data: Uint8Array;
|
package/dist/index.js
CHANGED
|
@@ -31,7 +31,7 @@ export { make_blank_form_values } from './form_state.js';
|
|
|
31
31
|
export { SCHEMA_VERSION, RENDER_VERSION, SCHEMA_DEFAULTS, FORM_DEFAULTS } from './defaults.js';
|
|
32
32
|
export { warn_unknown } from './utils.js';
|
|
33
33
|
export { build_schema, curly_quotes, parse_font_family, normalize_font_family, font_families_in_form } from './form_schema.js';
|
|
34
|
-
export { analyze_pixel_regions, get_builtin_bg_regions } from './image_regions.js';
|
|
34
|
+
export { analyze_pixel_regions, get_builtin_bg, get_builtin_bg_regions, BG_PREVIEW_DIR } from './image_regions.js';
|
|
35
35
|
export { derive_colors, hex_override_to_hsl, hex_to_hsl, is_dark_color } from './colors.js';
|
|
36
36
|
// Re-export lower-level functions needed by generator-node and generator-web
|
|
37
37
|
export { cover_schema, calculate_font_sizes, resolve_colors, darken_hsl };
|
|
@@ -82,7 +82,7 @@ function wrap_blurb_cjk(markup, han_variant, style, chain) {
|
|
|
82
82
|
* image_regions, when provided, is passed straight through to resolve_colors() to fill in any
|
|
83
83
|
* color fields the schema left unset (see design.ts) — this function does no image decoding
|
|
84
84
|
* itself (stays pure/no I/O); generator-node/generator-web compute image_regions (via
|
|
85
|
-
*
|
|
85
|
+
* the builtin lookups or a live analyze_pixel_regions decode) and pass it in.
|
|
86
86
|
*/
|
|
87
87
|
export async function build(schema, image, frame_fn, frame_data, templates = DEFAULT_TEMPLATES, image_regions) {
|
|
88
88
|
// Resolve spine text — undefined means derive from titles/author; '' means explicitly empty
|