<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Object search (frontend) | museum-digital: blog</title>
	<atom:link href="https://blog.museum-digital.org/tag/object-search-frontend/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.museum-digital.org</link>
	<description>A blog on museum-digital and the broader digitization of museum work.</description>
	<lastBuildDate>Tue, 25 Nov 2025 16:55:10 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://blog.museum-digital.org/wp-content/uploads/2020/01/cropped-mdlogo-code-512px-32x32.png</url>
	<title>Object search (frontend) | museum-digital: blog</title>
	<link>https://blog.museum-digital.org</link>
	<width>32</width>
	<height>32</height>
</image> 
<atom:link rel="search" type="application/opensearchdescription+xml" title="Search museum-digital: blog" href="https://blog.museum-digital.org/wp-json/opensearch/1.1/document" />	<item>
		<title>State of Development, October 2025</title>
		<link>https://blog.museum-digital.org/2025/11/25/state-of-development-october-2025/</link>
					<comments>https://blog.museum-digital.org/2025/11/25/state-of-development-october-2025/#respond</comments>
		
		<dc:creator><![CDATA[Joshua Ramon Enslin]]></dc:creator>
		<pubDate>Tue, 25 Nov 2025 16:55:09 +0000</pubDate>
				<category><![CDATA[Community]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Dissemination]]></category>
		<category><![CDATA[Frontend]]></category>
		<category><![CDATA[musdb]]></category>
		<category><![CDATA[Presentations]]></category>
		<category><![CDATA[New Features]]></category>
		<category><![CDATA[Object search (frontend)]]></category>
		<category><![CDATA[User interface]]></category>
		<guid isPermaLink="false">https://blog.museum-digital.org/?p=4564</guid>

					<description><![CDATA[A summary of recent updates and development around museum-digital in October 2025.]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">Development</h2>



<h3 class="wp-block-heading"><a href="https://en.about.museum-digital.org/software/frontend/">Frontend</a></h3>



<ul class="wp-block-list">
<li>Significantly reworked the display of transcriptions on object pages
<ul class="wp-block-list">
<li>Titles of transcriptions are now displayed
<ul class="wp-block-list">
<li>If none is set, the type of the transcription (original or translation) is used as a replacement</li>
</ul>
</li>



<li>Transcriptions are sorted by their titles</li>



<li>Improved the display of transcriptions in tiles
<ul class="wp-block-list">
<li>Problems with vertical scrolling are now solved</li>



<li>If only one transcription has been recorded, it will be displayed on the full width of the page</li>



<li>If there are more than two transcriptions for an object, they are folded in by default and can be unfolded later on</li>
</ul>
</li>
</ul>
</li>



<li>Batch export of object metadata via the API
<ul class="wp-block-list">
<li>Thus far available in JSON &amp; LIDO</li>



<li><a href="https://nat.museum-digital.de/swagger/#/object/jsonExportObjects">API documentation</a></li>



<li><a href="https://blog.museum-digital.org/2025/11/24/making-interoperability-easy/">See also</a></li>
</ul>
</li>



<li>Dots as a separator in floating point numbers for object measurements are replaced with a comma in languages that require that</li>



<li>Collection-specific ISIL IDs are used in the LIDO API</li>
</ul>



<h3 class="wp-block-heading"><a href="https://en.about.museum-digital.org/software/musdb/">musdb</a></h3>



<ul class="wp-block-list">
<li>Added a field for recording titles / names of transcriptions</li>



<li>Added the option to set collection-specific ISIL IDs</li>



<li>Setting object type tags via the improvement suggestions now correctly classifies the thus created link between object and tag</li>



<li>Additional shapes are now available
<ul class="wp-block-list">
<li>E.g.: round, square</li>
</ul>
</li>



<li>Object groups can now be filtered by whether they have a superordinate one or not</li>
</ul>



<h3 class="wp-block-heading">Dissemination</h3>



<ul class="wp-block-list">
<li>2025-10-08: <a href="https://www.jrenslin.de/talks/interoperabilitaet-schaffen-geschichten-aus-1001-importen-herbsttagung/">Presentation</a> at the Autumn Conference of the Working Group Documentation of the German Museum Association: &#8220;Interoperabilität schaffen &#8211; Geschichten aus 1001 Importen&#8221;
<ul class="wp-block-list">
<li><a href="https://files.museum-digital.org/de/Praesentationen/2025-10-08_1001-Importe_Herbsttagung-FG-Doku_JRE.pdf">PDF</a></li>



<li><a href="https://files.museum-digital.org/de/Praesentationen/2025-10-08_1001-Importe_Herbsttagung-FG-Doku_JRE.odp">ODP</a></li>
</ul>
</li>



<li>2025-10-14: <a href="https://www.jrenslin.de/talks/civers-2025/">Talk</a> on a workshop of the project <a href="https://www.dainst.org/forschung/projekte/citation-of-versioned-web-pages-by-pid-civers/5926">CiVers (Citation of Versioned Web Pages by PID)</a>
<ul class="wp-block-list">
<li><a href="https://files.museum-digital.org/de/Praesentationen/2025-10-14_museum-digital_Civers_JRE.pdf">PDF</a></li>



<li><a href="https://files.museum-digital.org/de/Praesentationen/2025-10-14_museum-digital_Civers_JRE.odp">ODP</a></li>
</ul>
</li>



<li>2025-10-17: <a href="https://verein.museum-digital.de/museum-digital-usertagung-2025/">museum-digital Usertagung 2025</a></li>
</ul>



<div class="wp-block-cgb-cc-by message-body" style="background-color:white;color:black"><img decoding="async" src="https://blog.museum-digital.org/wp-content/plugins/creative-commons/includes/images/by.png" alt="CC" width="88" height="31"/><p><span class="cc-cgb-name">This content</span> is licensed under a <a href="https://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 International license.</a> <span class="cc-cgb-text"></span></p></div>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.museum-digital.org/2025/11/25/state-of-development-october-2025/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-thumbnail><url>https://blog.museum-digital.org/wp-content/uploads/2025/11/AI-gen-blog-202511-state-of-2025-10.png-scaled.webp</url><width>600</width><height>467</height></post-thumbnail>	</item>
		<item>
		<title>Making Interoperability Easy</title>
		<link>https://blog.museum-digital.org/2025/11/24/making-interoperability-easy/</link>
					<comments>https://blog.museum-digital.org/2025/11/24/making-interoperability-easy/#respond</comments>
		
		<dc:creator><![CDATA[Joshua Ramon Enslin]]></dc:creator>
		<pubDate>Mon, 24 Nov 2025 15:56:37 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Frontend]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Interoperability]]></category>
		<category><![CDATA[New Features]]></category>
		<category><![CDATA[OAI-PMH]]></category>
		<category><![CDATA[Object search (frontend)]]></category>
		<guid isPermaLink="false">https://blog.museum-digital.org/?p=4538</guid>

					<description><![CDATA[Interoperability has been one of the focal issues around museum-digital practically since its inception. Offering different, simple ways to bring data into the system was a necessary requirement to even think of what we do. And offering simple ways to get the data out of the system again is just good practice &#8211; though all <a href="https://blog.museum-digital.org/2025/11/24/making-interoperability-easy/" class="more-link">...</a>]]></description>
										<content:encoded><![CDATA[
<p>Interoperability has been one of the focal issues around museum-digital practically since its inception. Offering different, simple ways to bring data into the system was a necessary requirement to even think of what we do. And offering simple ways to get the data out of the system again is just good practice &#8211; though all too often neglected.</p>



<p>To that end, there have traditionally been two primary ways for data retrieval. In musdb, one could run batch exports and receive a ZIP with some form of XML files. One per object, with the objects matching the results of any given object search.</p>



<p>On the other hand, there is the public API. Using URL manipulation, one can access the (primary) contents of each page in a machine-readable way. To access the JSON representation of an object&#8217;s published metadata, where the object&#8217;s ID is 7141 in the Hesse instance of museum-digital (URL: <a href="https://hessen.museum-digital.de/object/7141"><code>https://hessen.museum-digital.de/object/7141</code></a>), one simply has to insert <code>json</code> to the path: <code><a href="https://hessen.museum-digital.de/json/object/7141">https://hessen.museum-digital.de/json/object/7141</a></code>.</p>



<p>Next to the default JSON output, additional APIs are offered wherever suitable for a given data type. For objects, the primary additional output method is a <a href="http://lido-schema.org/">LIDO</a> API.</p>



<p>Thus far, the main limitation of the public API was that it only allowed one object (or institution, collection, etc.) to be queried at a time.</p>



<h2 class="wp-block-heading">Querying Object Metadata in Batches</h2>



<p>After a significant refactoring of the code to load object data for object pages &#8211; primarily to improve caching and allow for parallelized requests to the database &#8211; we are now finally able to offer APIs for querying object metadata in batch. Thanks to grouped database queries, performance and resource usage scale nicely. Taking simply the currently most recent objects in the Germany-wide instance of museum-digital: Loading all object data of one object and presenting it in JSON takes 0.0087 seconds and loading and generating the JSON for the 100 most recent objects takes 0.197 seconds (or 0.00197 per object). Note that not all queries for all aspects of an object&#8217;s metadata are grouped yet, performance may thus get even better over time. This does also not yet account for the overhead of the many HTTPs requests one would previously need to execute to get each object&#8217;s metadata one by one &#8211; real performance improvements are thus even greater.</p>



<p>Now, how to access object metadata in batches?</p>



<p>The batch access is linked with the search API and reuses its main query parameter (&#8220;s&#8221;). Say, if one is searching for objects related to Berlin (a.k.a. the place of the ID 61), the URL of the respective search page would be <code>https://global.museum-digital.org/objects?s=place%3A61</code>. The corresponding API for retrieving all of the objects&#8217; published metadata would then be <code>https://global.museum-digital.org/export/json/place:61?limit=24&amp;offset=0</code>. Like the search page itself and its primary API (<code>/json/objects</code>), the full batch export API is paginated with a maximum of currently 100 objects per page being returned.</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="576" src="https://blog.museum-digital.org/wp-content/uploads/2025/11/20251124_15h36m15s_frontend-batch-export-object-metadata-ui-1024x576.webp" alt="Link to batch exporting search results in the frontend" class="wp-image-4540" srcset="https://blog.museum-digital.org/wp-content/uploads/2025/11/20251124_15h36m15s_frontend-batch-export-object-metadata-ui-1024x576.webp 1024w, https://blog.museum-digital.org/wp-content/uploads/2025/11/20251124_15h36m15s_frontend-batch-export-object-metadata-ui-300x169.webp 300w, https://blog.museum-digital.org/wp-content/uploads/2025/11/20251124_15h36m15s_frontend-batch-export-object-metadata-ui.webp 1292w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Additional to URL manipulation, the batch export API is linked in the menu of object search results pages.</figcaption></figure>



<p>Currently, the batch export of full object metadata is available for JSON and LIDO (XML) representations of the object data. More can rather easily be added later, should a demand arise.</p>



<h2 class="wp-block-heading">OAI</h2>



<p>Implementing a performant way to export full object metadata in bulk was one of the two main missing components for the long-missing implementation of an <a href="https://www.openarchives.org/pmh/">OAI-PMH</a> API.</p>



<p>OAI is a standard tailored towards data harvesting. Say, an external service like the German Digital Library or Worldcat wants to do something with external data from diverse sources, e.g. to also display objects or implement a search across the different collections / libraries to find which one has which object / book. To be able to do so, they need to be able to access the respective data in some way. Ideally, using a common standard that describes how to query data, helps to identify any data sets that need to be updated or added (or deleted), and finally presents a uniform way to access the data periodically. That, exactly, is OAI-PMH.</p>



<p>In a nutshell: OAI-PMH allows other services to copy all (published) data from another service in a maschine-readable way and can thus significantly improve reuse in aggregation. Of course this only applies to technical questions; legally, potential re-users need to comply with the metadata license applied by the initial data provider regardless of the (technical) means of access.</p>



<p>Since last week, museum-digital now provides a OAI-PMH API at <code>/oai</code> respective to a given subdomain. E.g.: <code>https://hessen.museum-digital.de/oai</code>. As of now, the OAI-PMH API provides access to the objects&#8217; metadata using LIDO (XML) and the mandatory OAI-DC format.</p>



<p>Note that there are some caveats remaining for now: First, the LIDO representation of object metadata is not (and can by definition not be) as complete and fine-grained as the JSON API. It is also not exactly similar to the LIDO as returned by exports from musdb (one is formed natively in PHP, the other using XSLT, leading to divergent development paths). Also, the LIDO output lists different identifiers from the ones used by the OAI-PMH API and the OAI-DC representations otherwise.</p>



<p>Finally, the OAI-PMH API at museum-digital does not implement OAI-PMH data sets to group collections. Instead, it follows the existing search logic (essentially providing a new endpoint per query). Example searches via OAI might thus look as follows:</p>



<ul class="wp-block-list">
<li>All objects from the Agrargeschichte instance of museum-digital, represented in OAI-DC: <a href="https://agrargeschichte.museum-digital.de/oai?verb=ListRecords&amp;metadataPrefix=oai_dc">https://agrargeschichte.museum-digital.de/oai?verb=ListRecords&amp;metadataPrefix=oai_dc</a></li>



<li>All objects linked to Berlin (place #61), in the Berlin instance of museum-digital, represented in LIDO: <a href="https://berlin.museum-digital.de/oai/place:61?verb=ListRecords&amp;metadataPrefix=lido">https://berlin.museum-digital.de/oai/place:61?verb=ListRecords&amp;metadataPrefix=lido</a></li>



<li>All objects of the Freies Deutsches Hochstift, Frankfurt am Main, represented in LIDO: <a href="https://hessen.museum-digital.de/oai/institution:1?verb=ListRecords&amp;metadataPrefix=lido">https://hessen.museum-digital.de/oai/institution:1?verb=ListRecords&amp;metadataPrefix=lido</a></li>



<li>All objects from Baranya with only their identifiers: <a href="https://ba.hu.museum-digital.org/oai?verb=ListIdentifiers&amp;metadataPrefix=lido">https://ba.hu.museum-digital.org/oai?verb=ListIdentifiers&amp;metadataPrefix=lido</a></li>
</ul>



<h2 class="wp-block-heading">Credits</h2>



<p>Credits where credit is due: the Städel Museum deserves praise for their implementation of OAI-PMH. For me personally, seeing the <a href="https://sammlung.staedelmuseum.de/de/oai/guide">Städel&#8217;s API</a> was the first time I saw a visibly stateless OAI-PMH implementation, enabled by the ingenious idea of using machine-readable, JSON-encoded resumption tokens over UIDs that have to be resolved on the server side. I spent weeks (or months?) making museum-digital&#8217;s frontend stateless. By following the Städel&#8217;s example, it can remain so even while offering an OAI-PMH API.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<div class="wp-block-cgb-cc-by message-body" style="background-color:white;color:black"><img decoding="async" src="https://blog.museum-digital.org/wp-content/plugins/creative-commons/includes/images/by.png" alt="CC" width="88" height="31"/><p><span class="cc-cgb-name">This content</span> is licensed under a <a href="https://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 International license.</a> <span class="cc-cgb-text"></span></p></div>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.museum-digital.org/2025/11/24/making-interoperability-easy/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-thumbnail><url>https://blog.museum-digital.org/wp-content/uploads/2025/11/20251124-absurdresmasterpiececircuitlight-poster-1024x1024.webp</url><width>600</width><height>600</height></post-thumbnail>	</item>
		<item>
		<title>Sort by Beauty</title>
		<link>https://blog.museum-digital.org/2025/03/06/sort-by-beauty/</link>
		
		<dc:creator><![CDATA[Joshua Ramon Enslin]]></dc:creator>
		<pubDate>Wed, 05 Mar 2025 23:25:18 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Frontend]]></category>
		<category><![CDATA[Artificial Intelligence]]></category>
		<category><![CDATA[New Features]]></category>
		<category><![CDATA[Object search (frontend)]]></category>
		<category><![CDATA[Search]]></category>
		<guid isPermaLink="false">https://blog.museum-digital.org/?p=4333</guid>

					<description><![CDATA[Last month a new sort option appeared on museum-digital: "Aesthetics prediction". Thoughts on AI, beauty, and the discriminating nature of sorting.]]></description>
										<content:encoded><![CDATA[
<p><a href="https://blog.museum-digital.org/2025/02/14/state-of-dev-december-2024-january-2025/">Last month</a> a new sort option appeared on museum-digital: &#8220;Aesthetics prediction&#8221;. Based on the <a href="https://github.com/LAION-AI/aesthetic-predictor">LAION aesthetics predictor</a>, each published object&#8217;s main thumbnail aesthetics are scored. The objects can then be sorted according to this score.</p>



<h2 class="wp-block-heading">AI, Aesthetics and Discrimination</h2>



<p>When working with AI it is common to criticize the inherent biases of the models used. Already underrepresented entities (people, viewpoints, etc.) are excluded, because they are not sufficiently represented in the data the model was trained on. In turn, AI repeats what it learned &#8211; pre-existing biases in society are replayed and reinforced by AI.</p>



<p>A second, well-founded criticism against AI applications is their impreciseness, their tendency to &#8220;hallucinate&#8221; entirely wrong results, and the lack of reproducibility of results.</p>



<p>Both criticisms are entirely valid. And both hint at why AI might be a useful tool exactly for generating a sort order by aesthetics. Like AI, aesthetics are imprecise: Ask 10 people to rank some pictures by their aesthetic appeal and you will get 10 different answers. But the general thrust of the answers will likely be more or less the same. There are societal rules &#8211; biases &#8211; for what pictures are more or less beautiful. But they are fuzzy and interpreted differently by each and every observer. A sense of aesthetics is about learning and reproducing those biases &#8211; learned by the inputs we learn in everyday life -, just as AI will be biased based on the data it is trained on.</p>



<p>Sorting then is, in essence, an exercise of discrimination. Sorting entries by ID / age in a database system will favor the newest entries and discrimate against older ones. Sorting entries alphabetically in an ascending order will favor entries whose title starts with &#8220;A&#8221; while it will discrimate against those whose title starts with &#8220;Z&#8221;. Sorting based on an AI-generated rank is discriminating. Sorting by <em>beauty</em> or <em>aesthetics</em> is as well. AI allows sorting by beauty.</p>



<h3 class="wp-block-heading">What is discriminated against?</h3>



<p>Now, if everything in sorting is discriminating, it is all the more important to consider what is actually evaluated. In other words, on what basis the discrimination takes place when ranking digitized museum objects by the beauty of their digital reproductions. As stated above, the objects are scored based on the aesthetics score established for their main thumbnails.</p>



<p>Images then have a range of aspects that influence their aesthetics. Image composition, lighting, contrast, the motive, and many more (an art historian could likely list hundreds). For the common critique, it is essentially only the motive that matters: Favoring images of <em>white</em> women over images of Asian men reproduces a range of societal problems that should not be reproduced. Transferred to object photography, the motive may be further differenciated between object type and the actual motive (e.g. of a painting). And such a discrimination is noticable in the results: Paintings seem to be generally slightly better ranked than pictures of tools. A bias based on the displayed subjects of e.g. different paintings is not something anybody from the team would have noticed, but is to be assumed that one will exists.</p>



<p>On the other hand, the influence of motive-focused biases is many times weaker than the actually useful discrimination based on the technical aspects of the images. Objects images taken by a professional photographer with up-to-date equipment are ranked much better than images taken using a digital camera from the 1990s. Images without a timestamp or a watermark are ranked better than ones that do feature one. Images taken with proper lighting and contrast settings are ranked much better than images taken in a dark room, presenting the objects in gray on black. Similarly, one of the most important facets contributing to the aesthetics score the predictor returns seems to be the composition: If an object is centered in the photo taken, it will score way above images featuring multiple objects at different corners of the image (a classic example would be images that show both the actual object and a photo bar).</p>



<p>To reiterate, these technical aspects are visibly the main contributors to the score. And discriminating based on those images is actually useful: It allows museum-digital to present newer users who are just browsing the published collections with objects recorded with a more consistently high visual quality.</p>



<h3 class="wp-block-heading">What are the alternatives, <em>or</em> who is the audience?</h3>



<p>museum-digital suffers the old problem of a lack of a specified target audience. A common user may be a hobbyist looking for other versions of the model train they just bought. They might be a person interested in what art of the 16th century looked like. Or which museum to visit next. Or they might be a specialist, with a much better idea of what they are actually looking for. It is common for users to leave the page after less than a minute. But there is also an astonishing number of users who stay for hours. Accordingly, it is all the more important to offer (sort) options catering to different needs.</p>



<p>A new user who chanced upon the platform and randomly browses it with no further background on museums will benefit from the new sorting method. Sort orders like sorting by ID or title are linear and follow a consistent logic &#8211; but that logic may in essence just reflect its own type of randomness. Sorting newer objects over older ones is essentially a random sort order, if the museum does &#8211; as is usual &#8211; record objects as they are needed in an exhibition, newly enter the museum or are simply the next object in the shelf &#8211; all of which follow a very particular, not publicly comprehensible logic. Similarly, sorting objects by their names or titles is linear. In contrast to the object entry&#8217;s age in the database, it is also immediately comprehensible to users. But museums are free to determine the object name freely &#8211; and often this is necessary. As per the best practices around publication on museum-digital, an object name should be descriptive and usable to distinguish between different objects. As most objects simply are nameless by themselves, this often means that a colleague at the responsible museum <em>invented</em> a name. Seeing a green vase, there may be a rather short list of names that come to mind for most people &#8211; &#8220;green vase&#8221;, &#8220;vase, green&#8221;, &#8220;vase&#8221;, &#8220;green-ish vase&#8221;, &#8220;vase in pale green&#8221; -, making the selection of the actual name comprehensible. But &#8220;green vase&#8221; is in a very different position from &#8220;vase, green&#8221; when sorting objects alphabetically. One might actually be involuntarily be sorting the objects by curator.</p>



<p>Other than an object&#8217;s title/name and institution, the one other facet users see when listing objects on an overview or search page is the object&#8217;s thumbnail. And as a sense of aesthetics &#8211; fuzzy as it certainly is &#8211; is roughly shared among most people (with globalization, even actually <em>most</em> people), sorting objects of diverse origins by the aesthetics of their thumbnails suddenly starts to look like a comparatively relatable and reasonable sort order. Nobody will agree 100%, but the rough order instinctively makes sense. That&#8217;s more than can be said about the alternatives, unless one actually looks at the sort settings.</p>



<p>Presenting new users with a more consistently appealing and streamlined set of search results (at the first glance at least) on the other hand might encourage them to stay for longer. And if they stay longer, they might end up actually chancing upon more objects &#8211; including ones with less well-taken pictures &#8211; eventually.</p>



<p>For those users who are researchers and/or specialists, who need a linear, logical sorting, the aesthetics prediction sort option is obviously of much less merit. But it is safe to assume that is this group of users are overrepresented in the above-mentioned group of people who browse the site for hours. And it is also rather safe to assume, that they are generally more used to online databases and the existence of different sort options. Consequently, it can be assumed that they are able to change the sort settings to their needs &#8211; or at least have a higher likelihood of being able to do so.</p>



<p>Being very useful for the general public while less so for specialists who can be assumed to be more skilled anyway, it is sensible to make aesthetics-based sorting the default. There are thus three different default sort orders, depending on what objects one lists:</p>



<ul class="wp-block-list">
<li>If a user lists all objects of a given instance, the default sort order remains sorting by the age of the entries</li>



<li>If a fulltext search was performed, the results are sorted by how well the query string matched the entry by default</li>



<li>Otherwise &#8211; in case of ID-based search queries like a query for all objects created in Berlin &#8211; the search results are sorted using the new aesthetics prediction by default</li>
</ul>



<h2 class="wp-block-heading">Operationalizing the Prediction</h2>



<p>On a side note, operationalizing the prediction proved a challenge in itself. All of museum-digital&#8217;s servers are built for traditional web hosting. Hence, they feature quite powerful CPUs, lots of RAM and no GPU. In other words: They are least suitable for AI applications. And they are all the more unsuitable for scoring over a million thumbnails in bulk while remaining otherwise performant.</p>



<p>If the existing servers cannot be used, there are three reasonable alternatives. First, we could have simply rented another server. As a mostly volunteer-run project, this was not an option. Second, we could have used browser-based AI to calculate the score on users&#8217; machines &#8211; we might have e.g. let an uploading user&#8217;s machine calculate the score of a thumbnail whenever the user uploads an image. But the users&#8217; PCs vary widely, laptops and tablets (usually again without GPUs) have become more and more popular when compared to workstation, and thus such an approach would have made uploading images unbearably slow. It would have also not helped with calculating scores for the already pre-existing million of objects and their main thumbnails. Again, this was not really an option.</p>



<p>Finally, we could use our private machines (specifically: mine). And that is the approach we chose. Based on a new search API parameter aesthetics_score for querying objects whose thumbnails have not been scored yet (aesthetics_score:10001), my PC downloads the yet unevaluated object thumbnails and evaluates a score for each. These scores are then locally stored in one SQLite database per instance of museum-digital and exported into a CSV file. The CSV file is then uploaded to the server and ingested back into the database to set the aesthetics score for the relevant images. The search index is automatically updated with the new scores following the upload.</p>



<p>This structure unfortunately also means that the scoring does not occur in real-time. Depending on when I turn on or shut down my PC, the most recently published objects may remain uncategorized for a while. To be able to fairly represent such objects, they are assigned an impossibly high score that serves to both sort them above the already-scored objects while also marking them as yet unscored. Specifically, the aesthetics predictor returns a score between 0 and 10. As calculating with full integers is generally much more simple than working with floating point numbers, the score is multiplied by a thousand and then rounded, leaving one with a score between 0 and 10000. An object yet unscored will hence be assigned a default score of 10001.</p>



<div class="wp-block-cgb-cc-by message-body" style="background-color:white;color:black"><img loading="lazy" decoding="async" src="https://blog.museum-digital.org/wp-content/plugins/creative-commons/includes/images/by.png" alt="CC" width="88" height="31"/><p><span class="cc-cgb-name">This content</span> is licensed under a <a href="https://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 International license.</a> <span class="cc-cgb-text"></span></p></div>
]]></content:encoded>
					
		
		
		<post-thumbnail><url>https://blog.museum-digital.org/wp-content/uploads/2025/03/landscape-ai.avif</url><width>600</width><height>336</height></post-thumbnail>	</item>
	</channel>
</rss>
