diff --git a/media/attribution.js b/media/attribution.js
index 1c96ab07..42db1f3f 100644
--- a/media/attribution.js
+++ b/media/attribution.js
@@ -1340,6 +1340,19 @@ const attributionData = {
"chemicalcrux"
]
},
+ {
+ prefix: "./media/buildings/Times Square NYE/",
+ all: null,
+ authors: [
+ "chemicalcrux"
+ ],
+ owners: [
+ "times-square-nye"
+ ],
+ citations: [
+ "https://www.timessquarenyc.org/times-square-new-years-eve/nye-history-times-square-ball"
+ ]
+ },
{
prefix: "./media/clothing/Boots/",
files: [
@@ -27554,6 +27567,10 @@ const attributionData = {
"name": "Michael Berretta",
"url": "https://www.furaffinity.net/user/michaelberretta1997/"
},
+ "times-square-nye": {
+ "name": "Times Square NYE",
+ "url": "https://www.timessquarenyc.org/"
+ },
}
}
diff --git a/media/buildings/Times Square NYE/2022-Angled.svg b/media/buildings/Times Square NYE/2022-Angled.svg
new file mode 100644
index 00000000..8f84b7fa
--- /dev/null
+++ b/media/buildings/Times Square NYE/2022-Angled.svg
@@ -0,0 +1,1951 @@
+
+
diff --git a/media/buildings/Times Square NYE/2022-Back.svg b/media/buildings/Times Square NYE/2022-Back.svg
new file mode 100644
index 00000000..06d85ce2
--- /dev/null
+++ b/media/buildings/Times Square NYE/2022-Back.svg
@@ -0,0 +1,63 @@
+
+
diff --git a/media/buildings/Times Square NYE/2022-Corner.svg b/media/buildings/Times Square NYE/2022-Corner.svg
new file mode 100644
index 00000000..0b4737ce
--- /dev/null
+++ b/media/buildings/Times Square NYE/2022-Corner.svg
@@ -0,0 +1,2086 @@
+
+
diff --git a/media/buildings/Times Square NYE/2022-Front.svg b/media/buildings/Times Square NYE/2022-Front.svg
new file mode 100644
index 00000000..b2eca5dc
--- /dev/null
+++ b/media/buildings/Times Square NYE/2022-Front.svg
@@ -0,0 +1,1891 @@
+
+
diff --git a/media/buildings/Times Square NYE/2022-Side.svg b/media/buildings/Times Square NYE/2022-Side.svg
new file mode 100644
index 00000000..de66ffdb
--- /dev/null
+++ b/media/buildings/Times Square NYE/2022-Side.svg
@@ -0,0 +1,115 @@
+
+
diff --git a/media/buildings/Times Square NYE/2022-Top.svg b/media/buildings/Times Square NYE/2022-Top.svg
new file mode 100644
index 00000000..109dc0da
--- /dev/null
+++ b/media/buildings/Times Square NYE/2022-Top.svg
@@ -0,0 +1,364 @@
+
+
diff --git a/media/buildings/Times Square NYE/Ball-Angled.svg b/media/buildings/Times Square NYE/Ball-Angled.svg
new file mode 100644
index 00000000..a14113f6
--- /dev/null
+++ b/media/buildings/Times Square NYE/Ball-Angled.svg
@@ -0,0 +1,494 @@
+
+
diff --git a/media/buildings/Times Square NYE/Ball-Back.svg b/media/buildings/Times Square NYE/Ball-Back.svg
new file mode 100644
index 00000000..a7bcbf75
--- /dev/null
+++ b/media/buildings/Times Square NYE/Ball-Back.svg
@@ -0,0 +1,488 @@
+
+
diff --git a/media/buildings/Times Square NYE/Ball-Corner.svg b/media/buildings/Times Square NYE/Ball-Corner.svg
new file mode 100644
index 00000000..159bbf43
--- /dev/null
+++ b/media/buildings/Times Square NYE/Ball-Corner.svg
@@ -0,0 +1,485 @@
+
+
diff --git a/media/buildings/Times Square NYE/Ball-Front.svg b/media/buildings/Times Square NYE/Ball-Front.svg
new file mode 100644
index 00000000..35496314
--- /dev/null
+++ b/media/buildings/Times Square NYE/Ball-Front.svg
@@ -0,0 +1,488 @@
+
+
diff --git a/media/buildings/Times Square NYE/Ball-Side.svg b/media/buildings/Times Square NYE/Ball-Side.svg
new file mode 100644
index 00000000..f7f0db1f
--- /dev/null
+++ b/media/buildings/Times Square NYE/Ball-Side.svg
@@ -0,0 +1,521 @@
+
+
diff --git a/media/buildings/Times Square NYE/Ball-Top.svg b/media/buildings/Times Square NYE/Ball-Top.svg
new file mode 100644
index 00000000..2207b62e
--- /dev/null
+++ b/media/buildings/Times Square NYE/Ball-Top.svg
@@ -0,0 +1,515 @@
+
+
diff --git a/media/buildings/Times Square NYE/Tower-Angled.svg b/media/buildings/Times Square NYE/Tower-Angled.svg
new file mode 100644
index 00000000..404c2b79
--- /dev/null
+++ b/media/buildings/Times Square NYE/Tower-Angled.svg
@@ -0,0 +1,49 @@
+
+
diff --git a/media/buildings/Times Square NYE/Tower-Back.svg b/media/buildings/Times Square NYE/Tower-Back.svg
new file mode 100644
index 00000000..404c2b79
--- /dev/null
+++ b/media/buildings/Times Square NYE/Tower-Back.svg
@@ -0,0 +1,49 @@
+
+
diff --git a/media/buildings/Times Square NYE/Tower-Corner.svg b/media/buildings/Times Square NYE/Tower-Corner.svg
new file mode 100644
index 00000000..404c2b79
--- /dev/null
+++ b/media/buildings/Times Square NYE/Tower-Corner.svg
@@ -0,0 +1,49 @@
+
+
diff --git a/media/buildings/Times Square NYE/Tower-Front.svg b/media/buildings/Times Square NYE/Tower-Front.svg
new file mode 100644
index 00000000..404c2b79
--- /dev/null
+++ b/media/buildings/Times Square NYE/Tower-Front.svg
@@ -0,0 +1,49 @@
+
+
diff --git a/media/buildings/Times Square NYE/Tower-Side.svg b/media/buildings/Times Square NYE/Tower-Side.svg
new file mode 100644
index 00000000..404c2b79
--- /dev/null
+++ b/media/buildings/Times Square NYE/Tower-Side.svg
@@ -0,0 +1,49 @@
+
+
diff --git a/media/buildings/Times Square NYE/Tower-Top.svg b/media/buildings/Times Square NYE/Tower-Top.svg
new file mode 100644
index 00000000..03341af8
--- /dev/null
+++ b/media/buildings/Times Square NYE/Tower-Top.svg
@@ -0,0 +1,45 @@
+
+
diff --git a/presets/buildings.js b/presets/buildings.js
index b4ecfb3e..d23c0782 100644
--- a/presets/buildings.js
+++ b/presets/buildings.js
@@ -345,6 +345,7 @@ function makeBuildings() {
/* ***Transmission Towers*** */ results.push(makeModel({"name": "Transmission Towers", "kind": "buildings", "forms": [{"name": "Lattice Tower", "views": [{"name": "Front", "height": 46.617923736572266, "extra": 1.0011498212012875, "bottom": 0.0011471830904092298}, {"name": "Angled", "height": 46.617923736572266, "extra": 1.0010523109243699, "bottom": 0.0010501008591581864}, {"name": "Side", "height": 46.617923736572266, "extra": 1.001149673061723, "bottom": 0.0011470356297943348}, {"name": "Top", "height": 8.258213996887207, "extra": 1.0025463078703705, "bottom": 0.0025334062060477845}]}, {"name": "Concrete Tower", "views": [{"name": "Front", "height": 24.613733291625977, "extra": 1.0011611044417765, "bottom": 0.0011584143616551604}, {"name": "Angled", "height": 24.613733291625977, "extra": 1.0011987954902433, "bottom": 0.0011959281437125874}, {"name": "Side", "height": 24.613733291625977, "extra": 1.0012004801920769, "bottom": 0.0011976047904191617}, {"name": "Top", "height": 2.0, "extra": 1.0047247101394032, "bottom": 0.004680482295089333}]}]}));
/* ***Fences*** */ results.push(makeModel({"name": "Fences", "kind": "buildings", "forms": [{"name": "Picket", "views": [{"name": "Front", "height": 1.198826789855957, "extra": 1.0032463354037267, "bottom": 0.003225393982374819}, {"name": "Angled", "height": 1.198826789855957, "extra": 1.0030113600426571, "bottom": 0.0029933320416477963}, {"name": "Corner", "height": 1.198826789855957, "extra": 1.0043504818571962, "bottom": 0.004312954992306321}, {"name": "Side", "height": 1.198826789855957, "extra": 1.0012004801920769, "bottom": 0.0011976047904191617}, {"name": "Top", "height": 0.12314067780971527, "extra": 1.0294348106917595, "bottom": 0.027798333333333345}]}, {"name": "Wrought Iron", "views": [{"name": "Front", "height": 0.9687931537628174, "extra": 1.0031269052863436, "bottom": 0.003107471746679822}, {"name": "Angled", "height": 0.9687931537628174, "extra": 1.0039823942771011, "bottom": 0.003950925987021264}, {"name": "Corner", "height": 0.9687931537628174, "extra": 1.0022842993630574, "bottom": 0.002273910777177546}, {"name": "Side", "height": 0.9687931537628174, "extra": 1.0009630172676205, "bottom": 0.0009611660286552252}, {"name": "Top", "height": 0.07901737093925476, "extra": 1.0543478819116272, "bottom": 0.049019653258358886}]}]}));
/* ***Doors*** */ results.push(makeModel({"name": "Doors", "kind": "buildings", "forms": [{"name": "6 Panel Door", "views": [{"name": "Front", "height": 2.0320000648498535, "mass": 11.793399810791016}, {"name": "Angled", "height": 2.0320000648498535, "mass": 11.793399810791016}, {"name": "Side", "height": 2.0320000648498535, "mass": 11.793399810791016}, {"name": "Top", "height": 0.03492499887943268, "mass": 11.793399810791016}]}, {"name": "French Door", "views": [{"name": "Front", "height": 2.0320000648498535, "mass": 31.75149917602539}, {"name": "Angled", "height": 2.0320000648498535, "mass": 31.75149917602539}, {"name": "Side", "height": 2.0320000648498535, "mass": 31.75149917602539}, {"name": "Top", "height": 0.03492499887943268, "mass": 31.75149917602539}]}, {"name": "Fire Door", "views": [{"name": "Front", "height": 2.0320000648498535, "mass": 54.54545593261719}, {"name": "Angled", "height": 2.0320000648498535, "mass": 54.54545593261719}, {"name": "Side", "height": 2.0320000648498535, "mass": 54.54545593261719}, {"name": "Top", "height": 0.10518216341733932, "mass": 54.54545593261719}]}]}));
+ /* ***Times Square NYE*** */ results.push(makeModel({"name": "Times Square NYE", "kind": "buildings", "forms": [{"name": "Ball", "views": [{"name": "Front", "height": 3.4989547729492188, "mass": 5397.72705078125, "extra": 1.0016937456872217, "bottom": 0.0016880275085964648}, {"name": "Angled", "height": 3.4989547729492188, "mass": 5397.72705078125, "extra": 1.0025409836065575, "bottom": 0.00252813570380047}, {"name": "Corner", "height": 3.4989547729492188, "mass": 5397.72705078125, "extra": 1.0018165582086815, "bottom": 0.00180998233215548}, {"name": "Side", "height": 3.4989547729492188, "mass": 5397.72705078125, "extra": 1.001850383633639, "bottom": 0.001843561043274757}, {"name": "Back", "height": 3.4989547729492188, "mass": 5397.72705078125, "extra": 1.0016623910180016, "bottom": 0.0016568822456753673}, {"name": "Top", "height": 3.657600164413452, "mass": 5397.72705078125, "extra": 1.001771054685155, "bottom": 0.001764803557935817}]}, {"name": "Tower", "views": [{"name": "Front", "height": 23.458213806152344, "extra": 1.0016112545018008, "bottom": 0.0016060788980911244}, {"name": "Angled", "height": 23.458213806152344, "extra": 1.0016112545018008, "bottom": 0.0016060788980911244}, {"name": "Corner", "height": 23.458213806152344, "extra": 1.0016112545018008, "bottom": 0.0016060788980911244}, {"name": "Side", "height": 23.458213806152344, "extra": 1.0016112545018008, "bottom": 0.0016060788980911244}, {"name": "Back", "height": 23.458213806152344, "extra": 1.0016112545018008, "bottom": 0.0016060788980911244}, {"name": "Top", "height": 1.5605759620666504, "extra": 1.0015567074184117, "bottom": 0.0015518757853168342}]}, {"name": "2022", "views": [{"name": "Front", "height": 2.1339330673217773, "extra": 1.003530708012506, "bottom": 0.0035059510336938327}, {"name": "Angled", "height": 2.1339330673217773, "extra": 1.0047998012242747, "bottom": 0.004754163148077668}, {"name": "Corner", "height": 2.1339330673217773, "extra": 1.0028325, "bottom": 0.002816544276672584}, {"name": "Side", "height": 2.1339330673217773, "extra": 1.001694837935174, "bottom": 0.0016891123916577266}, {"name": "Back", "height": 2.1339330673217773, "extra": 1.003530708012506, "bottom": 0.0035059510336938327}, {"name": "Top", "height": 0.4862631559371948, "extra": 1.0157526272448099, "bottom": 0.01527149491119562}]}]}));
/* ***INSERT HERE*** */
results.sort((b1, b2) => {
diff --git a/scripts/luts/base-lut.png b/scripts/luts/base-lut.png
deleted file mode 100644
index b321f3c3..00000000
Binary files a/scripts/luts/base-lut.png and /dev/null differ
diff --git a/scripts/luts/highlight-lut.png b/scripts/luts/highlight-lut.png
deleted file mode 100644
index accdc675..00000000
Binary files a/scripts/luts/highlight-lut.png and /dev/null differ
diff --git a/scripts/luts/vivid-lut.png b/scripts/luts/vivid-lut.png
deleted file mode 100644
index 3300026f..00000000
Binary files a/scripts/luts/vivid-lut.png and /dev/null differ
diff --git a/scripts/process-model.py b/scripts/process-model.py
index 820abcde..f6616a36 100644
--- a/scripts/process-model.py
+++ b/scripts/process-model.py
@@ -8,17 +8,19 @@ import pathlib
from xml.dom import minidom
# an affront to god
-def combine(base_path, highlight_path, vivid_path, output_path):
+def combine(base_path, dark_path, medium_path, light_path, output_path):
base = open(base_path, "r", encoding="utf-8").read()
- highlight = open(highlight_path, "r", encoding="utf-8").read()
- vivid = open(vivid_path, "r", encoding="utf-8").read()
+ dark = open(dark_path, "r", encoding="utf-8").read()
+ medium = open(medium_path, "r", encoding="utf-8").read()
+ light = open(light_path, "r", encoding="utf-8").read()
base_data = re.search("", "" + base_data + "\n" + highlight_data)
+ dark_data = re.search("", "" + base_data + "\n" + dark_data + "\n" + medium_data)
with open(output_path, "w", encoding="utf-8") as f:
- f.write(vivid_data)
+ f.write(light_data)
return subprocess.Popen([INKSCAPE, "--without-gui", "--export-plain-svg=" + output_path, "--export-area-drawing", output_path], shell=False)
@@ -50,8 +52,9 @@ outputdir = macrodir.joinpath("media").joinpath(category).joinpath(group_name)
os.makedirs(outputdir, exist_ok=True)
base_lut = configdir.joinpath("luts").joinpath("base-lut.png").__str__()
-highlight_lut = configdir.joinpath("luts").joinpath("highlight-lut.png").__str__()
-vivid_lut = configdir.joinpath("luts").joinpath("vivid-lut.png").__str__()
+dark_lut = configdir.joinpath("luts").joinpath("dark-lut.png").__str__()
+medium_lut = configdir.joinpath("luts").joinpath("medium-lut.png").__str__()
+light_lut = configdir.joinpath("luts").joinpath("light-lut.png").__str__()
for data in all_data["forms"]:
name = data["name"]
@@ -66,15 +69,17 @@ for data in all_data["forms"]:
continue
input_base = sourcedir.joinpath(name + "-" + view_name + "-base.bmp").__str__()
- input_highlight = sourcedir.joinpath(name + "-" + view_name + "-highlight.bmp").__str__()
- input_vivid = sourcedir.joinpath(name + "-" + view_name + "-vivid.bmp").__str__()
+ input_dark = sourcedir.joinpath(name + "-" + view_name + "-dark.bmp").__str__()
+ input_medium = sourcedir.joinpath(name + "-" + view_name + "-medium.bmp").__str__()
+ input_light = sourcedir.joinpath(name + "-" + view_name + "-light.bmp").__str__()
input_noline = sourcedir.joinpath(name + "-" + view_name + "-noline.bmp").__str__()
procs = []
- procs.append(subprocess.Popen(["magick", "convert", input, base_lut, "-channel", "RGB", "-clut", "-background", "#FFFFFF", "-flatten", input_base], shell=False))
- procs.append(subprocess.Popen(["magick", "convert", input, highlight_lut, "-channel", "RGB", "-clut", "-background", "#FFFFFF", "-flatten", input_highlight], shell=False))
- procs.append(subprocess.Popen(["magick", "convert", input, vivid_lut, "-channel", "RGB", "-clut", "-background", "#FFFFFF", "-flatten", input_vivid], shell=False))
+ procs.append(subprocess.Popen(["magick", "convert", input, "-channel", "RGB", "-evaluate", "set", "0", "-channel", "RGB", "-modulate", "1000,0", "-background", "#FFFFFF", "-flatten", input_base], shell=False))
+ procs.append(subprocess.Popen(["magick", "convert", input, "-channel", "GB", "-evaluate", "set", "0", "-channel", "RGB", "-modulate", "1000,0", "-background", "#FFFFFF", "-negate", "-flatten", input_dark], shell=False))
+ procs.append(subprocess.Popen(["magick", "convert", input, "-channel", "RB", "-evaluate", "set", "0", "-channel", "RGB", "-modulate", "1000,0", "-background", "#FFFFFF", "-negate", "-flatten", input_medium], shell=False))
+ procs.append(subprocess.Popen(["magick", "convert", input, "-channel", "RG", "-evaluate", "set", "0", "-channel", "RGB", "-modulate", "1000,0", "-background", "#FFFFFF", "-negate", "-flatten", input_light], shell=False))
# to correct for extra height from lines
procs.append(subprocess.Popen(["magick", "convert", input_noline_raw, base_lut, "-channel", "RGB", "-clut", "-background", "#FFFFFF", "-flatten", input_noline], shell=False))
@@ -82,14 +87,16 @@ for data in all_data["forms"]:
[proc.wait() for proc in procs]
output_base = sourcedir.joinpath(name + "-" + view_name + "-base.svg").__str__()
- output_highlight = sourcedir.joinpath(name + "-" + view_name + "-highlight.svg").__str__()
- output_vivid = sourcedir.joinpath(name + "-" + view_name + "-vivid.svg").__str__()
+ output_dark = sourcedir.joinpath(name + "-" + view_name + "-dark.svg").__str__()
+ output_medium = sourcedir.joinpath(name + "-" + view_name + "-medium.svg").__str__()
+ output_light = sourcedir.joinpath(name + "-" + view_name + "-light.svg").__str__()
output_noline = sourcedir.joinpath(name + "-" + view_name + "-noline.svg").__str__()
procs = []
procs.append(subprocess.Popen([POTRACE, input_base, "-b", "svg", "-o", output_base], shell=False))
- procs.append(subprocess.Popen([POTRACE, input_highlight, "-b", "svg", "-C", "#1a1a1a", "-o", output_highlight], shell=False))
- procs.append(subprocess.Popen([POTRACE, input_vivid, "-b", "svg", "-C", "#333333", "-o", output_vivid], shell=False))
+ procs.append(subprocess.Popen([POTRACE, input_dark, "-b", "svg", "-C", "#1a1a1a", "-o", output_dark], shell=False))
+ procs.append(subprocess.Popen([POTRACE, input_medium, "-b", "svg", "-C", "#333333", "-o", output_medium], shell=False))
+ procs.append(subprocess.Popen([POTRACE, input_light, "-b", "svg", "-C", "#4d4d4d", "-o", output_light], shell=False))
procs.append(subprocess.Popen([POTRACE, input_noline, "-b", "svg", "-C", "#333333", "-o", output_noline], shell=False))
[proc.wait() for proc in procs]
@@ -98,8 +105,8 @@ for data in all_data["forms"]:
noline_result = sourcedir.joinpath(name + "-" + view_name + "-noline_processed.svg").__str__()
- procs.append(combine(output_base, output_highlight, output_vivid, result))
- procs.append(combine(output_noline, output_noline, output_noline, noline_result))
+ procs.append(combine(output_base, output_dark, output_medium, output_light, result))
+ procs.append(combine(output_noline, output_noline, output_noline, output_noline, noline_result))
[proc.wait() for proc in procs]