updated images data

This commit is contained in:
suroh 2023-12-04 23:07:00 +01:00
parent 932f2200e3
commit 8eb9ab9477
8 changed files with 666 additions and 177 deletions

View File

@ -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": "Map",
"parent_dir": "images",
"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": "Quarry 1976 LaMama original poster", "title": "Melody themes 3-6 (2019)",
"media": "Quarry_1976_LaMama_original poster.jpg", "media": "60_Melody themes 3-6 (2019).png",
"thumb": "Quarry_1976_LaMama_original poster.thumb.jpg" "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": "&#34Jewel 2&#34 and &#34Jewel 4&#34 (2019)",
"media": "55_&#47Jewel 2&#47 and &#47Jewel 4&#47 (2019).png",
"thumb": "55_&#47Jewel 2&#47 and &#47Jewel 4&#47 (2019).thumb.png"
},
{
"title": "&#34Jewel 3&#34 (2019)",
"media": "56_&#47Jewel 3&#47 (2019).png",
"thumb": "56_&#47Jewel 3&#47 (2019).thumb.png"
},
{
"title": "&#34Jewel 5&#34 and &#34Jewel 4&#34 (2017-2019)",
"media": "57_&#47Jewel 5&#47 and &#47Jewel 4&#47 (2017-2019).png",
"thumb": "57_&#47Jewel 5&#47 and &#47Jewel 4&#47 (2017-2019).thumb.png"
},
{
"title": "&#34Jewel 5&#34 with syllables (2021)",
"media": "58_&#47Jewel 5&#47 with syllables (2021).png",
"thumb": "58_&#47Jewel 5&#47 with syllables (2021).thumb.png"
},
{
"title": "&#34Rotation&#34 vocal chain (2019)",
"media": "63_&#47Rotation&#47 vocal chain (2019).png",
"thumb": "63_&#47Rotation&#47 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 &#34Rotation&#34 (2018-2020)",
"media": "06_on &#47Rotation&#47 (2018-2020).png",
"thumb": "06_on &#47Rotation&#47 (2018-2020).thumb.png"
},
{
"title": "&#34Indra's Net&#34 form 2 (2020-2022)",
"media": "07_&#47Indra's Net&#47 form 2 (2020-2022).png",
"thumb": "07_&#47Indra's Net&#47 form 2 (2020-2022).thumb.png"
},
{
"title": "&#34Rotation&#34 - Indra principles (2020-2022)",
"media": "08_&#47Rotation&#47 - Indra principles (2020-2022).png",
"thumb": "08_&#47Rotation&#47 - 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"
} }
] ]
} }

View File

@ -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"
} }
] ]

View File

@ -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('&#47', '&#34')
}) })
// 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 }
} }

View File

@ -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()

View File

@ -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;
} }
} }

View File

@ -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'))
], ],

View File

@ -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>

View File

@ -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;
} }