OK, here’s the data slightly better formatted
{
"afrika_korps_wga": {
"Module": {
"2.3.1": {
"AFK-2.3.1.vmod": {
"authors": [
"wga"
],
"published_by": "wga",
"published_at": 1588802400,
"requires": "3.2.17",
"size": 3052439,
"sha256": "02ff5c30b20b2fa334546c1841de61d3035fe21d7ebc41e0b0c704b168eafe0e",
"url": "https://obj.vassalengine.org/gls/0/2/AFK-2.3.1.vmod"
}
},
"2.3.0": {
"AFK-2.3.vmod": {
"authors": [
"wga"
],
"published_by": "wga",
"published_at": 1588802400,
"requires": "3.2.17",
"size": 3068117,
"sha256": "57fc5c65b627fa07803de3380df2295df648f05aaa1fb2c6d053702ee50d851a",
"url": "https://obj.vassalengine.org/gls/5/7/AFK-2.3.vmod"
}
},
"2.2.2": {
"AFKv222.vmod": {
"authors": [
"Brent_Easton",
"wga",
"jw62",
"unknown"
],
"published_by": "Brent_Easton",
"published_at": 1268002800,
"requires": "3.1.12",
"size": 3259363,
"sha256": "b3b5aa2157767741f772ea05e3b55dea4230f21717053ec48fae9f60cfa848ba",
"url": "https://obj.vassalengine.org/gls/b/3/AFKv222.vmod"
}
}
},
"Supporting Material": {
"1.0.0": {
"Afrika_Korps_Documents.zip": {
"authors": [
"Charles_McLellan"
],
"published_by": "Charles_McLellan",
"published_at": 1287352800,
"requires": "n/a",
"size": 5488715,
"sha256": "52e62debbb1d3e5b0b36c6e407cf32b98a056c28edfb5127ca9298ca6484ec6e",
"url": "https://obj.vassalengine.org/gls/5/2/Afrika_Korps_Documents.zip"
}
}
}
},
"afrika_korps_stiglr": {
"Module": {
"1.0.1": {
"Afrika_Korps_REV_Map_1.01.vmod": {
"authors": [
"Stiglr"
],
"published_by": "Stiglr",
"published_at": 1711321200,
"requires": "3.2.17",
"size": 7968935,
"sha256": "6ed4fae82d3201751c670a06e1edeb67b4efd7e002f9e267fbf7c3f87b4165e2",
"url": "https://obj.vassalengine.org/gls/6/e/Afrika_Korps_REV_Map_1.01.vmod"
}
}
}
},
"afrika_korps_cgmclellan": {
"Module": {
"1.1.1": {
"Afrika_Korps2_1.1.1.vmod": {
"authors": [
"Charles_McLellan",
"unknown"
],
"published_by": "Charles_McLellan",
"published_at": 1404079200,
"requires": "3.2.11+",
"size": 2319135,
"sha256": "20678136ff7d2761febb9c95b966b2525fee070a5d1c3368a5d6e06f3ddd8783",
"url": "https://obj.vassalengine.org/gls/2/0/Afrika_Korps2_1.1.1.vmod"
}
},
"1.0.0": {
"Afrika_Korps2.vmod": {
"authors": [
"Charles_McLellan"
],
"published_by": "Charles_McLellan",
"published_at": 1286143200,
"requires": "3.1.14+",
"size": 2319197,
"sha256": "9eca2a632508810f873604fd482d416eb0e6daa381bff2c3af717e5ab01187e1",
"url": "https://obj.vassalengine.org/gls/9/e/Afrika_Korps2.vmod"
}
}
},
"Supporting Material": {
"1.0.0": {
"Afrika_Korps_Documents.zip": {
"authors": [
"Charles_McLellan"
],
"published_by": "Charles_McLellan",
"published_at": 1287352800,
"requires": "n/a",
"size": 5488715,
"sha256": "52e62debbb1d3e5b0b36c6e407cf32b98a056c28edfb5127ca9298ca6484ec6e",
"url": "https://obj.vassalengine.org/gls/5/2/Afrika_Korps_Documents.zip"
}
}
}
},
"afrika_korps_cholmcc": {
"Colourful": {
"2.1.0": {
"AfrikaKorps-2.1-ch.vmod": {
"authors": [
"cholmcc"
],
"published_by": "cholmcc",
"published_at": 1707174000,
"requires": "3.6",
"size": 6277234,
"sha256": "66a926aef8739c2f3a069afa100793234bb69e0444edda4c3139440380f10162",
"url": "https://obj.vassalengine.org/gls/6/6/AfrikaKorps-2.1-ch.vmod"
}
},
"2.0.0": {
"AfrikaKorps-2.0-ch.vmod": {
"authors": [
"cholmcc"
],
"published_by": "cholmcc",
"published_at": 1676156400,
"requires": "3.6",
"size": 5583135,
"sha256": "9f285af95c40684b72fe44f77f042dab8d319dbcb9351418d6159fb20a9b1fcc",
"url": "https://obj.vassalengine.org/gls/9/f/AfrikaKorps-2.0-ch.vmod"
}
},
"1.1.0": {
"AfrikaKorps-1.1-ch.vmod": {
"authors": [
"cholmcc"
],
"published_by": "cholmcc",
"published_at": 1670194800,
"requires": "3.6",
"size": 5809043,
"sha256": "a954e472b779c7698923721fa44202c86687fbfc70a9f953486697cdbb3a597a",
"url": "https://obj.vassalengine.org/gls/a/9/AfrikaKorps-1.1-ch.vmod"
}
}
},
"Ol'School": {
"2.1.0": {
"AfrikaKorps-2.1-ch-oldschool.vmod": {
"authors": [
"cholmcc"
],
"published_by": "cholmcc",
"published_at": 1707174000,
"requires": "3.6",
"size": 6320410,
"sha256": "82f4809f57ffa51757113606d51cfb7b8bcf22e1b10f153ada54985a0efc0033",
"url": "https://obj.vassalengine.org/gls/8/2/AfrikaKorps-2.1-ch-oldschool.vmod"
}
},
"2.0.0": {
"AfrikaKorps-2.0-ch-oldschool.vmod": {
"authors": [
"cholmcc"
],
"published_by": "cholmcc",
"published_at": 1676156400,
"requires": "3.6",
"size": 5833247,
"sha256": "ed9e97ad3bd915445c659787106818027202ae38c607d4e63c4dcdbedfa769eb",
"url": "https://obj.vassalengine.org/gls/e/d/AfrikaKorps-2.0-ch-oldschool.vmod"
}
},
"1.1.0": {
"AfrikaKorps-1.1-ch-oldschool.vmod": {
"authors": [
"cholmcc"
],
"published_by": "cholmcc",
"published_at": 1670194800,
"requires": "3.6",
"size": 5831782,
"sha256": "57b9df3fc8ef9096cc70c5968bc3a907edbbb2b5ae833458d21000d16f620546",
"url": "https://obj.vassalengine.org/gls/5/7/AfrikaKorps-1.1-ch-oldschool.vmod"
}
}
}
},
"anzio_beachhead_unknown": {
"Module": {
"1.1.0": {
"Anzio_Beachhead_v1.1.vmod": {
"authors": [],
"published_by": "unknown",
"published_at": 1635631200,
"requires": "3.5.8",
"size": 2446104,
"sha256": "94a6617bbc7d5cb3600b85a208c0d2e19109448c6a067066c4853235e0b72e61",
"url": "https://obj.vassalengine.org/gls/9/4/Anzio_Beachhead_v1.1.vmod"
}
}
}
},
"anzio_beachhead_cholmcc": {
"Module": {
"1.0.1": {
"AnzioBeachhead-ch-1.0.1.vmod": {
"authors": [
"cholmcc"
],
"published_by": "cholmcc",
"published_at": 1746655200,
"requires": "3.7",
"size": 5148791,
"sha256": "34dcbea388c349494281a8695d176e1ee1f22de315599f74c8cabbaaa064f498",
"url": "https://obj.vassalengine.org/gls/3/4/AnzioBeachhead-ch-1.0.1.vmod"
}
}
}
},
"battle_skala": {},
"battle_cholmcc": {
"Module": {
"1.0.0": {
"Battle.vmod": {
"authors": [
"Skalla"
],
"published_by": "Skalla",
"published_at": 1040166000,
"requires": "?",
"size": 2349351,
"sha256": "de90b560d81ab147d6b10fed14f72ecf9807fb4223fdf5139717db011343c039",
"url": "https://obj.vassalengine.org/gls/d/e/Battle.vmod"
}
}
}
},
"battle_for_moscow_operation_typhoon_olivier": {
"Module": {
"1.0.3": {
"BFM-1.0.3.vmod": {
"authors": [],
"published_by": "unknown",
"published_at": 1660428000,
"requires": "3.5",
"size": 5726609,
"sha256": "3c48760533c9ecde7e0af407e254604c9f79e2219c17f4c57fd3e6ba81683d34",
"url": "https://obj.vassalengine.org/gls/3/c/BFM-1.0.3.vmod"
}
},
"1.0.2": {
"BFM-1.0.2.vmod": {
"authors": [],
"published_by": "unknown",
"published_at": 1634767200,
"requires": "3.5",
"size": 5729604,
"sha256": "534b0123c8ef8a72d7695dca2a70c00951b75dbc617042dd1f0483ddea890f26",
"url": "https://obj.vassalengine.org/gls/5/3/BFM-1.0.2.vmod"
}
},
"1.0.1": {
"BFM-1.0.1.vmod": {
"authors": [
"Olivier"
],
"published_by": "Olivier",
"published_at": 1614898800,
"requires": "3.5",
"size": 5712358,
"sha256": "3df4fd36b79fe3e32dd30542a28dcd18980c68eff82c20aaae966bc18f2572d6",
"url": "https://obj.vassalengine.org/gls/3/d/BFM-1.0.1.vmod"
}
},
"1.0.0": {
"BFM.vmod": {
"authors": [],
"published_by": "unknown",
"published_at": 1302040800,
"requires": "3.1.12",
"size": 5726798,
"sha256": "50791c450a07aa9b1266c7e8d6f03bea0f275013503cd7126d7a7e736d96e18a",
"url": "https://obj.vassalengine.org/gls/5/0/BFM.vmod"
}
}
}
},
"battle_for_moscow_operation_typhoon_expansion_json99": {
"Module": {
"2.0.0": {
"Battle_for_Moscow_Expan_and_Winter_Off_2.0.vmod": {
"authors": [
"Olivier",
"DaveJM",
"unknown"
],
"published_by": "Olivier",
"published_at": 1652133600,
"requires": "3.5",
"size": 44810435,
"sha256": "85f81d5c8b26bcdab70e8f01121321840e40e331ceb1610f86317a2170c834d2",
"url": "https://obj.vassalengine.org/gls/8/5/Battle_for_Moscow_Expan_and_Winter_Off_2.0.vmod"
}
}
}
},
"battle_for_moscow_unknown": {
"Module": {
"1.2.0": {
"BattleforMoscow.vmod": {
"authors": [],
"published_by": "unknown",
"published_at": 1128031200,
"requires": "2.1",
"size": 170210,
"sha256": "037311bb6331af89db33561b1f766e5cff02822d4279a1054b1fcd2128072220",
"url": "https://obj.vassalengine.org/gls/0/3/BattleforMoscow.vmod"
}
}
}
},
"battle_for_moscow_cholmcc": {
"Module": {
"1.0.0": {
"BattleForMoscow-ch-1.0.vmod": {
"authors": [
"cholmcc"
],
"published_by": "cholmcc",
"published_at": 1674428400,
"requires": "3.6",
"size": 2662578,
"sha256": "00dfc3e26df352628463f84b437d7dd3d4fd2883155cf9173ebbfb813056003f",
"url": "https://obj.vassalengine.org/gls/0/0/BattleForMoscow-ch-1.0.vmod"
}
}
}
},
"d_day_2nd_ed_brian448": {
"Modules": {
"2.0.2": {
"D-Day-v202.vmod": {
"authors": [
"brian448",
"unknown"
],
"published_by": "brian448",
"published_at": 1269126000,
"requires": "3.1.14",
"size": 3292010,
"sha256": "b64cf7e857a832cd5c7d0f482e6bc682beaf7b1fc01b9f948ce0674e40438e9a",
"url": "https://obj.vassalengine.org/gls/b/6/D-Day-v202.vmod"
},
"DDayVolkssturm.vmod": {
"authors": [
"Gordon_Cerow"
],
"published_by": "Gordon_Cerow",
"published_at": 1629928800,
"requires": "3.5.7",
"size": 23054525,
"sha256": "ad5281e9930bd8ba7b46917de253f991736955ec3a568a4b497d78f3fa5cfcd0",
"url": "https://obj.vassalengine.org/gls/a/d/DDayVolkssturm.vmod"
}
},
"1.0.0": {
"D-Day.vmod": {
"authors": [
"brian448"
],
"published_by": "brian448",
"published_at": 1257116400,
"requires": "3.1.12",
"size": 3182163,
"sha256": "a5f8f77cc35428ea61d3b8075b39c96e2a490f7d2bdfff32e0f33c2fe167aace",
"url": "https://obj.vassalengine.org/gls/a/5/D-Day.vmod"
}
}
},
"Supporting Material": {
"0.0.0": {
"D-Day_Basic_Game_Rules_1965_edition.pdf": {
"authors": [],
"published_by": "unknown",
"published_at": 1750252100,
"requires": "n/a",
"size": 1310354,
"sha256": "f3b4224ee6a874582510ddc02dd1378687eecd57e4850c33080bb7cd4a2831a4",
"url": "https://obj.vassalengine.org/gls/f/3/D-Day_Basic_Game_Rules_1965_edition.pdf"
},
"D-Day_Tournament_Rules_1965_edition.pdf": {
"authors": [],
"published_by": "unknown",
"published_at": 1750252086,
"requires": "n/a",
"size": 4063203,
"sha256": "020bb7249bc424fa5ac1bc5b649f6d35e5b158d7cd0f348640cde0de642d7246",
"url": "https://obj.vassalengine.org/gls/0/2/D-Day_Tournament_Rules_1965_edition.pdf"
},
"TAHGC_D-Day_Rulebook-100313.pdf": {
"authors": [],
"published_by": "unknown",
"published_at": 1750252111,
"requires": "n/a",
"size": 4720721,
"sha256": "c954d8d0d8de8c350bcc5bba84da7394d524da7c64d5fac89bc790411510cb20",
"url": "https://obj.vassalengine.org/gls/c/9/TAHGC_D-Day_Rulebook-100313.pdf"
},
"Using_the_D-Day_Module.pdf": {
"authors": [],
"published_by": "unknown",
"published_at": 1750252124,
"requires": "n/a",
"size": 122536,
"sha256": "f2be100d9a88ed66216d9d880b9848e65f6f47597c5462d4ad7826186c2b3e6e",
"url": "https://obj.vassalengine.org/gls/f/2/Using_the_D-Day_Module.pdf"
}
}
}
},
"d_day_3rd_ed_crispy1critter": {
"Module": {
"1.1.0": {
"D-DAY-77-1.1.vmod": {
"authors": [
"crispy1critter"
],
"published_by": "crispy1critter",
"published_at": 1533333600,
"requires": "3.2.17",
"size": 9104156,
"sha256": "5a1dd869264b2a8e940e5b1c508e2398524a63478e2dc05394eed63346b15be8",
"url": "https://obj.vassalengine.org/gls/5/a/D-DAY-77-1.1.vmod"
}
}
}
},
"d_day_3rd_ed_woody8297": {
"Module": {
"3.0.0": {
"D-Day-v3.0a.vmod": {
"authors": [
"woody8297"
],
"published_by": "woody8297",
"published_at": 1699916400,
"requires": "3.7.5",
"size": 6308284,
"sha256": "5b35efe6b3ba984a9f44abd4ec2706a027de8e521070dbc067eddefd610334fb",
"url": "https://obj.vassalengine.org/gls/5/b/D-Day-v3.0a.vmod"
}
}
}
},
"d_day_3rd_ed_cholmcc": {
"Colourful": {
"1.0.0": {
"DDay-1.0-ch.vmod": {
"authors": [
"cholmcc"
],
"published_by": "cholmcc",
"published_at": 1666908000,
"requires": "3.6.7",
"size": 9351641,
"sha256": "6c73de5ee54053c85675de8b310ae6a18a6e24dc81070949d6cf6536b695555e",
"url": "https://obj.vassalengine.org/gls/6/c/DDay-1.0-ch.vmod"
}
}
},
"Ol'School": {
"1.0.0": {
"DDay-1.0-ch-oldschool.vmod": {
"authors": [
"cholmcc"
],
"published_by": "cholmcc",
"published_at": 1666908000,
"requires": "3.6.7",
"size": 7563607,
"sha256": "dfcebf88563f4337f62d6ae18dc58f505964f4dcc53abdbe8f9a24f76a4cb36a",
"url": "https://obj.vassalengine.org/gls/d/f/DDay-1.0-ch-oldschool.vmod"
}
}
}
},
"gettysburg_125th_anniversary_wga": {
"Module": {
"3.4.0": {
"G88v34.vmod": {
"authors": [
"Brent_Easton",
"wga",
"jw62"
],
"published_by": "Brent_Easton",
"published_at": 1618092000,
"requires": "3.1.27",
"size": 3057609,
"sha256": "ee1cbcf0e4ac80047215a899cc0b37f9430b9b01d210bdc0fa336e3fabdae831",
"url": "https://obj.vassalengine.org/gls/e/e/G88v34.vmod"
}
},
"3.3.11": {
"G88v33b11.vmod": {
"authors": [
"Brent_Easton",
"wga",
"jw62"
],
"published_by": "Brent_Easton",
"published_at": 1468706400,
"requires": "3.1.20",
"size": 2845791,
"sha256": "233f231698cb87700363163e2ab8d1c7392da54ac6ba3429ab9c4f8cae543a7d",
"url": "https://obj.vassalengine.org/gls/2/3/G88v33b11.vmod"
}
},
"3.3.10": {
"Campaign-130405.vsav": {
"authors": [],
"published_by": "unknown",
"published_at": 1364853600,
"requires": "3.1.20",
"size": 7809,
"sha256": "d4925e2d05bd207d8fe55ebec915814973565c279648ed01306e92245d0b776b",
"url": "https://obj.vassalengine.org/gls/d/4/Campaign-130405.vsav"
},
"G88v33b10.vmod": {
"authors": [
"Brent_Easton",
"wga",
"jw62"
],
"published_by": "Brent_Easton",
"published_at": 1366063200,
"requires": "3.1.20",
"size": 2834168,
"sha256": "463190fd9073d5c508a642602190a3699f89c4da0818d0a8a5a7ec5374bf722f",
"url": "https://obj.vassalengine.org/gls/4/6/G88v33b10.vmod"
}
}
}
},
"gettysburg_125th_anniversary_cholmcc": {
"Module": {
"1.2.0": {
"GettysburgSmithsonian-1.2.vmod": {
"authors": [
"cholmcc"
],
"published_by": "cholmcc",
"published_at": 1707087600,
"requires": "3.6",
"size": 12231397,
"sha256": "7ba3924ee2e55e4a490a325c48f93228baa05e8bbcda3978ed12b6fdbafb96c2",
"url": "https://obj.vassalengine.org/gls/7/b/GettysburgSmithsonian-1.2.vmod"
}
},
"1.1.0": {
"GettysburgSmithsonian-1.1.vmod": {
"authors": [
"cholmcc"
],
"published_by": "cholmcc",
"published_at": 1691272800,
"requires": "3.6",
"size": 12355790,
"sha256": "e0ac6f795f10cfb32eebfdd10756bb27d007b1167c2f1e10b438a45ae0ad3285",
"url": "https://obj.vassalengine.org/gls/e/0/GettysburgSmithsonian-1.1.vmod"
}
},
"1.0.0": {
"GettysburgSmithsonian-1.0.vmod": {
"authors": [
"cholmcc"
],
"published_by": "cholmcc",
"published_at": 1689372000,
"requires": "3.6",
"size": 12301770,
"sha256": "4c6a5b8333a8b8b4e674b50d3a0c841afba7cae24c6e9d2e479831b4ca823dc8",
"url": "https://obj.vassalengine.org/gls/4/c/GettysburgSmithsonian-1.0.vmod"
}
}
}
},
"napoleon_at_waterloo_2nd_ed_stephen_oliver": {
"Module": {
"2.2.0": {
"Napoleon_at_Waterloo_2nd_Ed_Vers_2.2.vmod": {
"authors": [
"iam2509"
],
"published_by": "iam2509",
"published_at": 1627768800,
"requires": "3.5.3",
"size": 12468448,
"sha256": "9aeb91c3387ea4d7aee41396903f54e31333e06064f0828a257e3aa9ca5d558e",
"url": "https://obj.vassalengine.org/gls/9/a/Napoleon_at_Waterloo_2nd_Ed_Vers_2.2.vmod"
}
}
}
},
"napoleon_at_waterloo_3rd_ed_davejm": {
"Module": {
"1.1.0": {
"Napoleon_at_Waterloo_SPI_V1.1.vmod": {
"authors": [
"DaveJM",
"iam2509"
],
"published_by": "DaveJM",
"published_at": -61378303820,
"requires": "3.7.14",
"size": 40996515,
"sha256": "0a316de6e15fbdc2f0a6ab1c31443a0635476ad7341b25bd3a23adc1cd804113",
"url": "https://obj.vassalengine.org/gls/0/a/Napoleon_at_Waterloo_SPI_V1.1.vmod"
}
},
"1.0.0": {
"Napoleon_at_Waterloo_SPI_V1.0.vmod": {
"authors": [
"DaveJM",
"iam2509"
],
"published_by": "DaveJM",
"published_at": -61464963020,
"requires": "3.5.8",
"size": 10583868,
"sha256": "f33fda0774735be4d7ccb2a51e778142fb4435123125df7c53f5640419447e7c",
"url": "https://obj.vassalengine.org/gls/f/3/Napoleon_at_Waterloo_SPI_V1.0.vmod"
}
}
}
},
"napoleon_at_waterloo_cholmcc": {
"Module": {
"1.1.0": {
"NapoleonAtWaterloo-ch-1.1.0.vmod": {
"authors": [
"cholmcc"
],
"published_by": "cholmcc",
"published_at": 1713996000,
"requires": "3.6",
"size": 8519598,
"sha256": "ab4a7e914e8bcc4651dfd2b01d07cee18761785be5ba84494aa4ebc8e990e93b",
"url": "https://obj.vassalengine.org/gls/a/b/NapoleonAtWaterloo-ch-1.1.0.vmod"
}
},
"1.0.0": {
"NapoleonAtWaterloo-1.0-ch.vmod": {
"authors": [
"cholmcc"
],
"published_by": "cholmcc",
"published_at": 1713996000,
"requires": "3.6",
"size": 8399943,
"sha256": "f48e6341a6570045667b7c512008ddd979cdfc4486dca54a3f9d8c23b9f628ea",
"url": "https://obj.vassalengine.org/gls/f/4/NapoleonAtWaterloo-1.0-ch.vmod"
}
}
}
},
"panzerarmee_afrika_gamer94501": {
"Module": {
"0.0.1": {
"PanzerArmeeAfrika-001d.vmod": {
"authors": [
"gamer94501"
],
"published_by": "gamer94501",
"published_at": 1431900000,
"requires": "3.2.15",
"size": 18385075,
"sha256": "90e57d0ce477f9e189dd791ff4f9a7fbce18505dc19dd2f8cef7bc6b440d6295",
"url": "https://obj.vassalengine.org/gls/9/0/PanzerArmeeAfrika-001d.vmod"
},
"PanzerArmeeAfrika-001e.vmod": {
"authors": [
"gamer94501"
],
"published_by": "gamer94501",
"published_at": 1433023200,
"requires": "3.2.15",
"size": 27718279,
"sha256": "f41ba85f24e9397b8c38e821ca7a060ce99c30534c5dff03751389dea81a73ee",
"url": "https://obj.vassalengine.org/gls/f/4/PanzerArmeeAfrika-001e.vmod"
}
}
}
},
"panzerarmee_afrika_william_hay_spi": {
"Module": {
"3.2.0": {
"PanzerArmeeAfrika_v32.vmod": {
"authors": [],
"published_by": "unknown",
"published_at": 1615762800,
"requires": "3.5.2",
"size": 14484046,
"sha256": "84929046b330b9c0b11aacfb7f07fff0767d97c0c9f200f710746cf1476673d6",
"url": "https://obj.vassalengine.org/gls/8/4/PanzerArmeeAfrika_v32.vmod"
}
}
},
"Module - AH": {
"1.0.0": {
"PanzerArmeeAfrika(SPI-AH).vmod": {
"authors": [],
"published_by": "unknown",
"published_at": 1615762800,
"requires": "3.5.2",
"size": 10912622,
"sha256": "596b9c7153484d3ed64ad39e88e4d116f8e4bf02fe42ab37cea8c2bf6e99fba4",
"url": "https://obj.vassalengine.org/gls/5/9/PanzerArmeeAfrika(SPI-AH).vmod"
}
}
}
},
"panzerarmee_afrika_luc_liu": {
"Module": {
"1.3.5": {
"PanzerArmeeAfrika(SPI-AH)_v135.vmod": {
"authors": [
"Luc_Liu"
],
"published_by": "Luc_Liu",
"published_at": 1732316400,
"requires": "3.7.15",
"size": 11403371,
"sha256": "6e214bf76e3ded7da0b7767e5861da0837fa726f0be308df0e47b296eb8b8492",
"url": "https://obj.vassalengine.org/gls/6/e/PanzerArmeeAfrika(SPI-AH)_v135.vmod"
}
},
"1.3.4": {
"PanzerArmeeAfrika(SPI-AH)_v134.vmod": {
"authors": [
"Luc_Liu"
],
"published_by": "Luc_Liu",
"published_at": 1730156400,
"requires": "3.7.14",
"size": 11453090,
"sha256": "cab3a6940832ae1c033cea3836db13c82d608f14df1ff2c283db23f04ee5e856",
"url": "https://obj.vassalengine.org/gls/c/a/PanzerArmeeAfrika(SPI-AH)_v134.vmod"
}
},
"1.3.3": {
"PanzerArmeeAfrika(SPI-AH)_v133.vmod": {
"authors": [
"Luc_Liu"
],
"published_by": "Luc_Liu",
"published_at": 1729116000,
"requires": "3.7.14",
"size": 11457582,
"sha256": "66b3105de8f61b27cf123d65d0ee86827aabac4d145cf50a3fdd907055bb483e",
"url": "https://obj.vassalengine.org/gls/6/6/PanzerArmeeAfrika(SPI-AH)_v133.vmod"
}
},
"1.3.2": {
"PanzerArmeeAfrika(SPI-AH)_v132.vmod": {
"authors": [
"Luc_Liu"
],
"published_by": "Luc_Liu",
"published_at": 1723154400,
"requires": "3.7.13",
"size": 11377511,
"sha256": "bf375129ab3b6eb99994bd84e161883c2830d2ba6f13d4ccd0f7740a9e1dc4f4",
"url": "https://obj.vassalengine.org/gls/b/f/PanzerArmeeAfrika(SPI-AH)_v132.vmod"
}
},
"1.3.1": {
"PanzerArmeeAfrika(SPI-AH)_v131.vmod": {
"authors": [
"Luc_Liu"
],
"published_by": "Luc_Liu",
"published_at": 1719698400,
"requires": "3.7.12",
"size": 11388599,
"sha256": "87ce466572b003577610bd961c4bc166f7aa57a862b0177eeeba15ab50ea4e9b",
"url": "https://obj.vassalengine.org/gls/8/7/PanzerArmeeAfrika(SPI-AH)_v131.vmod"
}
},
"1.3.0": {
"PanzerArmeeAfrika(SPI-AH)_v130.vmod": {
"authors": [
"Luc_Liu"
],
"published_by": "Luc_Liu",
"published_at": 1717970400,
"requires": "3.7.12",
"size": 11353932,
"sha256": "48ba924ea1f1a35e0da54229af9874ffc1569a9de45b0c1ed1ab3476ee58f5a6",
"url": "https://obj.vassalengine.org/gls/4/8/PanzerArmeeAfrika(SPI-AH)_v130.vmod"
}
}
}
},
"panzerarmee_afrika_cholmcc": {
"AHGC": {
"1.1.0": {
"PanzerarmeeAfrika+AHGC-ch-1.1.0.vmod": {
"authors": [
"cholmcc"
],
"published_by": "cholmcc",
"published_at": 1736118000,
"requires": "3.7.0",
"size": 10467357,
"sha256": "0e0f055f7c7d9359a13a58471f3ffb0e98476a8fae46f9774ad33e6f037f3035",
"url": "https://obj.vassalengine.org/gls/0/e/PanzerarmeeAfrika+AHGC-ch-1.1.0.vmod"
}
}
},
"Colourful": {
"1.1.0": {
"PanzerarmeeAfrika-ch-1.1.0.vmod": {
"authors": [
"cholmcc"
],
"published_by": "cholmcc",
"published_at": 1736118000,
"requires": "3.7.0",
"size": 10392149,
"sha256": "dc188da680f6de8611208cce301005c5fba08d68556b222576658948b3f2f238",
"url": "https://obj.vassalengine.org/gls/d/c/PanzerarmeeAfrika-ch-1.1.0.vmod"
}
}
},
"SPI": {
"1.1.0": {
"PanzerarmeeAfrika+SPI-ch-1.1.0.vmod": {
"authors": [
"cholmcc"
],
"published_by": "cholmcc",
"published_at": 1736118000,
"requires": "3.7.0",
"size": 10123088,
"sha256": "90b01e262093694f8cc938faf7faf5faff657325a87b56c58f8fe74b9939f2f1",
"url": "https://obj.vassalengine.org/gls/9/0/PanzerarmeeAfrika+SPI-ch-1.1.0.vmod"
}
}
}
},
"the_battle_of_agincourt_kevos4": {
"Module": {
"1.0.0": {
"BoA_100.vmod": {
"authors": [
"KevOs4"
],
"published_by": "KevOs4",
"published_at": 1476568800,
"requires": "3.2.16",
"size": 1372230,
"sha256": "f2e9a23a8476cdb3ddef531c1f3eba2f14aff6600c0cb4db11c7f2eae745b7e5",
"url": "https://obj.vassalengine.org/gls/f/2/BoA_100.vmod"
}
}
}
},
"3147": {
"Module": {
"1.0.0": {
"BattleOfAgincourt-ch-1.0.0.vmod": {
"authors": [
"cholmcc"
],
"published_by": "cholmcc",
"published_at": 1746655200,
"requires": "3.7",
"size": 9983170,
"sha256": "4e9ac50b96fedf2605dcb3a4d6488db23aabcde832b6d605037c266e5060a04b",
"url": "https://obj.vassalengine.org/images/2/2a/BattleOfAgincourt-ch-1.0.0.vmod"
}
}
}
},
"the_drive_on_metz_cholmcc": {
"Module": {
"1.0.0": {
"DriveOnMetz-1.0-ch.vmod": {
"authors": [
"cholmcc"
],
"published_by": "cholmcc",
"published_at": 1690754400,
"requires": "3.6+",
"size": 2577539,
"sha256": "d8a460f16a9cbb43b58b571fa639a32e7ae793fe222eb34df1283a1d44d45848",
"url": "https://obj.vassalengine.org/gls/d/8/DriveOnMetz-1.0-ch.vmod"
}
}
}
},
"the_drive_on_metz_2nd_ed_davout": {
"Module": {
"1.0.0": {
"Metzv1.vmod": {
"authors": [
"Davout"
],
"published_by": "Davout",
"published_at": 1278194400,
"requires": "3.0.17",
"size": 1207507,
"sha256": "864978536351bc18647b8407561bd8f60b9d88f3dbadfc858f1635815d6834ca",
"url": "https://obj.vassalengine.org/gls/8/6/Metzv1.vmod"
}
}
}
}
}
Format is
project_name : {
package_name : {
release_name : {
file_name : {
authors: [ usernames ],
published_by: username,
published_at: date,
requires: vassal-version,
url: ...
}
}
}
}
A set of SQL queries like above would seem to do the trick, e.g.,
SELECT project_id FROM projects WHERE project_name = project_name
SELECT package_id FROM packages WHERE project_id = project_id AND package_name = package_name
SELECT release_id FROM releases WHERE package_id = package_id and version = release_name
SELECT user_id FROM users WHERE username = username
UPDATE files (...) VALUES (...) WHERE project_id == project_id AND filename = filename
Hopefully this will make life easier 
Yours,
Christian