{ "mode": "online", "ui": { "title": "Medieval Illumination Detector", "shortTitle": "IIIF — Illumination Detector", "subtitle": "ONNX • Vue 3 • Mirador", "description": "This interface loads binary image classifiers trained for medieval manuscript folios. It can classify a IIIF manifest or a local image, identify illuminated folios, correct model's suggestions and export the selected canvases as a new IIIF manifest with machine-generated classification annotations.", "descriptionCollapsedByDefault": true, "showHelp": true, "showArtefactsInput": true, "defaultManifestUrl": "https://gallica.bnf.fr/iiif/ark:/12148/btv1b52508970d/manifest.json", "texts": { "showInfo": "Info / Citation", "hideInfo": "Hide", "artefactsLabel": "Artifacts web folder", "artefactsPlaceholder": "../Artefacts", "artefactsHelp": "The browser cannot read arbitrary /Users/... paths directly. Start a local HTTP server and point this field to the served Artefacts directory.", "runsLabel": "Available models", "refreshRuns": "Refresh model list", "loadModel": "Load model", "reset": "Reset", "tabsAriaLabel": "Input mode", "iiifTab": "IIIF Manifest", "imageTab": "Image", "manifestUrlLabel": "IIIF manifest URL", "manifestUrlPlaceholder": "https://.../manifest.json", "loadManifest": "Load manifest", "classify": "Classify", "stop": "Stop", "thresholdLabel": "Illuminated threshold", "threshold": "Threshold", "resetOptimalThreshold": "Reset optimal threshold", "exportFacetSelection": "Export current facet selection (IIIF manifest)", "exportFacetHelp": "The exported manifest contains the folios currently shown by the active facet. Switch facet to export illuminated, non-illuminated, corrected, pending, or all folios.", "optimalThresholdLabel": "Model optimal threshold", "parallelLabel": "Parallelization", "parallelHelp": "Number of folios classified in parallel. Use 1 for maximum stability, or 3–5 for faster processing.", "heuristicSettingsLabel": "Negative heuristic", "heuristicEnabled": "Enable forced non-illuminated labels", "heuristicKeywordsPlaceholder": "One keyword per line", "heuristicKeywordsHelp": "If a canvas label contains one of these keywords, it is classified as non_illuminated without model inference.", "heuristicSkipped": "heuristic non-illuminated", "heuristicHelp": "Negative heuristic: cover/spine/flyleaf/recto/verso labels can be forced to non_illuminated before inference.", "exportManifest": "Export IIIF manifest with illuminations", "pages": "folios", "facetLabel": "Facet", "allFacet": "All", "positiveFacet": "Illuminated (>= threshold)", "negativeFacet": "Non-illuminated", "overriddenFacet": "Corrected (override)", "pendingFacet": "Pending", "errorsFacet": "Errors", "editMode": "Correction mode", "selection": "Selection", "current": "Current", "histogramTitle": "p(illumination) histogram — selection", "histogramHelp": "Click a bar to open the folio", "emptyHistogramTitle": "Empty histogram", "emptyHistogram": "No folio in the selection", "localImageLabel": "Local image", "dropImage": "Drag and drop an image here", "browseImage": "or use the file picker below", "predict": "Predict", "clear": "Clear", "imageHelp": "The prediction and probability bars are displayed on the right.", "imageResult": "Image result", "predictionLabel": "Prediction", "probabilities": "Probabilities", "runPrediction": "Run prediction", "noImageResult": "No result yet.", "loadImageHelp": "Load an image from the Image tab, then click Predict.", "imagePreviewAlt": "Image preview", "classLabelPrefix": "class", "projectLogoAlt": "O.D.I.L. project logo", "expandMirador": "▸ Expand Mirador", "collapseMirador": "▾ Collapse Mirador", "openSelection": "Open selection", "next": "Next", "previous": "Previous", "override": "override", "positiveShort": "illumination", "resetOverride": "Reset", "scoreLabel": "p(illumination)", "statusReady": "Ready. Select a model, then load it.", "statusLoadingRuns": "Loading model list…", "statusOnlineRuns": "Online models", "statusLocalRuns": "Local models found", "statusRunsError": "Unable to load model list.", "statusOnlineRunMissing": "Online model entry not found in app.config.json.", "statusLoadingModel": "Loading ONNX model and configuration…", "statusModelLoaded": "Model loaded", "statusLoadRunError": "Model loading error", "statusResetOk": "Reset complete.", "statusLoadModelFirst": "Load a model first.", "statusLoadingManifest": "Loading manifest…", "statusManifestLoaded": "Manifest loaded", "statusManifestError": "Manifest error", "statusLoadManifestFirst": "Load a manifest first.", "statusLoadModelBeforeImage": "Load a model before adding an image.", "statusDroppedFileNotImage": "The dropped file is not an image.", "statusSelectedFileNotImage": "The selected file is not an image.", "statusClassificationRunning": "Classification running…", "parallelSuffix": "in parallel", "statusStopped": "Stopped", "statusDone": "Done", "positivesAtThreshold": "illuminations at threshold", "statusStopRequested": "Stop requested.", "statusPending": "Pending", "statusError": "Error", "statusProcessing": "Processing…", "statusExportOk": "IIIF v3 manifest exported", "statusImageLoaded": "Image loaded", "statusImageInference": "Running image inference…", "statusImageDone": "Image processed", "statusPredictionError": "Prediction error", "errorModelNotFound": "Unable to find an ONNX model.", "errorNoCanvasImageUrl": "No image URL found for this canvas.", "helpTitle": "Local help", "helpStep1": "1) Place index.html next to app.config.json.", "helpStep2": "2) Start a server from the parent directory: python -m http.server 8000.", "helpStep3": "3) Open http://localhost:8000/web/ and set ../Artefacts as the artifacts web folder." } }, "project": { "show": true, "name": "O.D.I.L.", "description": "This application was created as part of the O.D.I.L. project.", "url": "https://projet.biblissima.fr/fr/appels-projets/projets-retenus/odil-objet-detection-illuminations", "institution": "École nationale des chartes - PSL", "institutionUrl": "https://www.chartes.psl.eu/", "logoUrl": "./assets/images/odil-logo.png" }, "assets": { "iiifLogoUrl": "./assets/images/iiif-logo.png", "projectLogoUrl": "./assets/images/odil-logo.png" }, "labels": { "positive": "illuminated", "negative": "non_illuminated", "positiveAliases": [ "illuminated", "illumination", "illustration", "1" ], "negativeAliases": [ "non_illuminated", "non_illumination", "non_illustration", "0" ] }, "citation": { "show": true, "title": "How to cite", "text": "If you use this application or exported IIIF manifests in your work, please cite the associated software and model repository.", "short": "Terriel, Lucas and Jolivet, Vincent. BSICLE / Medieval Illumination Detector. École nationale des chartes – PSL, O.D.I.L. (Biblissima project), 2026.", "url": "", "linkLabel": "" }, "heuristic": { "enabled": true, "collapsedByDefault": true, "keywordsForceNegative": [ "tranche de tête", "gouttière", "plat", "page de garde", "garde", "page", "dos", "verso", "recto", "contreplat", "reliure", "sup.", "inf.", "ar", "br", "bv", "front", "inside", "flyleaf", "back", "general shot", "cover", "spine" ] }, "local": { "defaultArtefactsBaseUrl": "../Artefacts" }, "online": { "huggingFaceRepoLabel": "ENC-PSL/BSICLE", "huggingFaceRepoURL": "https://huggingface.co/ENC-PSL/BSICLE", "runs": [ { "id": "mobilenetv2", "label": "MobileNet v2", "baseUrl": "https://huggingface.co/ENC-PSL/BSICLE/resolve/main/mobilenetv2" }, { "id": "mobilenetv3_large", "label": "MobileNet v3 large", "baseUrl": "https://huggingface.co/ENC-PSL/BSICLE/resolve/main/mobilenetv3_large" }, { "id": "mobilenetv3_small", "label": "MobileNet v3 small", "baseUrl": "https://huggingface.co/ENC-PSL/BSICLE/resolve/main/mobilenetv3_small" }, { "id": "mobilevitv2", "label": "MobileViTv2", "baseUrl": "https://huggingface.co/lterriel/ENC-PSL/BSICLE/resolve/main/mobilevitv2" } ] } }