updated images data
This commit is contained in:
parent
932f2200e3
commit
8eb9ab9477
|
@ -1,132 +1,653 @@
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"title": "1 MeredithMonk 1972 Paris",
|
"title": "Scores",
|
||||||
"parent_dir": "images",
|
"parent_dir": "images",
|
||||||
"media": "1_MeredithMonk_1972_Paris",
|
"media": "1_Scores",
|
||||||
|
"order": "1",
|
||||||
"images": [
|
"images": [
|
||||||
{
|
{
|
||||||
"title": "MeredithMonk 1972 ParisScore01",
|
"title": "Handwritten Score for 'Paris' (1972)",
|
||||||
"media": "MeredithMonk_1972_ParisScore01.jpg",
|
"details": "Page 1",
|
||||||
"thumb": "MeredithMonk_1972_ParisScore01.thumb.jpg"
|
"media": "1_Handwritten Score for 'Paris' (1972)_Page 1.png",
|
||||||
|
"thumb": "1_Handwritten Score for 'Paris' (1972)_Page 1.thumb.png"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "MeredithMonk 1972 ParisScore02",
|
"title": "Handwritten Score for 'Paris' (1972)",
|
||||||
"media": "MeredithMonk_1972_ParisScore02.jpg",
|
"details": "Page 2",
|
||||||
"thumb": "MeredithMonk_1972_ParisScore02.thumb.jpg"
|
"media": "2_Handwritten Score for 'Paris' (1972)_Page 2.png",
|
||||||
|
"thumb": "2_Handwritten Score for 'Paris' (1972)_Page 2.thumb.png"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "MeredithMonk 1972 ParisScore03",
|
"title": "Handwritten Score for 'Paris' (1972)",
|
||||||
"media": "MeredithMonk_1972_ParisScore03.jpg",
|
"details": "Page 3",
|
||||||
"thumb": "MeredithMonk_1972_ParisScore03.thumb.jpg"
|
"media": "3_Handwritten Score for 'Paris' (1972)_Page 3.png",
|
||||||
|
"thumb": "3_Handwritten Score for 'Paris' (1972)_Page 3.thumb.png"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "MeredithMonk 1972 ParisScore04",
|
"title": "Handwritten Score for 'Paris' (1972)",
|
||||||
"media": "MeredithMonk_1972_ParisScore04.jpg",
|
"details": "Page 4",
|
||||||
"thumb": "MeredithMonk_1972_ParisScore04.thumb.jpg"
|
"media": "4_Handwritten Score for 'Paris' (1972)_Page 4.png",
|
||||||
|
"thumb": "4_Handwritten Score for 'Paris' (1972)_Page 4.thumb.png"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "2 Series of Watercolors (Untitled Studies), 1970-1986",
|
"title": "Watercolors - Untitled Studies (1970-1986)",
|
||||||
"parent_dir": "images",
|
"parent_dir": "images",
|
||||||
"media": "2_Series of Watercolors (Untitled Studies), 1970-1986. (photographed 2007 Eileen Costa)",
|
"media": "2_Watercolors - Untitled Studies (1970-1986)",
|
||||||
|
"order": "2",
|
||||||
"images": [
|
"images": [
|
||||||
{
|
{
|
||||||
"title": "001",
|
"title": "Study 1",
|
||||||
"media": "001.jpg",
|
"details": "Series of Watercolors",
|
||||||
"thumb": "001.thumb.jpg"
|
"media": "1_Study 1_Series of Watercolors.jpg",
|
||||||
|
"thumb": "1_Study 1_Series of Watercolors.thumb.jpg"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "002",
|
"title": "Study 2",
|
||||||
"media": "002.jpg",
|
"details": "Series of Watercolors",
|
||||||
"thumb": "002.thumb.jpg"
|
"media": "2_Study 2_Series of Watercolors.jpg",
|
||||||
|
"thumb": "2_Study 2_Series of Watercolors.thumb.jpg"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "003",
|
"title": "Study 3",
|
||||||
"media": "003.jpg",
|
"details": "Series of Watercolors",
|
||||||
"thumb": "003.thumb.jpg"
|
"media": "3_Study 3_Series of Watercolors.jpg",
|
||||||
|
"thumb": "3_Study 3_Series of Watercolors.thumb.jpg"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "004",
|
"title": "Study 4",
|
||||||
"media": "004.jpg",
|
"details": "Series of Watercolors",
|
||||||
"thumb": "004.thumb.jpg"
|
"media": "4_Study 4_Series of Watercolors.jpg",
|
||||||
|
"thumb": "4_Study 4_Series of Watercolors.thumb.jpg"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "005",
|
"title": "Study 5",
|
||||||
"media": "005.jpg",
|
"details": "Series of Watercolors",
|
||||||
"thumb": "005.thumb.jpg"
|
"media": "5_Study 5_Series of Watercolors.jpg",
|
||||||
|
"thumb": "5_Study 5_Series of Watercolors.thumb.jpg"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "006",
|
"title": "Study 6",
|
||||||
"media": "006.jpg",
|
"details": "Series of Watercolors",
|
||||||
"thumb": "006.thumb.jpg"
|
"media": "6_Study 6_Series of Watercolors.jpg",
|
||||||
|
"thumb": "6_Study 6_Series of Watercolors.thumb.jpg"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "007",
|
"title": "Study 7",
|
||||||
"media": "007.jpg",
|
"details": "Series of Watercolors",
|
||||||
"thumb": "007.thumb.jpg"
|
"media": "7_Study 7_Series of Watercolors.jpg",
|
||||||
|
"thumb": "7_Study 7_Series of Watercolors.thumb.jpg"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "008",
|
"title": "Study 8",
|
||||||
"media": "008.jpg",
|
"details": "Series of Watercolors",
|
||||||
"thumb": "008.thumb.jpg"
|
"media": "8_Study 8_Series of Watercolors.jpg",
|
||||||
|
"thumb": "8_Study 8_Series of Watercolors.thumb.jpg"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "009",
|
"title": "Study 9",
|
||||||
"media": "009.jpg",
|
"details": "Series of Watercolors",
|
||||||
"thumb": "009.thumb.jpg"
|
"media": "9_Study 9_Series of Watercolors.jpg",
|
||||||
|
"thumb": "9_Study 9_Series of Watercolors.thumb.jpg"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "010",
|
"title": "Study 10",
|
||||||
"media": "010.jpg",
|
"details": "Series of Watercolors",
|
||||||
"thumb": "010.thumb.jpg"
|
"media": "10_Study 10_Series of Watercolors.jpg",
|
||||||
|
"thumb": "10_Study 10_Series of Watercolors.thumb.jpg"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "011",
|
"title": "Study 11",
|
||||||
"media": "011.jpg",
|
"details": "Series of Watercolors",
|
||||||
"thumb": "011.thumb.jpg"
|
"media": "11_Study 11_Series of Watercolors.jpg",
|
||||||
|
"thumb": "11_Study 11_Series of Watercolors.thumb.jpg"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "3 Posters",
|
"title": "Posters",
|
||||||
"parent_dir": "images",
|
"parent_dir": "images",
|
||||||
"media": "3_Posters",
|
"media": "3_Posters",
|
||||||
|
"order": "3",
|
||||||
"images": [
|
"images": [
|
||||||
{
|
{
|
||||||
"title": "04 MERCY 2002",
|
"title": "Vessel: an opera epic (1971)",
|
||||||
"media": "04_MERCY_2002.jpg",
|
"details": "site-specific locations, NYC, October 1971 Design/drawing by Meredith Monk with print by Monica Moseley",
|
||||||
"thumb": "04_MERCY_2002.thumb.jpg"
|
"media": "6_Vessel: an opera epic (1971)_site-specific locations, NYC, October 1971 Design/drawing by Meredith Monk with print by Monica Moseley.jpg",
|
||||||
|
"thumb": "6_Vessel: an opera epic (1971)_site-specific locations, NYC, October 1971 Design/drawing by Meredith Monk with print by Monica Moseley.thumb.jpg"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "122 THE GAMES",
|
"title": "Quarry: an opera in three movements (1976)",
|
||||||
"media": "122_THE_GAMES.jpg",
|
"details": "La MaMa Annex, NYC, April 1976 Design/drawing by Meredith Monk with print by Monica Moseley",
|
||||||
"thumb": "122_THE_GAMES.thumb.jpg"
|
"media": "1_Quarry: an opera in three movements (1976)_La MaMa Annex, NYC, April 1976 Design/drawing by Meredith Monk with print by Monica Moseley.jpg",
|
||||||
|
"thumb": "1_Quarry: an opera in three movements (1976)_La MaMa Annex, NYC, April 1976 Design/drawing by Meredith Monk with print by Monica Moseley.thumb.jpg"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "146 Songs from the Hill Town Hall",
|
"title": "Songs from the Hill and Tablet (1976)",
|
||||||
"media": "146_Songs_from_the_Hill_Town_Hall.jpg",
|
"details": "Town Hall, NYC, October 1976, Design/Drawing by Meredith Monk with print by Monica Moseley",
|
||||||
"thumb": "146_Songs_from_the_Hill_Town_Hall.thumb.jpg"
|
"media": "5_Songs from the Hill and Tablet (1976)_Town Hall, NYC, October 1976, Design/Drawing by Meredith Monk with print by Monica Moseley.jpg",
|
||||||
|
"thumb": "5_Songs from the Hill and Tablet (1976)_Town Hall, NYC, October 1976, Design/Drawing by Meredith Monk with print by Monica Moseley.thumb.jpg"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "153 Vessel 2",
|
"title": "The Games: a science fiction opera (1983)",
|
||||||
"media": "153_Vessel_2.jpg",
|
"details": "Schaubühne am Lehniner Platz, Berlin, Germany Designed by Meredith Monk, Ping Chong and Yoshio Yabara",
|
||||||
"thumb": "153_Vessel_2.thumb.jpg"
|
"media": "2_The Games: a science fiction opera (1983)_Schaubühne am Lehniner Platz, Berlin, Germany Designed by Meredith Monk, Ping Chong and Yoshio Yabara.jpg",
|
||||||
|
"thumb": "2_The Games: a science fiction opera (1983)_Schaubühne am Lehniner Platz, Berlin, Germany Designed by Meredith Monk, Ping Chong and Yoshio Yabara.thumb.jpg"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "57 IMPERMENANCE MAP",
|
"title": "ATLAS: an opera in three parts (1991)",
|
||||||
"media": "57_IMPERMENANCE_MAP.jpg",
|
"details": "World premiere flyer 1991",
|
||||||
"thumb": "57_IMPERMENANCE_MAP.thumb.jpg"
|
"media": "3_ATLAS: an opera in three parts (1991)_World premiere flyer 1991.png",
|
||||||
|
"thumb": "3_ATLAS: an opera in three parts (1991)_World premiere flyer 1991.thumb.png"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "ATLAS world premiere flyer 1991",
|
"title": "mercy (2002)",
|
||||||
"media": "ATLAS world premiere flyer 1991.jpg",
|
"details": "Brooklyn Academy of Music (BAM), New York, December 2002",
|
||||||
"thumb": "ATLAS world premiere flyer 1991.thumb.jpg"
|
"media": "4_mercy (2002)_Brooklyn Academy of Music (BAM), New York, December 2002.jpg",
|
||||||
|
"thumb": "4_mercy (2002)_Brooklyn Academy of Music (BAM), New York, December 2002.thumb.jpg"
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "Quarry 1976 LaMama original poster",
|
"title": "Map",
|
||||||
"media": "Quarry_1976_LaMama_original poster.jpg",
|
"parent_dir": "images",
|
||||||
"thumb": "Quarry_1976_LaMama_original poster.thumb.jpg"
|
"media": "4_Map",
|
||||||
|
"order": "4",
|
||||||
|
"images": [
|
||||||
|
{
|
||||||
|
"title": "impermanence (2008)",
|
||||||
|
"details": "Special edition print",
|
||||||
|
"media": "1_impermanence (2008)_Special edition print.jpg",
|
||||||
|
"thumb": "1_impermanence (2008)_Special edition print.thumb.jpg"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Indra's Net - Scores and Music Fragments",
|
||||||
|
"parent_dir": "images",
|
||||||
|
"media": "5_Indra's Net - Scores and Music Fragments",
|
||||||
|
"order": "5",
|
||||||
|
"images": [
|
||||||
|
{
|
||||||
|
"title": "Melody themes 1 (2019)",
|
||||||
|
"media": "59_Melody themes 1 (2019).png",
|
||||||
|
"thumb": "59_Melody themes 1 (2019).thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Melody themes 3-6 (2019)",
|
||||||
|
"media": "60_Melody themes 3-6 (2019).png",
|
||||||
|
"thumb": "60_Melody themes 3-6 (2019).thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Melody themes 5 (2019)",
|
||||||
|
"media": "61_Melody themes 5 (2019).png",
|
||||||
|
"thumb": "61_Melody themes 5 (2019).thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Melody themes 6 continued (2019)",
|
||||||
|
"media": "62_Melody themes 6 continued (2019).png",
|
||||||
|
"thumb": "62_Melody themes 6 continued (2019).thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Anthem" full score (2023)",
|
||||||
|
"details": "Page 01",
|
||||||
|
"media": "01_"Anthem" full score (2023)_Page 01.png",
|
||||||
|
"thumb": "01_"Anthem" full score (2023)_Page 01.thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Anthem" full score (2023)",
|
||||||
|
"details": "Page 02",
|
||||||
|
"media": "02_"Anthem" full score (2023)_Page 02.png",
|
||||||
|
"thumb": "02_"Anthem" full score (2023)_Page 02.thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Anthem" full score (2023)",
|
||||||
|
"details": "Page 03",
|
||||||
|
"media": "03_"Anthem" full score (2023)_ Page 03.png",
|
||||||
|
"thumb": "03_"Anthem" full score (2023)_ Page 03.thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Anthem" full score (2023)",
|
||||||
|
"details": "Page_04",
|
||||||
|
"media": "04_"Anthem" full score (2023)_Page_04.png",
|
||||||
|
"thumb": "04_"Anthem" full score (2023)_Page_04.thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Anthem" full score (2023)",
|
||||||
|
"details": "Page_05",
|
||||||
|
"media": "05_"Anthem" full score (2023)_Page_05.png",
|
||||||
|
"thumb": "05_"Anthem" full score (2023)_Page_05.thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Anthem" full score (2023)",
|
||||||
|
"details": "Page_06",
|
||||||
|
"media": "06_"Anthem" full score (2023)_Page_06.png",
|
||||||
|
"thumb": "06_"Anthem" full score (2023)_Page_06.thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Anthem" full score (2023)",
|
||||||
|
"details": "Page_07",
|
||||||
|
"media": "07_"Anthem" full score (2023)_Page_07.png",
|
||||||
|
"thumb": "07_"Anthem" full score (2023)_Page_07.thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Anthem" full score (2023)",
|
||||||
|
"details": "Page_08",
|
||||||
|
"media": "08_"Anthem" full score (2023)_Page_08.png",
|
||||||
|
"thumb": "08_"Anthem" full score (2023)_Page_08.thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Anthem" full score (2023)",
|
||||||
|
"details": "Page_09",
|
||||||
|
"media": "09_"Anthem" full score (2023)_Page_09.png",
|
||||||
|
"thumb": "09_"Anthem" full score (2023)_Page_09.thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Anthem" full score (2023)",
|
||||||
|
"details": "Page_10",
|
||||||
|
"media": "10_"Anthem" full score (2023)_Page_10.png",
|
||||||
|
"thumb": "10_"Anthem" full score (2023)_Page_10.thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": " "Anthem" full score (2023)",
|
||||||
|
"details": "Page_11",
|
||||||
|
"media": "11_ "Anthem" full score (2023)_Page_11.png",
|
||||||
|
"thumb": "11_ "Anthem" full score (2023)_Page_11.thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Anthem" full score (2023)",
|
||||||
|
"details": "Page_12",
|
||||||
|
"media": "12_"Anthem" full score (2023)_Page_12.png",
|
||||||
|
"thumb": "12_"Anthem" full score (2023)_Page_12.thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Anthem" full score (2023)",
|
||||||
|
"details": "Page_13",
|
||||||
|
"media": "13_"Anthem" full score (2023)_Page_13.png",
|
||||||
|
"thumb": "13_"Anthem" full score (2023)_Page_13.thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Anthem" full score (2023)",
|
||||||
|
"details": "Page_14",
|
||||||
|
"media": "14_"Anthem" full score (2023)_Page_14.png",
|
||||||
|
"thumb": "14_"Anthem" full score (2023)_Page_14.thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Anthem" full score (2023)",
|
||||||
|
"details": "Page_15",
|
||||||
|
"media": "15_"Anthem" full score (2023)_Page_15.png",
|
||||||
|
"thumb": "15_"Anthem" full score (2023)_Page_15.thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Anthem" full score (2023)",
|
||||||
|
"details": "Page_16",
|
||||||
|
"media": "16_"Anthem" full score (2023)_Page_16.png",
|
||||||
|
"thumb": "16_"Anthem" full score (2023)_Page_16.thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Anthem" full score (2023)",
|
||||||
|
"details": "Page_17",
|
||||||
|
"media": "17_"Anthem" full score (2023)_Page_17.png",
|
||||||
|
"thumb": "17_"Anthem" full score (2023)_Page_17.thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Anthem" full score (2023)",
|
||||||
|
"details": "Page_18",
|
||||||
|
"media": "18_"Anthem" full score (2023)_Page_18.png",
|
||||||
|
"thumb": "18_"Anthem" full score (2023)_Page_18.thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Anthem" full score (2023)",
|
||||||
|
"details": "Page_19",
|
||||||
|
"media": "19_"Anthem" full score (2023)_Page_19.png",
|
||||||
|
"thumb": "19_"Anthem" full score (2023)_Page_19.thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Anthem" full score (2023)",
|
||||||
|
"details": "Page_20",
|
||||||
|
"media": "20_"Anthem" full score (2023)_Page_20.png",
|
||||||
|
"thumb": "20_"Anthem" full score (2023)_Page_20.thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Anthem" full score (2023)",
|
||||||
|
"details": "Page_21",
|
||||||
|
"media": "21_"Anthem" full score (2023)_Page_21.png",
|
||||||
|
"thumb": "21_"Anthem" full score (2023)_Page_21.thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Anthem" full score (2023)",
|
||||||
|
"details": "Page_22",
|
||||||
|
"media": "22_"Anthem" full score (2023)_Page_22.png",
|
||||||
|
"thumb": "22_"Anthem" full score (2023)_Page_22.thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Anthem" full score (2023)",
|
||||||
|
"details": "Page_23",
|
||||||
|
"media": "23_"Anthem" full score (2023)_Page_23.png",
|
||||||
|
"thumb": "23_"Anthem" full score (2023)_Page_23.thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Anthem" full score (2023)",
|
||||||
|
"details": "Page_24",
|
||||||
|
"media": "24_"Anthem" full score (2023)_Page_24.png",
|
||||||
|
"thumb": "24_"Anthem" full score (2023)_Page_24.thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Anthem" full score (2023)",
|
||||||
|
"details": "Page_25",
|
||||||
|
"media": "25_"Anthem" full score (2023)_Page_25.png",
|
||||||
|
"thumb": "25_"Anthem" full score (2023)_Page_25.thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Anthem" full score (2023)",
|
||||||
|
"details": "Page_26",
|
||||||
|
"media": "26_"Anthem" full score (2023)_Page_26.png",
|
||||||
|
"thumb": "26_"Anthem" full score (2023)_Page_26.thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Anthem" full score (2023)",
|
||||||
|
"details": "Page_27",
|
||||||
|
"media": "27_"Anthem" full score (2023)_Page_27.png",
|
||||||
|
"thumb": "27_"Anthem" full score (2023)_Page_27.thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Anthem" full score (2023)",
|
||||||
|
"details": "Page_28",
|
||||||
|
"media": "28_"Anthem" full score (2023)_Page_28.png",
|
||||||
|
"thumb": "28_"Anthem" full score (2023)_Page_28.thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Anthem" full score (2023)",
|
||||||
|
"details": "Page_29",
|
||||||
|
"media": "29_"Anthem" full score (2023)_Page_29.png",
|
||||||
|
"thumb": "29_"Anthem" full score (2023)_Page_29.thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Rotation" full score (2023)",
|
||||||
|
"details": "Page_01",
|
||||||
|
"media": "30_/Rotation/ full score (2023)_Page_01.png",
|
||||||
|
"thumb": "30_/Rotation/ full score (2023)_Page_01.thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Rotation" full score (2023)",
|
||||||
|
"details": "Page_02",
|
||||||
|
"media": "31_/Rotation/ full score (2023)_Page_02.png",
|
||||||
|
"thumb": "31_/Rotation/ full score (2023)_Page_02.thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Rotation" full score (2023)",
|
||||||
|
"details": "Page_03",
|
||||||
|
"media": "32_/Rotation/ full score (2023)_Page_03.png",
|
||||||
|
"thumb": "32_/Rotation/ full score (2023)_Page_03.thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Rotation" full score (2023)",
|
||||||
|
"details": "Page_04",
|
||||||
|
"media": "33_/Rotation/ full score (2023)_Page_04.png",
|
||||||
|
"thumb": "33_/Rotation/ full score (2023)_Page_04.thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Rotation" full score (2023)",
|
||||||
|
"details": "Page_05",
|
||||||
|
"media": "34_/Rotation/ full score (2023)_Page_05.png",
|
||||||
|
"thumb": "34_/Rotation/ full score (2023)_Page_05.thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Rotation" full score (2023)",
|
||||||
|
"details": "Page_06",
|
||||||
|
"media": "35_/Rotation/ full score (2023)_Page_06.png",
|
||||||
|
"thumb": "35_/Rotation/ full score (2023)_Page_06.thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Rotation" full score (2023)",
|
||||||
|
"details": "Page_07",
|
||||||
|
"media": "36_/Rotation/ full score (2023)_Page_07.png",
|
||||||
|
"thumb": "36_/Rotation/ full score (2023)_Page_07.thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Rotation" full score (2023)",
|
||||||
|
"details": "Page_08",
|
||||||
|
"media": "37_/Rotation/ full score (2023)_Page_08.png",
|
||||||
|
"thumb": "37_/Rotation/ full score (2023)_Page_08.thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Rotation" full score (2023)",
|
||||||
|
"details": "Page_09",
|
||||||
|
"media": "38_/Rotation/ full score (2023)_Page_09.png",
|
||||||
|
"thumb": "38_/Rotation/ full score (2023)_Page_09.thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Rotation" full score (2023)",
|
||||||
|
"details": "Page_10",
|
||||||
|
"media": "39_/Rotation/ full score (2023)_Page_10.png",
|
||||||
|
"thumb": "39_/Rotation/ full score (2023)_Page_10.thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Rotation" full score (2023)",
|
||||||
|
"details": "Page_11",
|
||||||
|
"media": "40_/Rotation/ full score (2023)_Page_11.png",
|
||||||
|
"thumb": "40_/Rotation/ full score (2023)_Page_11.thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Rotation" full score (2023)",
|
||||||
|
"details": "Page_12",
|
||||||
|
"media": "41_/Rotation/ full score (2023)_Page_12.png",
|
||||||
|
"thumb": "41_/Rotation/ full score (2023)_Page_12.thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Rotation" full score (2023)",
|
||||||
|
"details": "Page_13",
|
||||||
|
"media": "42_/Rotation/ full score (2023)_Page_13.png",
|
||||||
|
"thumb": "42_/Rotation/ full score (2023)_Page_13.thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Rotation" full score (2023)",
|
||||||
|
"details": "Page_14",
|
||||||
|
"media": "43_/Rotation/ full score (2023)_Page_14.png",
|
||||||
|
"thumb": "43_/Rotation/ full score (2023)_Page_14.thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Rotation" full score (2023)",
|
||||||
|
"details": "Page_15",
|
||||||
|
"media": "44_/Rotation/ full score (2023)_Page_15.png",
|
||||||
|
"thumb": "44_/Rotation/ full score (2023)_Page_15.thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Rotation" full score (2023)",
|
||||||
|
"details": "Page_16",
|
||||||
|
"media": "45_/Rotation/ full score (2023)_Page_16.png",
|
||||||
|
"thumb": "45_/Rotation/ full score (2023)_Page_16.thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Rotation" full score (2023)",
|
||||||
|
"details": "Page_17",
|
||||||
|
"media": "46_/Rotation/ full score (2023)_Page_17.png",
|
||||||
|
"thumb": "46_/Rotation/ full score (2023)_Page_17.thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Rotation" full score (2023)",
|
||||||
|
"details": "Page_18",
|
||||||
|
"media": "47_/Rotation/ full score (2023)_Page_18.png",
|
||||||
|
"thumb": "47_/Rotation/ full score (2023)_Page_18.thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Rotation" full score (2023)",
|
||||||
|
"details": "Page_19",
|
||||||
|
"media": "48_/Rotation/ full score (2023)_Page_19.png",
|
||||||
|
"thumb": "48_/Rotation/ full score (2023)_Page_19.thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Rotation" full score (2023)",
|
||||||
|
"details": "Page_20",
|
||||||
|
"media": "49_/Rotation/ full score (2023)_Page_20.png",
|
||||||
|
"thumb": "49_/Rotation/ full score (2023)_Page_20.thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Rotation" full score (2023)",
|
||||||
|
"details": "Page_21",
|
||||||
|
"media": "50_/Rotation/ full score (2023)_Page_21.png",
|
||||||
|
"thumb": "50_/Rotation/ full score (2023)_Page_21.thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Rotation" full score (2023)",
|
||||||
|
"details": "Page_22",
|
||||||
|
"media": "51_/Rotation/ full score (2023)_Page_22.png",
|
||||||
|
"thumb": "51_/Rotation/ full score (2023)_Page_22.thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Rotation" full score (2023)",
|
||||||
|
"details": "Page_23",
|
||||||
|
"media": "52_/Rotation/ full score (2023)_Page_23.png",
|
||||||
|
"thumb": "52_/Rotation/ full score (2023)_Page_23.thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Chord structure for the beginning of "Rotation" (2013)",
|
||||||
|
"media": "53_Chord structure for the beginning of /Rotation/ (2013).jpg",
|
||||||
|
"thumb": "53_Chord structure for the beginning of /Rotation/ (2013).thumb.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Jewels" sections music material (2013)",
|
||||||
|
"media": "54_/Jewels/ sections music material (2013).jpg",
|
||||||
|
"thumb": "54_/Jewels/ sections music material (2013).thumb.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Jewel 2" and "Jewel 4" (2019)",
|
||||||
|
"media": "55_/Jewel 2/ and /Jewel 4/ (2019).png",
|
||||||
|
"thumb": "55_/Jewel 2/ and /Jewel 4/ (2019).thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Jewel 3" (2019)",
|
||||||
|
"media": "56_/Jewel 3/ (2019).png",
|
||||||
|
"thumb": "56_/Jewel 3/ (2019).thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Jewel 5" and "Jewel 4" (2017-2019)",
|
||||||
|
"media": "57_/Jewel 5/ and /Jewel 4/ (2017-2019).png",
|
||||||
|
"thumb": "57_/Jewel 5/ and /Jewel 4/ (2017-2019).thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Jewel 5" with syllables (2021)",
|
||||||
|
"media": "58_/Jewel 5/ with syllables (2021).png",
|
||||||
|
"thumb": "58_/Jewel 5/ with syllables (2021).thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Rotation" vocal chain (2019)",
|
||||||
|
"media": "63_/Rotation/ vocal chain (2019).png",
|
||||||
|
"thumb": "63_/Rotation/ vocal chain (2019).thumb.png"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Indra's Net - Notebooks",
|
||||||
|
"parent_dir": "images",
|
||||||
|
"media": "6_Indra's Net - Notebooks",
|
||||||
|
"order": "6",
|
||||||
|
"images": [
|
||||||
|
{
|
||||||
|
"title": "on sound",
|
||||||
|
"details": "continued (2018-2020)",
|
||||||
|
"media": "02_on sound, continued (2018-2020).png",
|
||||||
|
"thumb": "02_on sound, continued (2018-2020).thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "variations for rehearsals",
|
||||||
|
"details": "on sound dimensions (2018-2020)",
|
||||||
|
"media": "05_variations for rehearsals, on sound dimensions (2018-2020).png",
|
||||||
|
"thumb": "05_variations for rehearsals, on sound dimensions (2018-2020).thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "on "Rotation" (2018-2020)",
|
||||||
|
"media": "06_on /Rotation/ (2018-2020).png",
|
||||||
|
"thumb": "06_on /Rotation/ (2018-2020).thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Indra's Net" form 2 (2020-2022)",
|
||||||
|
"media": "07_/Indra's Net/ form 2 (2020-2022).png",
|
||||||
|
"thumb": "07_/Indra's Net/ form 2 (2020-2022).thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": ""Rotation" - Indra principles (2020-2022)",
|
||||||
|
"media": "08_/Rotation/ - Indra principles (2020-2022).png",
|
||||||
|
"thumb": "08_/Rotation/ - Indra principles (2020-2022).thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "on sound (2018-2020)",
|
||||||
|
"media": "01_on sound (2018-2020).png",
|
||||||
|
"thumb": "01_on sound (2018-2020).thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "on time (2018-2020)",
|
||||||
|
"media": "03_on time (2018-2020).png",
|
||||||
|
"thumb": "03_on time (2018-2020).thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "images for projection (2018-2020)",
|
||||||
|
"media": "04_images for projection (2018-2020).png",
|
||||||
|
"thumb": "04_images for projection (2018-2020).thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "films for projection (2023)",
|
||||||
|
"media": "09_films for projection (2023).png",
|
||||||
|
"thumb": "09_films for projection (2023).thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "for Film A and Film B (2023)",
|
||||||
|
"media": "10_for Film A and Film B (2023).png",
|
||||||
|
"thumb": "10_for Film A and Film B (2023).thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "movement ideas (2023)",
|
||||||
|
"media": "11_movement ideas (2023).png",
|
||||||
|
"thumb": "11_movement ideas (2023).thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "for Film I (2023)",
|
||||||
|
"media": "12_for Film I (2023).png",
|
||||||
|
"thumb": "12_for Film I (2023).thumb.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "sections and films chart (2023)",
|
||||||
|
"media": "13_sections and films chart (2023).png",
|
||||||
|
"thumb": "13_sections and films chart (2023).thumb.png"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Indra's Net - Visual Script",
|
||||||
|
"parent_dir": "images",
|
||||||
|
"media": "7_Indra's Net - Visual Script",
|
||||||
|
"order": "7",
|
||||||
|
"images": [
|
||||||
|
{
|
||||||
|
"title": "for performances at the Holland Festival (2023) Page 1",
|
||||||
|
"media": "01_for performances at the Holland Festival (2023) Page 1.jpg",
|
||||||
|
"thumb": "01_for performances at the Holland Festival (2023) Page 1.thumb.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "for performances at the Holland Festival (2023) Page 2",
|
||||||
|
"media": "02_for performances at the Holland Festival (2023) Page 2.jpg",
|
||||||
|
"thumb": "02_for performances at the Holland Festival (2023) Page 2.thumb.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "for performances at the Holland Festival (2023) Page 3",
|
||||||
|
"media": "03_for performances at the Holland Festival (2023) Page 3.jpg",
|
||||||
|
"thumb": "03_for performances at the Holland Festival (2023) Page 3.thumb.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "for performances at the Holland Festival (2023) Page 4",
|
||||||
|
"media": "04_for performances at the Holland Festival (2023) Page 4.jpg",
|
||||||
|
"thumb": "04_for performances at the Holland Festival (2023) Page 4.thumb.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "for performances at the Holland Festival (2023) Page 5",
|
||||||
|
"media": "05_for performances at the Holland Festival (2023) Page 5.jpg",
|
||||||
|
"thumb": "05_for performances at the Holland Festival (2023) Page 5.thumb.jpg"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "for performances at the Holland Festival (2023) Page 6",
|
||||||
|
"media": "06_for performances at the Holland Festival (2023) Page 6.jpg",
|
||||||
|
"thumb": "06_for performances at the Holland Festival (2023) Page 6.thumb.jpg"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,91 +50,91 @@
|
||||||
"album": true,
|
"album": true,
|
||||||
"tracks": [
|
"tracks": [
|
||||||
{
|
{
|
||||||
"title": "01 Announcer MM speaks Porch 1",
|
"title": "Announcer MM speaks Porch 1",
|
||||||
"media": "01 Announcer_MM speaks_Porch_1.mp3"
|
"media": "01 Announcer_MM speaks_Porch_1.mp3"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "02 Mesa",
|
"title": "Mesa",
|
||||||
"media": "02 Mesa.mp3"
|
"media": "02 Mesa.mp3"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "03 Jade (Old Woman's Song)",
|
"title": "Jade (Old Woman's Song)",
|
||||||
"media": "03 Jade (Old Woman's Song).mp3"
|
"media": "03 Jade (Old Woman's Song).mp3"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "04 Wa-lie-oh",
|
"title": "Wa-lie-oh",
|
||||||
"media": "04 Wa-lie-oh.mp3"
|
"media": "04 Wa-lie-oh.mp3"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "05 Insect",
|
"title": "Insect",
|
||||||
"media": "05 Insect.mp3"
|
"media": "05 Insect.mp3"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "06 Descending",
|
"title": "Descending",
|
||||||
"media": "06 Descending.mp3"
|
"media": "06 Descending.mp3"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "07 Silo (Drone)",
|
"title": "Silo (Drone)",
|
||||||
"media": "07 Silo (Drone).mp3"
|
"media": "07 Silo (Drone).mp3"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "08 Breath Song",
|
"title": "Breath Song",
|
||||||
"media": "08 Breath Song.mp3"
|
"media": "08 Breath Song.mp3"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "09 Bird Code",
|
"title": "Bird Code",
|
||||||
"media": "09 Bird Code.mp3"
|
"media": "09 Bird Code.mp3"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "10 Lullaby #4",
|
"title": "Lullaby #4",
|
||||||
"media": "10 Lullaby #4.mp3"
|
"media": "10 Lullaby #4.mp3"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "11 Prairie Ghost",
|
"title": "Prairie Ghost",
|
||||||
"media": "11 Prairie Ghost.mp3"
|
"media": "11 Prairie Ghost.mp3"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "12 Prairie Ghost",
|
"title": "Prairie Ghost",
|
||||||
"media": "12 Prairie Ghost.mp3"
|
"media": "12 Prairie Ghost.mp3"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "13 Jew's Harp",
|
"title": "Jew's Harp",
|
||||||
"media": "13 Jew's Harp.mp3"
|
"media": "13 Jew's Harp.mp3"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "14 Scared Song",
|
"title": "Scared Song",
|
||||||
"media": "14 Scared Song.mp3"
|
"media": "14 Scared Song.mp3"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "15 Travelling",
|
"title": "Travelling",
|
||||||
"media": "15 Travelling.mp3"
|
"media": "15 Travelling.mp3"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "16 I Don't Know",
|
"title": "I Don't Know",
|
||||||
"media": "16 I Don't Know.mp3"
|
"media": "16 I Don't Know.mp3"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "17 I Don't Know cont-",
|
"title": "I Don't Know cont-",
|
||||||
"media": "17 I Don't Know cont-.mp3"
|
"media": "17 I Don't Know cont-.mp3"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "18 Window in 7's Double Fiesta",
|
"title": "Window in 7's Double Fiesta",
|
||||||
"media": "18 Window in 7's_Double Fiesta.mp3"
|
"media": "18 Window in 7's_Double Fiesta.mp3"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "19 Double Fiesta cont",
|
"title": "Double Fiesta cont",
|
||||||
"media": "19 Double Fiesta cont.mp3"
|
"media": "19 Double Fiesta cont.mp3"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "20 Do You Be",
|
"title": "Do You Be",
|
||||||
"media": "20 Do You Be.mp3"
|
"media": "20 Do You Be.mp3"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "21 Ellis Island",
|
"title": "Ellis Island",
|
||||||
"media": "21 Ellis Island.mp3"
|
"media": "21 Ellis Island.mp3"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"title": "22 The Tale",
|
"title": "The Tale",
|
||||||
"media": "22 The Tale.mp3"
|
"media": "22 The Tale.mp3"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
@ -180,7 +180,7 @@ Other flags
|
||||||
}
|
}
|
||||||
|
|
||||||
if (order) {
|
if (order) {
|
||||||
const idx = m.match(/\d+/)[0] || 0
|
const idx = m.match(/\d+/) ? m.match(/\d+/)[0] : 0
|
||||||
_r.order = idx
|
_r.order = idx
|
||||||
_r.title = _r.title.replace(/^\d+\W*_*/, '')
|
_r.title = _r.title.replace(/^\d+\W*_*/, '')
|
||||||
}
|
}
|
||||||
|
@ -208,14 +208,29 @@ Other flags
|
||||||
let files = await fs.readdir(rDir)
|
let files = await fs.readdir(rDir)
|
||||||
// filterout any rogue folders
|
// filterout any rogue folders
|
||||||
// generate the metadata for each file
|
// generate the metadata for each file
|
||||||
files = files.filter(f => f.match(/\.[^/.]+$/))
|
files = files.filter(f => f.match(/(?<!\.thumb)\.[^.]+$/))
|
||||||
files = files.map(f => {
|
files = files.map(f => {
|
||||||
const { title, details } = genMetadata(f, formatted == 'recurse' || formatted == 'both', false)
|
const { title, details } = genMetadata(f, formatted == 'recurse' || formatted == 'both', false)
|
||||||
return { title, details, media: f }
|
return { title, details, media: f }
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// sort files by leading nuber (if exists)
|
||||||
|
files.sort((a, b) => {
|
||||||
|
const valA = a.title.match(/\d+/) ? a.title.match(/\d+/)[0] : 0
|
||||||
|
const valB = b.title.match(/\d+/) ? b.title.match(/\d+/)[0] : 0
|
||||||
|
return parseInt(valA) - parseInt(valB)
|
||||||
|
})
|
||||||
|
|
||||||
|
// remove leading number from tile &
|
||||||
|
// sanitize title for html unicode characters
|
||||||
|
files.forEach(f => {
|
||||||
|
f.title = f.title.replace(/^\d+(\s+|_)/, '')
|
||||||
|
f.title = f.title.replaceAll('/', '"')
|
||||||
|
})
|
||||||
|
|
||||||
// if images only
|
// if images only
|
||||||
if (imagesOnly) {
|
if (imagesOnly) {
|
||||||
|
|
||||||
// setup object per image in array
|
// setup object per image in array
|
||||||
_r.images = files.filter(f => !f.media.match(/\.thumb\.[^/.]{1,4}$/i))
|
_r.images = files.filter(f => !f.media.match(/\.thumb\.[^/.]{1,4}$/i))
|
||||||
} else {
|
} else {
|
||||||
|
@ -260,24 +275,28 @@ Other flags
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function genMetadata(dir, formatted) {
|
function genMetadata(path, formatted) {
|
||||||
let title, details
|
let title, details
|
||||||
|
|
||||||
|
const cleanPath = path.replace(/^\d+(_|.)/, '')
|
||||||
|
|
||||||
// if formatted flag set
|
// if formatted flag set
|
||||||
if (formatted) {
|
if (formatted) {
|
||||||
// split the incoming name from the map on the '_'
|
// split the incoming name from the map on the '_'
|
||||||
// and set the first element to title, and the second to details
|
// and set the first element to title, and the second to details
|
||||||
let [ t, _, d ] = dir.split(/(,|_)(.+)/s)
|
let [ t, _, d ] = cleanPath.split(/(,|_)(.+)/s)
|
||||||
// assign to return object
|
// assign to return object
|
||||||
title = t
|
title = t
|
||||||
details = d ? d.replace(/\.+(mp\d|m\dv)$/i, '').trim() : ''
|
details = d ? d.replace(/\.+(mp\d|m\dv)$/i, '').trim() : ''
|
||||||
} else {
|
} else {
|
||||||
// else just set title to filename without extensions
|
// else just set title to filename without extensions
|
||||||
const name = dir.replace(/\.\S{3,4}$/, '')
|
const name = cleanPath.replace(/\.\S{3,4}$/, '')
|
||||||
title = name.replace(/_/g, ' ')
|
title = name.replace(/_/g, ' ')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
title = title.replace(/\.\w+$/, '')
|
||||||
|
details = details ? details.replace(/\.\w+$/, '') : undefined
|
||||||
|
|
||||||
return { title, details }
|
return { title, details }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,64 +0,0 @@
|
||||||
import fs from 'fs/promises'
|
|
||||||
import path from 'path'
|
|
||||||
import { watch } from 'chokidar'
|
|
||||||
|
|
||||||
function main() {
|
|
||||||
let watchDir = ''
|
|
||||||
let sections = []
|
|
||||||
|
|
||||||
process.argv.forEach((val, i) => {
|
|
||||||
switch (val) {
|
|
||||||
case '-i':
|
|
||||||
watchDir = process.argv[i + 1] || ''
|
|
||||||
break
|
|
||||||
|
|
||||||
default:
|
|
||||||
break
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
if (!watchDir) {
|
|
||||||
console.error('no directory passed')
|
|
||||||
}
|
|
||||||
|
|
||||||
const w = watch(watchDir, {
|
|
||||||
persistent: true,
|
|
||||||
awaitWriteFinish: {
|
|
||||||
stabilityThreshold: 2000,
|
|
||||||
pollInterval: 100
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
w.on('ready',() => {
|
|
||||||
console.log('Watching', watchDir, 'for changes.')
|
|
||||||
// check each section against json file
|
|
||||||
console.log(sections)
|
|
||||||
|
|
||||||
|
|
||||||
})
|
|
||||||
|
|
||||||
w.on('add', (filePath) => {
|
|
||||||
fileAddedHandler(filePath, sections)
|
|
||||||
})
|
|
||||||
|
|
||||||
w.on('change', path => console.log(`File ${path} has been changed`))
|
|
||||||
w.on('unlink', path => console.log(`File ${path} has been removed`))
|
|
||||||
}
|
|
||||||
|
|
||||||
function fileAddedHandler(filePath, array) {
|
|
||||||
let section, media
|
|
||||||
|
|
||||||
let fp = filePath.replace(/^\.+/, '')
|
|
||||||
fp = path.parse(fp).dir.split(path.sep)
|
|
||||||
console.log(fp)
|
|
||||||
|
|
||||||
// 5 is recurse 4 is not
|
|
||||||
console.log(fp[3], fp.length)
|
|
||||||
section = fp[3]
|
|
||||||
media = fp[4]
|
|
||||||
|
|
||||||
console.log(media)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
main()
|
|
15
src/App.js
15
src/App.js
|
@ -1,6 +1,5 @@
|
||||||
import { LitElement, css, html, unsafeCSS } from 'lit'
|
import { LitElement, css, html, unsafeCSS } from 'lit'
|
||||||
import Router from './api/Router.js'
|
import Router from './api/Router.js'
|
||||||
import { Task } from '@lit-labs/task'
|
|
||||||
|
|
||||||
import MainCSS from './assets/styles/main.scss?inline'
|
import MainCSS from './assets/styles/main.scss?inline'
|
||||||
|
|
||||||
|
@ -39,6 +38,8 @@ export class App extends LitElement {
|
||||||
img.src = src
|
img.src = src
|
||||||
this.dialogEl.appendChild(img)
|
this.dialogEl.appendChild(img)
|
||||||
|
|
||||||
|
detail.details = 'some details to add to the image to see if this aligns properly'
|
||||||
|
|
||||||
if (detail.details) {
|
if (detail.details) {
|
||||||
const div = document.createElement('div')
|
const div = document.createElement('div')
|
||||||
const p = document.createElement('p')
|
const p = document.createElement('p')
|
||||||
|
@ -77,6 +78,14 @@ export class App extends LitElement {
|
||||||
dialog {
|
dialog {
|
||||||
margin: auto;
|
margin: auto;
|
||||||
border: none;
|
border: none;
|
||||||
|
outline: none;
|
||||||
|
display: grid;
|
||||||
|
grid-template-rows: minmax(0em, 1fr) auto;
|
||||||
|
max-height: calc(100vmin - 2em);
|
||||||
|
|
||||||
|
> * {
|
||||||
|
margin-inline: auto;
|
||||||
|
}
|
||||||
|
|
||||||
& div {
|
& div {
|
||||||
padding-block-start: 1em;
|
padding-block-start: 1em;
|
||||||
|
@ -85,8 +94,8 @@ export class App extends LitElement {
|
||||||
|
|
||||||
& img {
|
& img {
|
||||||
display: block;
|
display: block;
|
||||||
max-height: calc(100vmin - 2em);
|
height: 100%;
|
||||||
max-width: calc(100vmin - 2em);
|
object-fit: contain;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -115,7 +115,7 @@ export default new Router({
|
||||||
title: 'Scores, Posters, Ephemera',
|
title: 'Scores, Posters, Ephemera',
|
||||||
short: 'images',
|
short: 'images',
|
||||||
icon: 'camera',
|
icon: 'camera',
|
||||||
disabled: true,
|
disabled: false,
|
||||||
plugins: [
|
plugins: [
|
||||||
lazy(() => import('../views/images.js'))
|
lazy(() => import('../views/images.js'))
|
||||||
],
|
],
|
||||||
|
|
|
@ -31,7 +31,7 @@ class VerticalCard extends LitElement {
|
||||||
return html`
|
return html`
|
||||||
<div @click=${this.select} class=${this.selected ? 'selected' : ''}>
|
<div @click=${this.select} class=${this.selected ? 'selected' : ''}>
|
||||||
<picture>
|
<picture>
|
||||||
<img src="/media${Router.route.path}/${this.details.image}">
|
<img src="${encodeURIComponent(`/media${Router.route.path}/${this.details.image}`)}">
|
||||||
</picture>
|
</picture>
|
||||||
<aside>
|
<aside>
|
||||||
<p class="title">${this.details?.title}</p>
|
<p class="title">${this.details?.title}</p>
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import { LitElement, css, html, unsafeCSS } from 'lit'
|
import { LitElement, css, html, unsafeCSS } from 'lit'
|
||||||
|
import {unsafeHTML} from 'lit/directives/unsafe-html.js'
|
||||||
import { Task } from '@lit-labs/task'
|
import { Task } from '@lit-labs/task'
|
||||||
import Router from '../api/Router.js'
|
import Router from '../api/Router.js'
|
||||||
|
|
||||||
|
@ -28,9 +29,13 @@ class ImageView extends LitElement {
|
||||||
const json = await res.json()
|
const json = await res.json()
|
||||||
|
|
||||||
|
|
||||||
json.forEach(i => i.path = `/media${Router.route.path}/${i.media}`)
|
json.forEach(i => {
|
||||||
|
console.log(i)
|
||||||
|
i.path = `/media${Router.route.path}/${i.media}`
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
console.log(json[0])
|
console.log(json)
|
||||||
|
|
||||||
this.images = json
|
this.images = json
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
@ -44,7 +49,7 @@ class ImageView extends LitElement {
|
||||||
console.log(target.details)
|
console.log(target.details)
|
||||||
const event = new CustomEvent('single-fullscreen-image', {
|
const event = new CustomEvent('single-fullscreen-image', {
|
||||||
bubbles: true, composed: true,
|
bubbles: true, composed: true,
|
||||||
detail: { ...target.details, src: `/media${Router.route.path}/${target.details.section}/${target.details.media}` }
|
detail: { ...target.details, src: encodeURIComponent(`/media${Router.route.path}/${target.details.section}/${target.details.media}`) }
|
||||||
})
|
})
|
||||||
|
|
||||||
this.dispatchEvent(event)
|
this.dispatchEvent(event)
|
||||||
|
@ -52,8 +57,6 @@ class ImageView extends LitElement {
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
return html`
|
return html`
|
||||||
<!-- <mm-img-carousel .images=${this.images}></mm-img-carousel> -->
|
|
||||||
|
|
||||||
${this.images.length > 0 ?
|
${this.images.length > 0 ?
|
||||||
html`
|
html`
|
||||||
<div class="gallery">
|
<div class="gallery">
|
||||||
|
@ -67,7 +70,7 @@ class ImageView extends LitElement {
|
||||||
i => html`
|
i => html`
|
||||||
<mm-vcard
|
<mm-vcard
|
||||||
@click=${this.selectImage}
|
@click=${this.selectImage}
|
||||||
.details=${ { ...i, section: section.media, image: `${section.media}/${i.thumb}` } }
|
.details=${ { ...i, title: unsafeHTML(i.title), section: section.media, image: `${section.media}/${i.thumb}` } }
|
||||||
?selected=${i.title == this.selected?.title}
|
?selected=${i.title == this.selected?.title}
|
||||||
>
|
>
|
||||||
</mm-vcard>
|
</mm-vcard>
|
||||||
|
@ -98,6 +101,7 @@ class ImageView extends LitElement {
|
||||||
|
|
||||||
mm-vcard {
|
mm-vcard {
|
||||||
--color: var(--green-400, lime);
|
--color: var(--green-400, lime);
|
||||||
|
--width: 8em;
|
||||||
}
|
}
|
||||||
|
|
||||||
header {
|
header {
|
||||||
|
@ -111,8 +115,8 @@ class ImageView extends LitElement {
|
||||||
main {
|
main {
|
||||||
display: grid;
|
display: grid;
|
||||||
gap: 0.75em;
|
gap: 0.75em;
|
||||||
grid-template-columns: repeat(7, 1fr);
|
grid-template-columns: repeat(5, 1fr);
|
||||||
grid-auto-rows: 10em;
|
grid-auto-rows: 15em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue