diff --git a/app/public/cantusdata/helpers/postprocess_iiif.py b/app/public/cantusdata/helpers/postprocess_iiif.py index f4feaf06..4a413bb0 100644 --- a/app/public/cantusdata/helpers/postprocess_iiif.py +++ b/app/public/cantusdata/helpers/postprocess_iiif.py @@ -1,4 +1,5 @@ """Customizations for certain IIIF manifests that will not work as provided""" + import urllib diff --git a/cantaloupe/Dockerfile b/cantaloupe/Dockerfile new file mode 100644 index 00000000..aaf186fc --- /dev/null +++ b/cantaloupe/Dockerfile @@ -0,0 +1,32 @@ +FROM eclipse-temurin:17-jre AS jre-base + +ENV JAVA_HOME=/opt/java/openjdk +ENV PATH="${JAVA_HOME}/bin:${PATH}" + +# Install various dependencies: +# - unzip for unpacking the Cantaloupe jars +# - wget for downloading the OpenJPEG + Cantaloupe files +RUN apt-get update && apt-get install -y \ + unzip \ + wget + +# Download OpenJPEG binaries and unpack them. +# OpenJPEG is a dependency when we want Cantaloup +# to server jpeg and jpeg2000 images. +RUN mkdir /opt/openjpeg && mkdir /opt/openjpeg/openjpeg-2.5.0 +WORKDIR /opt/openjpeg +RUN wget https://github.com/uclouvain/openjpeg/releases/download/v2.5.0/openjpeg-v2.5.0-linux-x86_64.tar.gz && \ + tar -xzf openjpeg-v2.5.0-linux-x86_64.tar.gz && \ + rm openjpeg-v2.5.0-linux-x86_64.tar.gz && \ + mv openjpeg-v2.5.0-linux-x86_64/* openjpeg-2.5.0 + +# Download Cantaloupe JARs and unpack them: +RUN mkdir /opt/cantaloupe +WORKDIR /opt/cantaloupe +RUN wget https://github.com/cantaloupe-project/cantaloupe/releases/download/v5.0.5/cantaloupe-5.0.5.zip && \ + unzip cantaloupe-5.0.5.zip && \ + rm cantaloupe-5.0.5.zip + +COPY ./cantaloupe.properties /etc/cantaloupe/cantaloupe.properties + +EXPOSE 8182 \ No newline at end of file diff --git a/cantaloupe/cantaloupe.properties b/cantaloupe/cantaloupe.properties new file mode 100644 index 00000000..a768219b --- /dev/null +++ b/cantaloupe/cantaloupe.properties @@ -0,0 +1,755 @@ +########################################################################### +# Sample Cantaloupe configuration file +# +# Copy this file to `cantaloupe.properties` and edit as desired. +# +# Keys may change from version to version. See the "Upgrading" section of +# the website. +# +# Most changes will take effect without restarting. Those that won't are +# marked with "!!". +########################################################################### + +# !! Leave blank to use the JVM default temporary directory. +temp_pathname = + +# !! Configures the HTTP server. (Standalone mode only.) +http.enabled = true +http.host = 0.0.0.0 +http.port = 8182 + +# !! Configures the HTTPS server. (Standalone mode only.) +https.enabled = false +https.host = 0.0.0.0 +https.port = 8183 + +# !! Available values are `JKS` and `PKCS12`. (Standalone mode only.) +https.key_store_type = JKS +https.key_store_password = myPassword +https.key_store_path = /path/to/keystore.jks +https.key_password = myPassword + +# !! Constrains the size of the web server's thread pool. Leave blank to +# use the defaults. +http.min_threads = +http.max_threads = + +# !! Maximum size of the request queue. Leave blank to use the default. +http.accept_queue_limit = + +# Base URI to use for internal links, such as Link headers and JSON-LD +# @id values, in a reverse-proxy context. This should only be used when +# X-Forwarded-* headers cannot be used instead. (See the user manual.) +base_uri = + +# Normally, slashes in a URI path component must be percent-encoded as +# "%2F". If your proxy is not able to pass these through without decoding, +# you can define an alternate character or character sequence to substitute +# for a slash. Supply the non-percent-encoded version here, and use the +# percent-encoded version in URLs. +slash_substitute = + +# Maximum number of pixels to return in a response, to prevent overloading +# the server. Requests for more pixels than this will receive an error +# response. Set to 0 for no maximum. +max_pixels = 10000000 + +# Maximum scale to allow (1.0 = full scale; 0 = no maximum). +max_scale = 1.0 + +# A meta-identifier is a superset of an identifier that includes other +# information like a page number and/or scale constraint. A meta-identifier +# transformer transforms a meta-identifier to and from a string in a URI +# path component. +# Available transformers include `StandardMetaIdentifierTransformer` and +# `DelegateMetaIdentifierTransformer`. See the user manual for more +# information about meta-identifiers and these options. +meta_identifier.transformer = StandardMetaIdentifierTransformer + +# Character sequence that separates the components of a meta-identifier in +# the identifier portion of a URI. +meta_identifier.transformer.StandardMetaIdentifierTransformer.delimiter = ; + +# If true, HTTP >= 400-level responses are logged at WARN and ERROR level. +# This may result in multiple log statements for the same error, but it may +# also help diagnose errors that have evaded logging. +log_error_responses = false + +print_stack_trace_on_error_pages = true + +########################################################################### +# DELEGATE SCRIPT +########################################################################### + +# Enables the delegate script: a Ruby script containing various delegate +# methods. (See the user manual.) +delegate_script.enabled = false + +# !! This can be an absolute path, or a filename; if only a filename is +# specified, it will be searched for in the same folder as this file, and +# then the current working directory. +delegate_script.pathname = delegates.rb + +########################################################################### +# ENDPOINTS +########################################################################### + +# Enables the IIIF Image API 1.x endpoint, at /iiif/1. +endpoint.iiif.1.enabled = false + +# Enables the IIIF Image API 2.x endpoint, at /iiif/2. +endpoint.iiif.2.enabled = true + +# Enables the IIIF Image API 3.x endpoint, at /iiif/3. +endpoint.iiif.3.enabled = true + +# Minimum size that will be used in info.json `sizes` keys. +endpoint.iiif.min_size = 64 + +# Minimum size that will be used in info.json `tiles` keys. The user manual +# explains how these are calculated. +endpoint.iiif.min_tile_size = 512 + +# If true, requests for sizes other than those contained in an information +# response will be denied. +endpoint.iiif.restrict_to_sizes = false + +# Enables the Control Panel, at /admin. +endpoint.admin.enabled = false +endpoint.admin.username = admin +endpoint.admin.secret = + +# Enables the administrative HTTP API. (See the user manual.) +endpoint.api.enabled = false + +# HTTP Basic credentials to access the HTTP API. +endpoint.api.username = +endpoint.api.secret = + +# If true, sources and caches will be checked, resulting in a more robust +# but slower health check. Set this to false if these services already have +# their own health checks. +endpoint.health.dependency_check = false + +########################################################################### +# SOURCES +########################################################################### + +# Uses one source for all requests. Available values are `FilesystemSource`, +# `HttpSource`, `JdbcSource`, `S3Source`, and `AzureStorageSource`. +source.static = FilesystemSource + +# If true, `source.static` will be overridden, and the `source()` delegate +# method will be used to select a source per-request. +source.delegate = false + +#---------------------------------------- +# FilesystemSource +#---------------------------------------- + +# How to look up files. Allowed values are `BasicLookupStrategy` and +# `ScriptLookupStrategy`. ScriptLookupStrategy uses the delegate script for +# dynamic lookups; see the user manual. +FilesystemSource.lookup_strategy = BasicLookupStrategy + +# Server-side path that will be prefixed to the identifier in the URL. +# Trailing slash is important! +FilesystemSource.BasicLookupStrategy.path_prefix = /srv/images/ + +# Server-side path or extension that will be suffixed to the identifier in +# the URL. +FilesystemSource.BasicLookupStrategy.path_suffix = + +#---------------------------------------- +# HttpSource +#---------------------------------------- + +# Trusts insecure certificates and cipher suites. +HttpSource.allow_insecure = false + +# Request timeout in seconds. +HttpSource.request_timeout = + +# Tells HttpSource how to look up resources. Allowed values are +# `BasicLookupStrategy` and `ScriptLookupStrategy`. ScriptLookupStrategy +# uses a delegate method for dynamic lookups; see the user manual. +HttpSource.lookup_strategy = BasicLookupStrategy + +# URL that will be prefixed to the identifier in the request URL. +# Trailing slash is important! +HttpSource.BasicLookupStrategy.url_prefix = http://localhost/images/ + +# Path, extension, query string, etc. that will be suffixed to the +# identifier in the request URL. +HttpSource.BasicLookupStrategy.url_suffix = + +# Enables access to resources that require HTTP Basic authentication. +HttpSource.BasicLookupStrategy.auth.basic.username = +HttpSource.BasicLookupStrategy.auth.basic.secret = + +# Read data in chunks when it may be more efficient. (This also may end up +# being less efficient, depending on many variables; see the user manual.) +HttpSource.chunking.enabled = true + +# Chunk size. +HttpSource.chunking.chunk_size = 512K + +# The per-request chunk cache caches downloaded chunks in memory during +# a request, and clears them when the request is complete. +HttpSource.chunking.cache.enabled = true + +# Max per-request chunk cache size. +HttpSource.chunking.cache.max_size = 5M + +#---------------------------------------- +# S3Source +#---------------------------------------- + +# !! Endpoint URI. Only needed for non-AWS endpoints. +S3Source.endpoint = + +# !! AWS region. Only needed for AWS endpoints. +S3Source.region = + +# !! Credentials for your AWS account. +# See: http://aws.amazon.com/security-credentials +# Note that this info can be obtained from elsewhere rather than setting +# it here; see the user manual. +S3Source.access_key_id = +S3Source.secret_key = + +# How to look up objects. Allowed values are `BasicLookupStrategy` and +# `ScriptLookupStrategy`. ScriptLookupStrategy uses a delegate method for +# dynamic lookups; see the user manual. +S3Source.lookup_strategy = BasicLookupStrategy + +# !! Name of the bucket containing images to be served. +S3Source.BasicLookupStrategy.bucket.name = + +# Path within the bucket that will be prefixed to the identifier in the URL. +# Trailing slash is important! +S3Source.BasicLookupStrategy.path_prefix = + +# Path or extension that will be suffixed to the identifier in the URL. +S3Source.BasicLookupStrategy.path_suffix = + +# Read data in chunks when it may be more efficient. (This also may end up +# being less efficient, depending on many variables; see the user manual.) +S3Source.chunking.enabled = true + +# Chunk size. +S3Source.chunking.chunk_size = 512K + +# The per-request chunk cache caches downloaded chunks in memory during +# a request, and clears them when the request is complete. +S3Source.chunking.cache.enabled = true + +# Max per-request chunk cache size. +S3Source.chunking.cache.max_size = 5M + +#---------------------------------------- +# AzureStorageSource +#---------------------------------------- + +# !! Name of your Azure account. +# Leave blank if using URI with a SAS token in your object key. +AzureStorageSource.account_name = + +# !! Key of your Azure account. +# Leave blank if using URI with a SAS token in your object key. +AzureStorageSource.account_key = + +# !! Name of the container containing images to be served. +# Leave blank if using URI with the container in your object key. +AzureStorageSource.container_name = + +# Tells AzureStorageSource how to look up objects. Allowed values are +# `BasicLookupStrategy` and `ScriptLookupStrategy`. ScriptLookupStrategy +# uses a delegate method for dynamic lookups; see the user manual. +AzureStorageSource.lookup_strategy = BasicLookupStrategy + +# Read data in chunks when it may be more efficient. (This also may end up +# being less efficient, depending on many variables; see the user manual.) +AzureStorageSource.chunking.enabled = true + +# Chunk size. +AzureStorageSource.chunking.chunk_size = 512K + +# The per-request chunk cache caches downloaded chunks in memory during +# a request, and clears them when the request is complete. +AzureStorageSource.chunking.cache.enabled = true + +# Max per-request chunk cache size. +AzureStorageSource.chunking.cache.max_size = 5M + +#---------------------------------------- +# JdbcSource +#---------------------------------------- + +# Note: JdbcSource requires some delegate methods to be implemented in +# addition to the configuration here, and a JDBC driver to be installed on +# the classpath; see the user manual. + +# !! +JdbcSource.url = jdbc:postgresql://localhost:5432/my_database +# !! +JdbcSource.user = postgres +# !! +JdbcSource.password = postgres + +# !! Connection timeout in seconds. +JdbcSource.connection_timeout = 10 + +########################################################################### +# PROCESSORS +########################################################################### + +#---------------------------------------- +# Processor Selection +#---------------------------------------- + +# * If set to `AutomaticSelectionStrategy`, a "best" available processor +# will be selected per-request based on formats and installed +# dependencies. +# * If set to `ManualSelectionStrategy`, a processor will be chosen based +# on the rest of the keys in this section. +processor.selection_strategy = AutomaticSelectionStrategy + +# Built-in processors are `Java2dProcessor`, TurboJpegProcessor`, +# `KakaduNativeProcessor`, `OpenJpegProcessor`, `GrokProcessor`,`JaiProcessor`, +# `PdfBoxProcessor`, and `FfmpegProcessor`. +# Some of these have third-party dependencies and won't work out-of-the-box. + +# These format-specific definitions are optional. +processor.ManualSelectionStrategy.avi = FfmpegProcessor +processor.ManualSelectionStrategy.bmp = +processor.ManualSelectionStrategy.flv = FfmpegProcessor +processor.ManualSelectionStrategy.gif = +processor.ManualSelectionStrategy.jp2 = KakaduNativeProcessor +processor.ManualSelectionStrategy.jpg = +processor.ManualSelectionStrategy.mov = FfmpegProcessor +processor.ManualSelectionStrategy.mp4 = FfmpegProcessor +processor.ManualSelectionStrategy.mpg = FfmpegProcessor +processor.ManualSelectionStrategy.pdf = PdfBoxProcessor +processor.ManualSelectionStrategy.png = +processor.ManualSelectionStrategy.tif = +processor.ManualSelectionStrategy.webm = FfmpegProcessor +processor.ManualSelectionStrategy.xpm = + +# Fall back to this processor for any formats not assigned above. +processor.ManualSelectionStrategy.fallback = Java2dProcessor + +#---------------------------------------- +# Global Processor Configuration +#---------------------------------------- + +# Controls how content is fed to processors from stream-based sources. +# * `StreamStrategy` will try to stream a source image from a source when +# possible, and use `processor.fallback_retrieval_strategy` otherwise. +# * `DownloadStrategy` will download it to a temporary file, and delete +# it after the request is complete. +# * `CacheStrategy` will download it into the source cache using +# FilesystemCache, which must also be configured. (This will perform a +# lot better than DownloadStrategy if you can spare the disk space.) +processor.stream_retrieval_strategy = StreamStrategy + +# Controls how an incompatible StreamSource + FileProcessor combination is +# dealt with. +# * `DownloadStrategy` and `CacheStrategy` work the same as above. +# * `AbortStrategy` causes the request to fail. +processor.fallback_retrieval_strategy = DownloadStrategy + +# Resolution of vector rasterization (of e.g. PDFs) at a scale of 1. +processor.dpi = 150 + +# Color of the background when an image is rotated or alpha-flattened, for +# output formats that don't support transparency. +# This may not be respected for indexed color derivative images. +processor.background_color = white + +# Available values are `bell`, `bspline`, `bicubic`, `box`, `hermite`, +# `lanczos3`, `mitchell`, `triangle`. (JaiProcessor & KakaduNativeProcessor +# ignore these.) +processor.downscale_filter = bicubic +processor.upscale_filter = bicubic + +# If true, images are downscaled in a linear color space, which is more +# accurate. This only works with mono-resolution (non-pyramidal) images. It +# also may impair performance. +processor.downscale_linear = false + +# Intensity of an unsharp mask from 0 to 1. +processor.sharpen = 0 + +# Progressive JPEGs are usually more compact. +processor.jpg.progressive = true + +# JPEG output quality (1-100). +processor.jpg.quality = 80 + +# TIFF output compression type. Available values are `Deflate`, `JPEG`, +# `LZW`, and `RLE`. Leave blank for no compression. +processor.tif.compression = LZW + +#---------------------------------------- +# ImageIO Plugin Preferences +#---------------------------------------- + +# These override the default plugins used by the application and should not +# normally be changed. +processor.imageio.bmp.reader = +processor.imageio.gif.reader = +processor.imageio.gif.writer = +processor.imageio.jpg.reader = +processor.imageio.jpg.writer = +processor.imageio.png.reader = +processor.imageio.png.writer = +processor.imageio.tif.reader = +processor.imageio.tif.writer = +processor.imageio.xpm.reader = + +#---------------------------------------- +# FfmpegProcessor +#---------------------------------------- + +# Optional absolute path of the directory containing the FFmpeg binaries. +# Overrides the PATH. +FfmpegProcessor.path_to_binaries = + +#---------------------------------------- +# OpenJpegProcessor +#---------------------------------------- + +# Optional absolute path of the directory containing opj_decompress. +# Overrides the PATH. +OpenJpegProcessor.path_to_binaries = /opt/openjpeg/openjpeg-2.5.0/bin + +#---------------------------------------- +# GrokProcessor +#---------------------------------------- + +# Optional absolute path of the directory containing grk_decompress. +# Overrides the PATH. +GrokProcessor.path_to_binaries = + +#---------------------------------------- +# PdfBoxProcessor +#---------------------------------------- + +# The following will enable disk to be used as well as memory during +# PDF loading in PdfBoxProcessor. If `max_memory_bytes` is -1 it +# will use unlimited memory. +processor.pdf.scratch_file_enabled = false +processor.pdf.max_memory_bytes = -1 + +########################################################################### +# CLIENT-SIDE CACHING +########################################################################### + +# Whether to enable the response Cache-Control header. +cache.client.enabled = true + +cache.client.max_age = 2592000 +cache.client.shared_max_age = +cache.client.public = true +cache.client.private = false +cache.client.no_cache = false +cache.client.no_store = false +cache.client.must_revalidate = false +cache.client.proxy_revalidate = false +cache.client.no_transform = true + +########################################################################### +# SERVER-SIDE CACHING +########################################################################### + +# N.B.: The source cache may be used if the +# `processor.stream_retrieval_strategy` and/or +# `processor.fallback_retrieval_strategy` keys are set to `CacheStrategy`. + +# FilesystemCache is the only available source cache. +cache.server.source = FilesystemCache + +# Amount of time source cache content remains valid. Set to blank or 0 +# for forever. +cache.server.source.ttl_seconds = 2592000 + +# Enables the derivative (processed image) cache. +cache.server.derivative.enabled = false + +# Available values are `FilesystemCache`, `JdbcCache`, `RedisCache`, +# `HeapCache`, `S3Cache`, and `AzureStorageCache`. +cache.server.derivative = + +# Amount of time derivative cache content remains valid. Set to blank or 0 +# for forever. +cache.server.derivative.ttl_seconds = 2592000 + +# Whether to use the Java heap as a "level 1" cache for image infos, either +# independently or in front of a "level 2" derivative cache (if enabled). +cache.server.info.enabled = true + +# If true, when a source reports that the requested source image has gone +# missing, all cached information relating to it (if any) will be deleted. +# (This is effectively always false when cache.server.resolve_first is also +# false.) +cache.server.purge_missing = false + +# If true, the source image will be confirmed to exist before a cached copy +# is returned. If false, the cached copy will be returned without checking. +# Resolving first is safer but slower. +cache.server.resolve_first = false + +# !! Enables the cache worker, which periodically purges invalid cache +# items in the background. +cache.server.worker.enabled = false + +# !! The cache worker will wait this many seconds before starting its +# next shift. +cache.server.worker.interval = 86400 + +#---------------------------------------- +# FilesystemCache +#---------------------------------------- + +# If this directory does not exist, it will be created automatically. +FilesystemCache.pathname = /var/cache/cantaloupe + +# Levels of folder hierarchy in which to store cached images. Deeper depth +# results in fewer files per directory. Set to 0 to disable subdirectories. +# Purge the cache after changing this. +FilesystemCache.dir.depth = 3 + +# Number of characters in tree directory names. Should be set to +# 16^n < (max number of directory entries your filesystem can deal with). +# Purge the cache after changing this. +FilesystemCache.dir.name_length = 2 + +#---------------------------------------- +# HeapCache +#---------------------------------------- + +# Target cache size, in bytes or a number ending in M, MB, G, GB, etc. +# This is not a hard limit, and may be transiently exceeded. +# Ensure your heap can accommodate this size. +HeapCache.target_size = 2G + +# If true, the cache contents will be written to a file on exit and during +# cache worker shifts, and read back in at startup. +HeapCache.persist = false + +# When the contents are persisted, this specifies the location of the cache +# file. If the parent directory does not exist, it will be created +# automatically. +HeapCache.persist.filesystem.pathname = /var/cache/cantaloupe/heap.cache + +#---------------------------------------- +# JdbcCache +#---------------------------------------- + +# !! +JdbcCache.url = jdbc:postgresql://localhost:5432/cantaloupe +# !! +JdbcCache.user = postgres +# !! +JdbcCache.password = + +# !! Connection timeout in seconds. +JdbcCache.connection_timeout = 10 + +# These must be created manually; see the user manual. +JdbcCache.derivative_image_table = derivative_cache +JdbcCache.info_table = info_cache + +#---------------------------------------- +# S3Cache +#---------------------------------------- + +# !! Endpoint URI. Only needed for non-AWS endpoints. +S3Cache.endpoint = + +# !! AWS region. Only needed for AWS endpoints. +S3Cache.region = + +# !! Credentials for your AWS account. +# See: http://aws.amazon.com/security-credentials +# Note that this info can be obtained from elsewhere rather than setting it +# here; see the user manual. +S3Cache.access_key_id = +S3Cache.secret_key = + +# !! Name of a bucket to use to hold cached data. +S3Cache.bucket.name = + +# !! String that will be prefixed to object keys. +S3Cache.object_key_prefix = + +#---------------------------------------- +# AzureStorageCache +#---------------------------------------- + +# !! Credentials for your Azure account. +AzureStorageCache.account_name = +AzureStorageCache.account_key = + +# !! Name of the container containing cached images. +AzureStorageCache.container_name = + +# !! String that will be prefixed to object keys. +AzureStorageCache.object_key_prefix = + +#---------------------------------------- +# RedisCache +#---------------------------------------- + +# !! Redis connection info. +RedisCache.host = localhost +RedisCache.port = 6379 +RedisCache.ssl = false +RedisCache.password = +RedisCache.database = 0 + +########################################################################### +# OVERLAYS +########################################################################### + +# Controls how overlays are configured. `BasicStrategy` will use the +# `overlays.BasicStrategy.*` keys in this section. `ScriptStrategy` will +# use a delegate method. (See the user manual.) +overlays.strategy = BasicStrategy + +# Whether to enable overlays using the BasicStrategy. +overlays.BasicStrategy.enabled = false + +# `image` or `string`. +overlays.BasicStrategy.type = image + +# Absolute path or URL of the overlay image. Must be a PNG file. +overlays.BasicStrategy.image = /path/to/overlay.png + +# Overlay text. +overlays.BasicStrategy.string = Copyright © My Great Organization\nAll rights reserved. + +# For a list of possible values, launch with the -list-fonts argument. +overlays.BasicStrategy.string.font = Helvetica + +# Font size in points. +overlays.BasicStrategy.string.font.size = 24 + +# If the string doesn't fit in the image at the above size, the largest size +# at which it does fit will be used, down to this. +overlays.BasicStrategy.string.font.min_size = 18 + +# Font weight. 1 = regular, 2 = bold. Unfortunately, many fonts don't +# support fractional weights. +overlays.BasicStrategy.string.font.weight = 1.0 + +# Point spacing between glyphs, typically between -0.1 and 0.1. +overlays.BasicStrategy.string.glyph_spacing = 0.02 + +# CSS color syntax is supported. +overlays.BasicStrategy.string.color = white + +# CSS color syntax is supported. +overlays.BasicStrategy.string.stroke.color = black + +# Stroke width in pixels. +overlays.BasicStrategy.string.stroke.width = 1 + +# Color of a rectangular background to draw under the string. +# CSS color syntax and alpha are supported. +overlays.BasicStrategy.string.background.color = rgba(0, 0, 0, 100) + +# Allowed values: `top left`, `top center`, `top right`, `left center`, +# `center`, `right center`, `bottom left`, `bottom center`, `bottom right`, +# `repeat` (images only), `scaled` (images only). +overlays.BasicStrategy.position = bottom right + +# Pixel margin between the overlay and the image edge. Does not apply to +# `repeat` position. +overlays.BasicStrategy.inset = 10 + +# Output images less than this many pixels wide will not receive an overlay. +# Set to 0 to add the overlay regardless. +overlays.BasicStrategy.output_width_threshold = 400 + +# Output images less than this many pixels tall will not receive an overlay. +# Set to 0 to add the overlay regardless. +overlays.BasicStrategy.output_height_threshold = 300 + +########################################################################### +# LOGGING +########################################################################### + +#---------------------------------------- +# Application Log +#---------------------------------------- + +# `trace`, `debug`, `info`, `warn`, `error`, `all`, or `off` +log.application.level = debug + +log.application.ConsoleAppender.enabled = true +log.application.ConsoleAppender.logstash.enabled = false + +# N.B.: Don't enable FileAppender and RollingFileAppender simultaneously! +log.application.FileAppender.enabled = false +log.application.FileAppender.logstash.enabled = false +log.application.FileAppender.pathname = /path/to/logs/application.log + +log.application.RollingFileAppender.enabled = false +log.application.RollingFileAppender.logstash.enabled = false +log.application.RollingFileAppender.pathname = /path/to/logs/application.log +log.application.RollingFileAppender.policy = TimeBasedRollingPolicy +log.application.RollingFileAppender.TimeBasedRollingPolicy.filename_pattern = /path/to/logs/application-%d{yyyy-MM-dd}.log +log.application.RollingFileAppender.TimeBasedRollingPolicy.max_history = 30 + +# See the "SyslogAppender" section for a list of facilities: +# http://logback.qos.ch/manual/appenders.html +log.application.SyslogAppender.enabled = false +log.application.SyslogAppender.host = +log.application.SyslogAppender.port = 514 +log.application.SyslogAppender.facility = LOCAL0 + +#---------------------------------------- +# Error Log +#---------------------------------------- + +# Application log messages with a severity of WARN or greater can be copied +# into a dedicated error log, which may make them easier to spot. + +# N.B.: Don't enable FileAppender and RollingFileAppender simultaneously! +log.error.FileAppender.enabled = false +log.error.FileAppender.logstash.enabled = false +log.error.FileAppender.pathname = /path/to/logs/error.log + +log.error.RollingFileAppender.enabled = false +log.error.RollingFileAppender.logstash.enabled = false +log.error.RollingFileAppender.pathname = /path/to/logs/error.log +log.error.RollingFileAppender.policy = TimeBasedRollingPolicy +log.error.RollingFileAppender.TimeBasedRollingPolicy.filename_pattern = /path/to/logs/error-%d{yyyy-MM-dd}.log +log.error.RollingFileAppender.TimeBasedRollingPolicy.max_history = 30 + +#---------------------------------------- +# Access Log +#---------------------------------------- + +log.access.ConsoleAppender.enabled = false + +# N.B.: Don't enable FileAppender and RollingFileAppender simultaneously! +log.access.FileAppender.enabled = false +log.access.FileAppender.pathname = /path/to/logs/access.log + +# RollingFileAppender is an alternative to using something like +# FileAppender + logrotate. +log.access.RollingFileAppender.enabled = false +log.access.RollingFileAppender.pathname = /path/to/logs/access.log +log.access.RollingFileAppender.policy = TimeBasedRollingPolicy +log.access.RollingFileAppender.TimeBasedRollingPolicy.filename_pattern = /path/to/logs/access-%d{yyyy-MM-dd}.log +log.access.RollingFileAppender.TimeBasedRollingPolicy.max_history = 30 + +# See the "SyslogAppender" section for a list of facilities: +# http://logback.qos.ch/manual/appenders.html +log.access.SyslogAppender.enabled = false +log.access.SyslogAppender.host = +log.access.SyslogAppender.port = 514 +log.access.SyslogAppender.facility = LOCAL0 diff --git a/cantaloupe/interim_files/images/F-1s1f_Badgastein_r.jpg b/cantaloupe/interim_files/images/F-1s1f_Badgastein_r.jpg new file mode 100644 index 00000000..638cae43 Binary files /dev/null and b/cantaloupe/interim_files/images/F-1s1f_Badgastein_r.jpg differ diff --git a/cantaloupe/interim_files/images/F-1s1f_Badgastein_v.jpg b/cantaloupe/interim_files/images/F-1s1f_Badgastein_v.jpg new file mode 100644 index 00000000..fbd5cff7 Binary files /dev/null and b/cantaloupe/interim_files/images/F-1s1f_Badgastein_v.jpg differ diff --git a/cantaloupe/interim_files/images/F-dq2m_54_8_2r.jpg b/cantaloupe/interim_files/images/F-dq2m_54_8_2r.jpg new file mode 100644 index 00000000..3fc8e261 Binary files /dev/null and b/cantaloupe/interim_files/images/F-dq2m_54_8_2r.jpg differ diff --git a/cantaloupe/interim_files/images/F-dq2m_54_8_2v.jpg b/cantaloupe/interim_files/images/F-dq2m_54_8_2v.jpg new file mode 100644 index 00000000..c1700bc0 Binary files /dev/null and b/cantaloupe/interim_files/images/F-dq2m_54_8_2v.jpg differ diff --git a/cantaloupe/interim_files/images/F-wn0s_54_8_1r.jpg b/cantaloupe/interim_files/images/F-wn0s_54_8_1r.jpg new file mode 100644 index 00000000..820d7b55 Binary files /dev/null and b/cantaloupe/interim_files/images/F-wn0s_54_8_1r.jpg differ diff --git a/cantaloupe/interim_files/images/F-wn0s_54_8_1v.jpg b/cantaloupe/interim_files/images/F-wn0s_54_8_1v.jpg new file mode 100644 index 00000000..88f2ec05 Binary files /dev/null and b/cantaloupe/interim_files/images/F-wn0s_54_8_1v.jpg differ diff --git a/cantaloupe/interim_files/images/lacuna.jpg b/cantaloupe/interim_files/images/lacuna.jpg new file mode 100644 index 00000000..50a7ac00 Binary files /dev/null and b/cantaloupe/interim_files/images/lacuna.jpg differ diff --git a/cantaloupe/interim_files/manifests/gottschalk_manifest_w_lacunae.json b/cantaloupe/interim_files/manifests/gottschalk_manifest_w_lacunae.json new file mode 100644 index 00000000..73d0d79f --- /dev/null +++ b/cantaloupe/interim_files/manifests/gottschalk_manifest_w_lacunae.json @@ -0,0 +1,2196 @@ +{ + "@context": "http://iiif.io/api/presentation/2/context.json", + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/manifest.json", + "@type": "sc:Manifest", + "label": "[sine loco], codices restituti, ", + "metadata": [ + { + "label": "Location", + "value": "[sine loco]" + }, + { + "label": "Collection Name", + "value": "codices restituti" + }, + { + "label": "Title", + "value": "Gottschalk Antiphonal" + }, + { + "label": "Fragmentarium ID", + "value": "F-75ud" + }, + { + "label": "Material", + "value": "Parchment" + }, + { + "label": "Place of origin", + "value": "Lambach Stiftsbibliothek" + }, + { + "label": "Document Type", + "value": "Virtual Reconstruction" + }, + { + "label": "Number of Fragment Items", + "value": "27 leaves" + }, + { + "label": "Current Dimensions (in mm)", + "value": "320 X 243 mm" + }, + { + "label": "Online Since", + "value": "2018-05-04" + }, + { + "label": "Reconstruction Summary", + "value": "

The Gottschalk Antiphonal was written at and for the use of the Lambach abbey (Upper Austria) in the last decades of the twelfth century. The manuscript was written and decorated by the prolific monk Gottschalk of Lambach (see Davis, The Gottschalk Antiphonary). In the fifteenth century, leaves of the manuscript were used as flyleaves and pastedowns in books bound at the Lambach bindery. Most of the fragments were removed and sold during World War II, although remnants remain in several Lambach incunables. Leaves of the Gottschalk Antiphonal have been identified in several collections: The Beinecke Rare Book and Manuscript at Yale University (seventeen leaves); the Houghton Library at Harvard University (two leaves); the St. Louis Public Library in St. Louis, Missouri (one leaf); the abbey of St.-Paul-I'm-Lavanttal (Austria) (two leaves). Four leaves known to have been at Lambach in the early 1990s are untraced, as is the leaf formerly hanging on the wall of a hotel in Badgastein, Austria. These missing leaves are included in this reconstruction in black-and-white, the only extant images of the leaves.

" + }, + { + "label": "Reconstruction Summary Author", + "value": "Lisa Fagin Davis`" + }, + { + "label": "Date of origin", + "value": "1180 \u2013 1200 CE" + }, + { + "label": "Places", + "value": "Austria; Benediktinerstift Lambach; Lambach" + }, + { + "label": "Century", + "value": "12th century" + }, + { + "label": "Text Language", + "value": "Latin" + }, + { + "label": "Liturgica", + "value": "Antiphonar" + }, + { + "label": "Musical Notation", + "value": "Neumes (staffless)" + } + ], + "description": [ + { + "@value": "The Gottschalk Antiphonal was written at and for the use of the Lambach abbey (Upper Austria) in the last decades of the twelfth century. The manuscript was written and decorated by the prolific monk Gottschalk of Lambach (see Davis, The Gottschalk Antiphonary). In the fifteenth century, leaves of the manuscript were used as flyleaves and pastedowns in books bound at the Lambach bindery. Most of the fragments were removed and sold during World War II, although remnants remain in several Lambach incunables. Leaves of the Gottschalk Antiphonal have been identified in several collections: The Beinecke Rare Book and Manuscript at Yale University (seventeen leaves); the Houghton Library at Harvard University (two leaves); the St. Louis Public Library in St. Louis, Missouri (one leaf); the abbey of St.-Paul-I'm-Lavanttal (Austria) (two leaves). Four leaves known to have been at Lambach in the early 1990s are untraced, as is the leaf formerly hanging on the wall of a hotel in Badgastein, Austria. These missing leaves are included in this reconstruction in black-and-white, the only extant images of the leaves.", + "@language": "en" + } + ], + "license": "http://creativecommons.org/licenses/by/4.0/", + "attribution": "Fragmentarium \u2013 International Digital Research Lab for Medieval Manuscript Fragments", + "logo": "https://fragmentarium.ms/img/fragmentarium-logo-sm-square.png", + "service": "https://fragmentarium.ms/search/", + "seeAlso": "https://fragmentarium.ms/overview/F-75ud", + "within": "https://fragmentarium.ms/metadata/iiif/collection/C-g161.json", + "sequences": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/sequence/Sequence-864.json", + "@type": "sc:Sequence", + "label": [ + { + "@value": "Normal Sequence", + "@language": "en" + } + ], + "canvases": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016164/full/!200,200/0/default.jpg.json", + "@type": "sc:Canvas", + "label": "1r", + "height": 4912, + "width": 3477, + "images": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/annotation/https://collections.library.yale.edu/iiif/2/1016164/full/!200,200/0/default.jpg.json", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016164/full/!200,200/0/default.jpg.json", + "resource": { + "@id": "https://collections.library.yale.edu/iiif/2/1016164/full/!200,200/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 4912, + "width": 3477, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://collections.library.yale.edu/iiif/2/1016164", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016165/full/!200,200/0/default.jpg.json", + "@type": "sc:Canvas", + "label": "1v", + "height": 4955, + "width": 3437, + "images": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/annotation/https://collections.library.yale.edu/iiif/2/1016165/full/!200,200/0/default.jpg.json", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016165/full/!200,200/0/default.jpg.json", + "resource": { + "@id": "https://collections.library.yale.edu/iiif/2/1016165/full/!200,200/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 4955, + "width": 3437, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://collections.library.yale.edu/iiif/2/1016165", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016166/full/!200,200/0/default.jpg.json", + "@type": "sc:Canvas", + "label": "2r", + "height": 4918, + "width": 3426, + "images": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/annotation/https://collections.library.yale.edu/iiif/2/1016166/full/!200,200/0/default.jpg.json", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016166/full/!200,200/0/default.jpg.json", + "resource": { + "@id": "https://collections.library.yale.edu/iiif/2/1016166/full/!200,200/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 4918, + "width": 3426, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://collections.library.yale.edu/iiif/2/1016166", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016167/full/!200,200/0/default.jpg.json", + "@type": "sc:Canvas", + "label": "2v", + "height": 4909, + "width": 3398, + "images": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/annotation/https://collections.library.yale.edu/iiif/2/1016167/full/!200,200/0/default.jpg.json", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016167/full/!200,200/0/default.jpg.json", + "resource": { + "@id": "https://collections.library.yale.edu/iiif/2/1016167/full/!200,200/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 4909, + "width": 3398, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://collections.library.yale.edu/iiif/2/1016167", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "@type": "sc:Canvas", + "label": "Lacuna", + "height": 1800, + "width": 1400, + "images": [ + { + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "resource": { + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg/full/full/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1800, + "width": 1400, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/F-wn0s/54_8_1r.JPG.json", + "@type": "sc:Canvas", + "label": "54_8_1r", + "height": 3920, + "width": 2204, + "images": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/annotation/F-wn0s/54_8_1r.JPG.json", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/F-wn0s/54_8_1r.JPG.json", + "resource": { + "@id": "https://cantus.staging.simssa.ca/iiif/F-wn0s_54_8_1r.jpg/full/full/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 3920, + "width": 2204, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://cantus.staging.simssa.ca/iiif/F-wn0s_54_8_1r.jpg", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/F-wn0s/54_8_1v.JPG.json", + "@type": "sc:Canvas", + "label": "54_8_1v", + "height": 3920, + "width": 2204, + "images": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/annotation/F-wn0s/54_8_1v.JPG.json", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/F-wn0s/54_8_1v.JPG.json", + "resource": { + "@id": "https://cantus.staging.simssa.ca/iiif/F-wn0s_54_8_1v.jpg/full/full/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 3920, + "width": 2204, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://cantus.staging.simssa.ca/iiif/F-wn0s_54_8_1v.jpg", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/F-dq2m/54_8_2r.JPG.json", + "@type": "sc:Canvas", + "label": "54_8_2r", + "height": 3920, + "width": 2204, + "images": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/annotation/F-dq2m/54_8_2r.JPG.json", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/F-dq2m/54_8_2r.JPG.json", + "resource": { + "@id": "https://cantus.staging.simssa.ca/iiif/F-dq2m_54_8_2r.jpg/full/full/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 3920, + "width": 2204, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://cantus.staging.simssa.ca/iiif/F-dq2m_54_8_2r.jpg", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/F-dq2m/54_8_2v.JPG.json", + "@type": "sc:Canvas", + "label": "54_8_2v", + "height": 3920, + "width": 2204, + "images": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/annotation/F-dq2m/54_8_2v.JPG.json", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/F-dq2m/54_8_2v.JPG.json", + "resource": { + "@id": "https://cantus.staging.simssa.ca/iiif/F-dq2m_54_8_2v.jpg/full/full/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 3920, + "width": 2204, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://cantus.staging.simssa.ca/iiif/F-dq2m_54_8_2v.jpg", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "@type": "sc:Canvas", + "label": "Lacuna", + "height": 1800, + "width": 1400, + "images": [ + { + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "resource": { + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg/full/full/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1800, + "width": 1400, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016168/full/!200,200/0/default.jpg.json", + "@type": "sc:Canvas", + "label": "3r", + "height": 5172, + "width": 3836, + "images": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/annotation/https://collections.library.yale.edu/iiif/2/1016168/full/!200,200/0/default.jpg.json", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016168/full/!200,200/0/default.jpg.json", + "resource": { + "@id": "https://collections.library.yale.edu/iiif/2/1016168/full/!200,200/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 5172, + "width": 3836, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://collections.library.yale.edu/iiif/2/1016168", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016169/full/!200,200/0/default.jpg.json", + "@type": "sc:Canvas", + "label": "3v", + "height": 5135, + "width": 3845, + "images": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/annotation/https://collections.library.yale.edu/iiif/2/1016169/full/!200,200/0/default.jpg.json", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016169/full/!200,200/0/default.jpg.json", + "resource": { + "@id": "https://collections.library.yale.edu/iiif/2/1016169/full/!200,200/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 5135, + "width": 3845, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://collections.library.yale.edu/iiif/2/1016169", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/F-xgzh/II_1_i_1r.jpg.json", + "@type": "sc:Canvas", + "label": "II_1_i_1r", + "height": 8880, + "width": 6444, + "images": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/annotation/F-xgzh/II_1_i_1r.jpg.json", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/F-xgzh/II_1_i_1r.jpg.json", + "resource": { + "@id": "https://fragmentarium.ms:443/loris/F-xgzh/II_1_i_1r.jpg/full/full/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 8880, + "width": 6444, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://fragmentarium.ms:443/loris/F-xgzh/II_1_i_1r.jpg", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/F-xgzh/II_1_i_1v.jpg.json", + "@type": "sc:Canvas", + "label": "II_1_i_1v", + "height": 7872, + "width": 5988, + "images": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/annotation/F-xgzh/II_1_i_1v.jpg.json", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/F-xgzh/II_1_i_1v.jpg.json", + "resource": { + "@id": "https://fragmentarium.ms:443/loris/F-xgzh/II_1_i_1v.jpg/full/full/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 7872, + "width": 5988, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://fragmentarium.ms:443/loris/F-xgzh/II_1_i_1v.jpg", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/F-nd7s/II_1_i_2r.jpg.json", + "@type": "sc:Canvas", + "label": "II_1_i_2r", + "height": 9180, + "width": 6900, + "images": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/annotation/F-nd7s/II_1_i_2r.jpg.json", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/F-nd7s/II_1_i_2r.jpg.json", + "resource": { + "@id": "https://fragmentarium.ms:443/loris/F-nd7s/II_1_i_2r.jpg/full/full/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 9180, + "width": 6900, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://fragmentarium.ms:443/loris/F-nd7s/II_1_i_2r.jpg", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/F-nd7s/II_1_i_2v.jpg.json", + "@type": "sc:Canvas", + "label": "II_1_i_2v", + "height": 8484, + "width": 6264, + "images": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/annotation/F-nd7s/II_1_i_2v.jpg.json", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/F-nd7s/II_1_i_2v.jpg.json", + "resource": { + "@id": "https://fragmentarium.ms:443/loris/F-nd7s/II_1_i_2v.jpg/full/full/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 8484, + "width": 6264, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://fragmentarium.ms:443/loris/F-nd7s/II_1_i_2v.jpg", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/F-nd7s/II_1_i_3r.jpg.json", + "@type": "sc:Canvas", + "label": "II_1_i_3r", + "height": 8604, + "width": 6564, + "images": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/annotation/F-nd7s/II_1_i_3r.jpg.json", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/F-nd7s/II_1_i_3r.jpg.json", + "resource": { + "@id": "https://fragmentarium.ms:443/loris/F-nd7s/II_1_i_3r.jpg/full/full/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 8604, + "width": 6564, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://fragmentarium.ms:443/loris/F-nd7s/II_1_i_3r.jpg", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/F-nd7s/II_1_i_3v.jpg.json", + "@type": "sc:Canvas", + "label": "II_1_i_3v", + "height": 9180, + "width": 6936, + "images": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/annotation/F-nd7s/II_1_i_3v.jpg.json", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/F-nd7s/II_1_i_3v.jpg.json", + "resource": { + "@id": "https://fragmentarium.ms:443/loris/F-nd7s/II_1_i_3v.jpg/full/full/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 9180, + "width": 6936, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://fragmentarium.ms:443/loris/F-nd7s/II_1_i_3v.jpg", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/F-xgzh/II_1_i_4r.jpg.json", + "@type": "sc:Canvas", + "label": "II_1_i_4r", + "height": 8148, + "width": 6204, + "images": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/annotation/F-xgzh/II_1_i_4r.jpg.json", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/F-xgzh/II_1_i_4r.jpg.json", + "resource": { + "@id": "https://fragmentarium.ms:443/loris/F-xgzh/II_1_i_4r.jpg/full/full/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 8148, + "width": 6204, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://fragmentarium.ms:443/loris/F-xgzh/II_1_i_4r.jpg", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/F-xgzh/II_1_i_4v.jpg.json", + "@type": "sc:Canvas", + "label": "II_1_i_4v", + "height": 8820, + "width": 6684, + "images": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/annotation/F-xgzh/II_1_i_4v.jpg.json", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/F-xgzh/II_1_i_4v.jpg.json", + "resource": { + "@id": "https://fragmentarium.ms:443/loris/F-xgzh/II_1_i_4v.jpg/full/full/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 8820, + "width": 6684, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://fragmentarium.ms:443/loris/F-xgzh/II_1_i_4v.jpg", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016170/full/!200,200/0/default.jpg.json", + "@type": "sc:Canvas", + "label": "4r", + "height": 5167, + "width": 3861, + "images": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/annotation/https://collections.library.yale.edu/iiif/2/1016170/full/!200,200/0/default.jpg.json", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016170/full/!200,200/0/default.jpg.json", + "resource": { + "@id": "https://collections.library.yale.edu/iiif/2/1016170/full/!200,200/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 5167, + "width": 3861, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://collections.library.yale.edu/iiif/2/1016170", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016171/full/!200,200/0/default.jpg.json", + "@type": "sc:Canvas", + "label": "4v", + "height": 5160, + "width": 3896, + "images": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/annotation/https://collections.library.yale.edu/iiif/2/1016171/full/!200,200/0/default.jpg.json", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016171/full/!200,200/0/default.jpg.json", + "resource": { + "@id": "https://collections.library.yale.edu/iiif/2/1016171/full/!200,200/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 5160, + "width": 3896, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://collections.library.yale.edu/iiif/2/1016171", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "@type": "sc:Canvas", + "label": "Lacuna", + "height": 1800, + "width": 1400, + "images": [ + { + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "resource": { + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg/full/full/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1800, + "width": 1400, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016172/full/!200,200/0/default.jpg.json", + "@type": "sc:Canvas", + "label": "5r", + "height": 4336, + "width": 3915, + "images": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/annotation/https://collections.library.yale.edu/iiif/2/1016172/full/!200,200/0/default.jpg.json", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016172/full/!200,200/0/default.jpg.json", + "resource": { + "@id": "https://collections.library.yale.edu/iiif/2/1016172/full/!200,200/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 4336, + "width": 3915, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://collections.library.yale.edu/iiif/2/1016172", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016173/full/!200,200/0/default.jpg.json", + "@type": "sc:Canvas", + "label": "5v", + "height": 4283, + "width": 3975, + "images": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/annotation/https://collections.library.yale.edu/iiif/2/1016173/full/!200,200/0/default.jpg.json", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016173/full/!200,200/0/default.jpg.json", + "resource": { + "@id": "https://collections.library.yale.edu/iiif/2/1016173/full/!200,200/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 4283, + "width": 3975, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://collections.library.yale.edu/iiif/2/1016173", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016174/full/!200,200/0/default.jpg.json", + "@type": "sc:Canvas", + "label": "6r", + "height": 4583, + "width": 3611, + "images": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/annotation/https://collections.library.yale.edu/iiif/2/1016174/full/!200,200/0/default.jpg.json", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016174/full/!200,200/0/default.jpg.json", + "resource": { + "@id": "https://collections.library.yale.edu/iiif/2/1016174/full/!200,200/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 4583, + "width": 3611, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://collections.library.yale.edu/iiif/2/1016174", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016175/full/!200,200/0/default.jpg.json", + "@type": "sc:Canvas", + "label": "6v", + "height": 4652, + "width": 3628, + "images": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/annotation/https://collections.library.yale.edu/iiif/2/1016175/full/!200,200/0/default.jpg.json", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016175/full/!200,200/0/default.jpg.json", + "resource": { + "@id": "https://collections.library.yale.edu/iiif/2/1016175/full/!200,200/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 4652, + "width": 3628, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://collections.library.yale.edu/iiif/2/1016175", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "@type": "sc:Canvas", + "label": "Lacuna", + "height": 1800, + "width": 1400, + "images": [ + { + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "resource": { + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg/full/full/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1800, + "width": 1400, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/F-1s1f/Badgastein_r.JPG.json", + "@type": "sc:Canvas", + "label": "Badgastein_r", + "height": 2624, + "width": 2000, + "images": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/annotation/F-1s1f/Badgastein_r.JPG.json", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/F-1s1f/Badgastein_r.JPG.json", + "resource": { + "@id": "https://cantus.staging.simssa.ca/iiif/F-1s1f_Badgastein_r.jpg/full/full/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 2624, + "width": 2000, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://cantus.staging.simssa.ca/iiif/F-1s1f_Badgastein_r.jpg", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/F-1s1f/Badgastein_v.jpg.json", + "@type": "sc:Canvas", + "label": "Badgastein_v", + "height": 2751, + "width": 2000, + "images": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/annotation/F-1s1f/Badgastein_v.jpg.json", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/F-1s1f/Badgastein_v.jpg.json", + "resource": { + "@id": "https://cantus.staging.simssa.ca/iiif/F-1s1f_Badgastein_v.jpg/full/full/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 2751, + "width": 2000, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://cantus.staging.simssa.ca/iiif/F-1s1f_Badgastein_v.jpg", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://ids.lib.harvard.edu/ids/iiif/53891255/full/full/0/native.jpg.json", + "@type": "sc:Canvas", + "label": "Verso (seq. 2)", + "height": 3696, + "width": 2814, + "images": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/annotation/https://ids.lib.harvard.edu/ids/iiif/53891255/full/full/0/native.jpg.json", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://ids.lib.harvard.edu/ids/iiif/53891255/full/full/0/native.jpg.json", + "resource": { + "@id": "https://ids.lib.harvard.edu/ids/iiif/53891255/full/full/0/native.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 3696, + "width": 2814, + "service": { + "@context": "http://library.stanford.edu/iiif/image-api/1.1/context.json", + "@id": "https://ids.lib.harvard.edu/ids/iiif/53891255", + "profile": "http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level2" + } + } + } + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://ids.lib.harvard.edu/ids/iiif/53891252/full/full/0/native.jpg.json", + "@type": "sc:Canvas", + "label": "Recto (seq. 1)", + "height": 3702, + "width": 2814, + "images": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/annotation/https://ids.lib.harvard.edu/ids/iiif/53891252/full/full/0/native.jpg.json", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://ids.lib.harvard.edu/ids/iiif/53891252/full/full/0/native.jpg.json", + "resource": { + "@id": "https://ids.lib.harvard.edu/ids/iiif/53891252/full/full/0/native.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 3702, + "width": 2814, + "service": { + "@context": "http://library.stanford.edu/iiif/image-api/1.1/context.json", + "@id": "https://ids.lib.harvard.edu/ids/iiif/53891252", + "profile": "http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level2" + } + } + } + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016176/full/!200,200/0/default.jpg.json", + "@type": "sc:Canvas", + "label": "7r", + "height": 4295, + "width": 2734, + "images": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/annotation/https://collections.library.yale.edu/iiif/2/1016176/full/!200,200/0/default.jpg.json", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016176/full/!200,200/0/default.jpg.json", + "resource": { + "@id": "https://collections.library.yale.edu/iiif/2/1016176/full/!200,200/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 4295, + "width": 2734, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://collections.library.yale.edu/iiif/2/1016176", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016177/full/!200,200/0/default.jpg.json", + "@type": "sc:Canvas", + "label": "7v", + "height": 4349, + "width": 2807, + "images": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/annotation/https://collections.library.yale.edu/iiif/2/1016177/full/!200,200/0/default.jpg.json", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016177/full/!200,200/0/default.jpg.json", + "resource": { + "@id": "https://collections.library.yale.edu/iiif/2/1016177/full/!200,200/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 4349, + "width": 2807, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://collections.library.yale.edu/iiif/2/1016177", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "@type": "sc:Canvas", + "label": "Lacuna", + "height": 1800, + "width": 1400, + "images": [ + { + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "resource": { + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg/full/full/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1800, + "width": 1400, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016178/full/!200,200/0/default.jpg.json", + "@type": "sc:Canvas", + "label": "8r", + "height": 4121, + "width": 3864, + "images": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/annotation/https://collections.library.yale.edu/iiif/2/1016178/full/!200,200/0/default.jpg.json", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016178/full/!200,200/0/default.jpg.json", + "resource": { + "@id": "https://collections.library.yale.edu/iiif/2/1016178/full/!200,200/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 4121, + "width": 3864, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://collections.library.yale.edu/iiif/2/1016178", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016179/full/!200,200/0/default.jpg.json", + "@type": "sc:Canvas", + "label": "8v", + "height": 4155, + "width": 3907, + "images": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/annotation/https://collections.library.yale.edu/iiif/2/1016179/full/!200,200/0/default.jpg.json", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016179/full/!200,200/0/default.jpg.json", + "resource": { + "@id": "https://collections.library.yale.edu/iiif/2/1016179/full/!200,200/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 4155, + "width": 3907, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://collections.library.yale.edu/iiif/2/1016179", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "@type": "sc:Canvas", + "label": "Lacuna", + "height": 1800, + "width": 1400, + "images": [ + { + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "resource": { + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg/full/full/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1800, + "width": 1400, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016180/full/!200,200/0/default.jpg.json", + "@type": "sc:Canvas", + "label": "9r", + "height": 4911, + "width": 3368, + "images": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/annotation/https://collections.library.yale.edu/iiif/2/1016180/full/!200,200/0/default.jpg.json", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016180/full/!200,200/0/default.jpg.json", + "resource": { + "@id": "https://collections.library.yale.edu/iiif/2/1016180/full/!200,200/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 4911, + "width": 3368, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://collections.library.yale.edu/iiif/2/1016180", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016181/full/!200,200/0/default.jpg.json", + "@type": "sc:Canvas", + "label": "9v", + "height": 4914, + "width": 3343, + "images": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/annotation/https://collections.library.yale.edu/iiif/2/1016181/full/!200,200/0/default.jpg.json", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016181/full/!200,200/0/default.jpg.json", + "resource": { + "@id": "https://collections.library.yale.edu/iiif/2/1016181/full/!200,200/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 4914, + "width": 3343, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://collections.library.yale.edu/iiif/2/1016181", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "@type": "sc:Canvas", + "label": "Lacuna", + "height": 1800, + "width": 1400, + "images": [ + { + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "resource": { + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg/full/full/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1800, + "width": 1400, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016182/full/!200,200/0/default.jpg.json", + "@type": "sc:Canvas", + "label": "10r", + "height": 4112, + "width": 2122, + "images": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/annotation/https://collections.library.yale.edu/iiif/2/1016182/full/!200,200/0/default.jpg.json", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016182/full/!200,200/0/default.jpg.json", + "resource": { + "@id": "https://collections.library.yale.edu/iiif/2/1016182/full/!200,200/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 4112, + "width": 2122, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://collections.library.yale.edu/iiif/2/1016182", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016183/full/!200,200/0/default.jpg.json", + "@type": "sc:Canvas", + "label": "10v", + "height": 4098, + "width": 2116, + "images": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/annotation/https://collections.library.yale.edu/iiif/2/1016183/full/!200,200/0/default.jpg.json", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016183/full/!200,200/0/default.jpg.json", + "resource": { + "@id": "https://collections.library.yale.edu/iiif/2/1016183/full/!200,200/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 4098, + "width": 2116, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://collections.library.yale.edu/iiif/2/1016183", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "@type": "sc:Canvas", + "label": "Lacuna", + "height": 1800, + "width": 1400, + "images": [ + { + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "resource": { + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg/full/full/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1800, + "width": 1400, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016184/full/!200,200/0/default.jpg.json", + "@type": "sc:Canvas", + "label": "11r", + "height": 4969, + "width": 2523, + "images": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/annotation/https://collections.library.yale.edu/iiif/2/1016184/full/!200,200/0/default.jpg.json", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016184/full/!200,200/0/default.jpg.json", + "resource": { + "@id": "https://collections.library.yale.edu/iiif/2/1016184/full/!200,200/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 4969, + "width": 2523, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://collections.library.yale.edu/iiif/2/1016184", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016185/full/!200,200/0/default.jpg.json", + "@type": "sc:Canvas", + "label": "11v", + "height": 4973, + "width": 2615, + "images": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/annotation/https://collections.library.yale.edu/iiif/2/1016185/full/!200,200/0/default.jpg.json", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016185/full/!200,200/0/default.jpg.json", + "resource": { + "@id": "https://collections.library.yale.edu/iiif/2/1016185/full/!200,200/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 4973, + "width": 2615, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://collections.library.yale.edu/iiif/2/1016185", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "@type": "sc:Canvas", + "label": "Lacuna", + "height": 1800, + "width": 1400, + "images": [ + { + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "resource": { + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg/full/full/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1800, + "width": 1400, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016186/full/!200,200/0/default.jpg.json", + "@type": "sc:Canvas", + "label": "12r", + "height": 4872, + "width": 3647, + "images": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/annotation/https://collections.library.yale.edu/iiif/2/1016186/full/!200,200/0/default.jpg.json", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016186/full/!200,200/0/default.jpg.json", + "resource": { + "@id": "https://collections.library.yale.edu/iiif/2/1016186/full/!200,200/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 4872, + "width": 3647, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://collections.library.yale.edu/iiif/2/1016186", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016187/full/!200,200/0/default.jpg.json", + "@type": "sc:Canvas", + "label": "12v", + "height": 4867, + "width": 3626, + "images": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/annotation/https://collections.library.yale.edu/iiif/2/1016187/full/!200,200/0/default.jpg.json", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016187/full/!200,200/0/default.jpg.json", + "resource": { + "@id": "https://collections.library.yale.edu/iiif/2/1016187/full/!200,200/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 4867, + "width": 3626, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://collections.library.yale.edu/iiif/2/1016187", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016188/full/!200,200/0/default.jpg.json", + "@type": "sc:Canvas", + "label": "13r", + "height": 4896, + "width": 3706, + "images": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/annotation/https://collections.library.yale.edu/iiif/2/1016188/full/!200,200/0/default.jpg.json", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016188/full/!200,200/0/default.jpg.json", + "resource": { + "@id": "https://collections.library.yale.edu/iiif/2/1016188/full/!200,200/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 4896, + "width": 3706, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://collections.library.yale.edu/iiif/2/1016188", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016189/full/!200,200/0/default.jpg.json", + "@type": "sc:Canvas", + "label": "13v", + "height": 4913, + "width": 3787, + "images": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/annotation/https://collections.library.yale.edu/iiif/2/1016189/full/!200,200/0/default.jpg.json", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016189/full/!200,200/0/default.jpg.json", + "resource": { + "@id": "https://collections.library.yale.edu/iiif/2/1016189/full/!200,200/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 4913, + "width": 3787, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://collections.library.yale.edu/iiif/2/1016189", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "@type": "sc:Canvas", + "label": "Lacuna", + "height": 1800, + "width": 1400, + "images": [ + { + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "resource": { + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg/full/full/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1800, + "width": 1400, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016190/full/!200,200/0/default.jpg.json", + "@type": "sc:Canvas", + "label": "14r", + "height": 5009, + "width": 3685, + "images": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/annotation/https://collections.library.yale.edu/iiif/2/1016190/full/!200,200/0/default.jpg.json", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016190/full/!200,200/0/default.jpg.json", + "resource": { + "@id": "https://collections.library.yale.edu/iiif/2/1016190/full/!200,200/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 5009, + "width": 3685, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://collections.library.yale.edu/iiif/2/1016190", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016191/full/!200,200/0/default.jpg.json", + "@type": "sc:Canvas", + "label": "14v", + "height": 4975, + "width": 3714, + "images": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/annotation/https://collections.library.yale.edu/iiif/2/1016191/full/!200,200/0/default.jpg.json", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016191/full/!200,200/0/default.jpg.json", + "resource": { + "@id": "https://collections.library.yale.edu/iiif/2/1016191/full/!200,200/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 4975, + "width": 3714, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://collections.library.yale.edu/iiif/2/1016191", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "@type": "sc:Canvas", + "label": "Lacuna", + "height": 1800, + "width": 1400, + "images": [ + { + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "resource": { + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg/full/full/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1800, + "width": 1400, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/F-lcqf/STPL_Grolier_44r.JPG.json", + "@type": "sc:Canvas", + "label": "STPL_Grolier_44r", + "height": 3507, + "width": 2858, + "images": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/annotation/F-lcqf/STPL_Grolier_44r.JPG.json", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/F-lcqf/STPL_Grolier_44r.JPG.json", + "resource": { + "@id": "https://fragmentarium.ms:443/loris/F-lcqf/STPL_Grolier_44r.JPG/full/full/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 3507, + "width": 2858, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://fragmentarium.ms:443/loris/F-lcqf/STPL_Grolier_44r.JPG", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/F-lcqf/STPL_Grolier_44v.JPG.json", + "@type": "sc:Canvas", + "label": "STPL_Grolier_44v", + "height": 3844, + "width": 3024, + "images": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/annotation/F-lcqf/STPL_Grolier_44v.JPG.json", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/F-lcqf/STPL_Grolier_44v.JPG.json", + "resource": { + "@id": "https://fragmentarium.ms:443/loris/F-lcqf/STPL_Grolier_44v.JPG/full/full/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 3844, + "width": 3024, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://fragmentarium.ms:443/loris/F-lcqf/STPL_Grolier_44v.JPG", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "@type": "sc:Canvas", + "label": "Lacuna", + "height": 1800, + "width": 1400, + "images": [ + { + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "resource": { + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg/full/full/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1800, + "width": 1400, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016192/full/!200,200/0/default.jpg.json", + "@type": "sc:Canvas", + "label": "15r", + "height": 4966, + "width": 3728, + "images": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/annotation/https://collections.library.yale.edu/iiif/2/1016192/full/!200,200/0/default.jpg.json", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016192/full/!200,200/0/default.jpg.json", + "resource": { + "@id": "https://collections.library.yale.edu/iiif/2/1016192/full/!200,200/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 4966, + "width": 3728, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://collections.library.yale.edu/iiif/2/1016192", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016193/full/!200,200/0/default.jpg.json", + "@type": "sc:Canvas", + "label": "15v", + "height": 4935, + "width": 3667, + "images": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/annotation/https://collections.library.yale.edu/iiif/2/1016193/full/!200,200/0/default.jpg.json", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016193/full/!200,200/0/default.jpg.json", + "resource": { + "@id": "https://collections.library.yale.edu/iiif/2/1016193/full/!200,200/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 4935, + "width": 3667, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://collections.library.yale.edu/iiif/2/1016193", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "@type": "sc:Canvas", + "label": "Lacuna", + "height": 1800, + "width": 1400, + "images": [ + { + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "resource": { + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg/full/full/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1800, + "width": 1400, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016194/full/!200,200/0/default.jpg.json", + "@type": "sc:Canvas", + "label": "16r", + "height": 4465, + "width": 3607, + "images": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/annotation/https://collections.library.yale.edu/iiif/2/1016194/full/!200,200/0/default.jpg.json", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016194/full/!200,200/0/default.jpg.json", + "resource": { + "@id": "https://collections.library.yale.edu/iiif/2/1016194/full/!200,200/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 4465, + "width": 3607, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://collections.library.yale.edu/iiif/2/1016194", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016195/full/!200,200/0/default.jpg.json", + "@type": "sc:Canvas", + "label": "16v", + "height": 4482, + "width": 3679, + "images": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/annotation/https://collections.library.yale.edu/iiif/2/1016195/full/!200,200/0/default.jpg.json", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016195/full/!200,200/0/default.jpg.json", + "resource": { + "@id": "https://collections.library.yale.edu/iiif/2/1016195/full/!200,200/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 4482, + "width": 3679, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://collections.library.yale.edu/iiif/2/1016195", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "@type": "sc:Canvas", + "label": "Lacuna", + "height": 1800, + "width": 1400, + "images": [ + { + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "resource": { + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg/full/full/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1800, + "width": 1400, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016196/full/!200,200/0/default.jpg.json", + "@type": "sc:Canvas", + "label": "17r", + "height": 4605, + "width": 3337, + "images": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/annotation/https://collections.library.yale.edu/iiif/2/1016196/full/!200,200/0/default.jpg.json", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016196/full/!200,200/0/default.jpg.json", + "resource": { + "@id": "https://collections.library.yale.edu/iiif/2/1016196/full/!200,200/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 4605, + "width": 3337, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://collections.library.yale.edu/iiif/2/1016196", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016197/full/!200,200/0/default.jpg.json", + "@type": "sc:Canvas", + "label": "17v", + "height": 4595, + "width": 3339, + "images": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/annotation/https://collections.library.yale.edu/iiif/2/1016197/full/!200,200/0/default.jpg.json", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016197/full/!200,200/0/default.jpg.json", + "resource": { + "@id": "https://collections.library.yale.edu/iiif/2/1016197/full/!200,200/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 4595, + "width": 3339, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://collections.library.yale.edu/iiif/2/1016197", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "@type": "sc:Canvas", + "label": "Lacuna", + "height": 1800, + "width": 1400, + "images": [ + { + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "resource": { + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg/full/full/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1800, + "width": 1400, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://cantus.staging.simssa.ca/iiif/lacuna.jpg", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://ids.lib.harvard.edu/ids/iiif/53891256/full/full/0/native.jpg.json", + "@type": "sc:Canvas", + "label": "Recto (seq. 1)", + "height": 3608, + "width": 2858, + "images": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/annotation/https://ids.lib.harvard.edu/ids/iiif/53891256/full/full/0/native.jpg.json", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://ids.lib.harvard.edu/ids/iiif/53891256/full/full/0/native.jpg.json", + "resource": { + "@id": "https://ids.lib.harvard.edu/ids/iiif/53891256/full/full/0/native.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 3608, + "width": 2858, + "service": { + "@context": "http://library.stanford.edu/iiif/image-api/1.1/context.json", + "@id": "https://ids.lib.harvard.edu/ids/iiif/53891256", + "profile": "http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level2" + } + } + } + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://ids.lib.harvard.edu/ids/iiif/53891267/full/full/0/native.jpg.json", + "@type": "sc:Canvas", + "label": "Verso (seq. 2)", + "height": 3608, + "width": 2858, + "images": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/annotation/https://ids.lib.harvard.edu/ids/iiif/53891267/full/full/0/native.jpg.json", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://ids.lib.harvard.edu/ids/iiif/53891267/full/full/0/native.jpg.json", + "resource": { + "@id": "https://ids.lib.harvard.edu/ids/iiif/53891267/full/full/0/native.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 3608, + "width": 2858, + "service": { + "@context": "http://library.stanford.edu/iiif/image-api/1.1/context.json", + "@id": "https://ids.lib.harvard.edu/ids/iiif/53891267", + "profile": "http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level2" + } + } + } + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/F-8fu0/BRBL_Zi_1525_inner_back_inverted_rotated.jpg.json", + "@type": "sc:Canvas", + "label": "BRBL_Zi_1525_inner_back", + "height": 3117, + "width": 2247, + "images": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/annotation/F-8fu0/BRBL_Zi_1525_inner_back_inverted_rotated.jpg.json", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/F-8fu0/BRBL_Zi_1525_inner_back_inverted_rotated.jpg.json", + "resource": { + "@id": "https://fragmentarium.ms:443/loris/F-8fu0/BRBL_Zi_1525_inner_back_inverted_rotated.jpg/full/full/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 3117, + "width": 2247, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://fragmentarium.ms:443/loris/F-8fu0/BRBL_Zi_1525_inner_back_inverted_rotated.jpg", + "profile": "http://iiif.io/api/image/2/level2.json" + } + } + } + ] + } + ] + } + ], + "structures": [ + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/range/TopLevelRangeGroup.json", + "@type": "sc:Range", + "@viewingHint": "top", + "label": "F-75ud", + "ranges": [ + "https://fragmentarium.ms/metadata/iiif/F-75ud/range/Range-1564.json" + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/range/Range-1564.json", + "@type": "sc:Range", + "within": "https://fragmentarium.ms/metadata/iiif/F-75ud/range/TopLevelRangeGroup.json", + "label": "Content structure (Contents)", + "ranges": [ + "https://fragmentarium.ms/metadata/iiif/F-75ud/range/Range-1564-2978.json", + "https://fragmentarium.ms/metadata/iiif/F-75ud/range/Range-1564-2979.json", + "https://fragmentarium.ms/metadata/iiif/F-75ud/range/Range-1564-3023.json", + "https://fragmentarium.ms/metadata/iiif/F-75ud/range/Range-1564-2980.json", + "https://fragmentarium.ms/metadata/iiif/F-75ud/range/Range-1564-2982.json", + "https://fragmentarium.ms/metadata/iiif/F-75ud/range/Range-1564-2984.json", + "https://fragmentarium.ms/metadata/iiif/F-75ud/range/Range-1564-2985.json", + "https://fragmentarium.ms/metadata/iiif/F-75ud/range/Range-1564-2986.json", + "https://fragmentarium.ms/metadata/iiif/F-75ud/range/Range-1564-2987.json", + "https://fragmentarium.ms/metadata/iiif/F-75ud/range/Range-1564-2988.json", + "https://fragmentarium.ms/metadata/iiif/F-75ud/range/Range-1564-2989.json", + "https://fragmentarium.ms/metadata/iiif/F-75ud/range/Range-1564-2990.json", + "https://fragmentarium.ms/metadata/iiif/F-75ud/range/Range-1564-2991.json", + "https://fragmentarium.ms/metadata/iiif/F-75ud/range/Range-1564-2992.json" + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/range/Range-1564-2978.json", + "@type": "sc:Range", + "within": "https://fragmentarium.ms/metadata/iiif/F-75ud/range/Range-1564.json", + "label": "Fourth Sunday of \nAdvent", + "canvases": [ + "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016164/full/!200,200/0/default.jpg.json", + "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016165/full/!200,200/0/default.jpg.json" + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/range/Range-1564-2979.json", + "@type": "sc:Range", + "within": "https://fragmentarium.ms/metadata/iiif/F-75ud/range/Range-1564.json", + "label": "Week after the Fourth Sunday of Advent", + "canvases": [ + "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016166/full/!200,200/0/default.jpg.json", + "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016167/full/!200,200/0/default.jpg.json" + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/range/Range-1564-3023.json", + "@type": "sc:Range", + "within": "https://fragmentarium.ms/metadata/iiif/F-75ud/range/Range-1564.json", + "label": "Sanctorale for the week after Christmas ", + "canvases": [ + "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/F-wn0s/54_8_1r.JPG.json", + "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/F-wn0s/54_8_1v.JPG.json", + "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/F-dq2m/54_8_2r.JPG.json", + "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/F-dq2m/54_8_2v.JPG.json" + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/range/Range-1564-2980.json", + "@type": "sc:Range", + "within": "https://fragmentarium.ms/metadata/iiif/F-75ud/range/Range-1564.json", + "label": "Epiphany (6 January)", + "canvases": [ + "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016168/full/!200,200/0/default.jpg.json", + "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016169/full/!200,200/0/default.jpg.json" + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/range/Range-1564-2982.json", + "@type": "sc:Range", + "within": "https://fragmentarium.ms/metadata/iiif/F-75ud/range/Range-1564.json", + "label": "Epiphany Season", + "canvases": [ + "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/F-xgzh/II_1_i_1r.jpg.json", + "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/F-xgzh/II_1_i_1v.jpg.json", + "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/F-nd7s/II_1_i_2r.jpg.json", + "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/F-nd7s/II_1_i_2v.jpg.json", + "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/F-nd7s/II_1_i_3r.jpg.json", + "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/F-nd7s/II_1_i_3v.jpg.json", + "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/F-xgzh/II_1_i_4r.jpg.json", + "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/F-xgzh/II_1_i_4v.jpg.json", + "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016170/full/!200,200/0/default.jpg.json", + "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016171/full/!200,200/0/default.jpg.json" + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/range/Range-1564-2984.json", + "@type": "sc:Range", + "within": "https://fragmentarium.ms/metadata/iiif/F-75ud/range/Range-1564.json", + "label": "Sanctorale: Feb. - March", + "canvases": [ + "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016172/full/!200,200/0/default.jpg.json", + "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016173/full/!200,200/0/default.jpg.json", + "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016174/full/!200,200/0/default.jpg.json", + "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016175/full/!200,200/0/default.jpg.json", + "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/F-1s1f/Badgastein_r.JPG.json", + "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/F-1s1f/Badgastein_v.jpg.json", + "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://ids.lib.harvard.edu/ids/iiif/53891252/full/full/0/native.jpg.json", + "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://ids.lib.harvard.edu/ids/iiif/53891255/full/full/0/native.jpg.json", + "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016176/full/!200,200/0/default.jpg.json", + "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016177/full/!200,200/0/default.jpg.json" + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/range/Range-1564-2985.json", + "@type": "sc:Range", + "within": "https://fragmentarium.ms/metadata/iiif/F-75ud/range/Range-1564.json", + "label": "Lent Season", + "canvases": [ + "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016178/full/!200,200/0/default.jpg.json", + "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016179/full/!200,200/0/default.jpg.json", + "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016180/full/!200,200/0/default.jpg.json", + "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016181/full/!200,200/0/default.jpg.json", + "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016182/full/!200,200/0/default.jpg.json", + "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016183/full/!200,200/0/default.jpg.json" + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/range/Range-1564-2986.json", + "@type": "sc:Range", + "within": "https://fragmentarium.ms/metadata/iiif/F-75ud/range/Range-1564.json", + "label": "Easter Season", + "canvases": [ + "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016184/full/!200,200/0/default.jpg.json", + "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016185/full/!200,200/0/default.jpg.json", + "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016186/full/!200,200/0/default.jpg.json", + "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016187/full/!200,200/0/default.jpg.json", + "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016188/full/!200,200/0/default.jpg.json", + "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016189/full/!200,200/0/default.jpg.json" + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/range/Range-1564-2987.json", + "@type": "sc:Range", + "within": "https://fragmentarium.ms/metadata/iiif/F-75ud/range/Range-1564.json", + "label": "Summer Sundays", + "canvases": [ + "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016190/full/!200,200/0/default.jpg.json", + "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016191/full/!200,200/0/default.jpg.json" + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/range/Range-1564-2988.json", + "@type": "sc:Range", + "within": "https://fragmentarium.ms/metadata/iiif/F-75ud/range/Range-1564.json", + "label": "Sanctorale: August", + "canvases": [ + "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/F-lcqf/STPL_Grolier_44r.JPG.json", + "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/F-lcqf/STPL_Grolier_44v.JPG.json" + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/range/Range-1564-2989.json", + "@type": "sc:Range", + "within": "https://fragmentarium.ms/metadata/iiif/F-75ud/range/Range-1564.json", + "label": "Sanctorale: September", + "canvases": [ + "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016192/full/!200,200/0/default.jpg.json", + "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016193/full/!200,200/0/default.jpg.json" + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/range/Range-1564-2990.json", + "@type": "sc:Range", + "within": "https://fragmentarium.ms/metadata/iiif/F-75ud/range/Range-1564.json", + "label": "Sanctorale: November", + "canvases": [ + "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016194/full/!200,200/0/default.jpg.json", + "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016195/full/!200,200/0/default.jpg.json" + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/range/Range-1564-2991.json", + "@type": "sc:Range", + "within": "https://fragmentarium.ms/metadata/iiif/F-75ud/range/Range-1564.json", + "label": "Sanctorale: December", + "canvases": [ + "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016196/full/!200,200/0/default.jpg.json", + "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://collections.library.yale.edu/iiif/2/1016197/full/!200,200/0/default.jpg.json" + ] + }, + { + "@id": "https://fragmentarium.ms/metadata/iiif/F-75ud/range/Range-1564-2992.json", + "@type": "sc:Range", + "within": "https://fragmentarium.ms/metadata/iiif/F-75ud/range/Range-1564.json", + "label": "Common of Saints", + "canvases": [ + "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://ids.lib.harvard.edu/ids/iiif/53891256/full/full/0/native.jpg.json", + "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/https://ids.lib.harvard.edu/ids/iiif/53891267/full/full/0/native.jpg.json", + "https://fragmentarium.ms/metadata/iiif/F-75ud/canvas/F-8fu0/BRBL_Zi_1525_inner_back_inverted_rotated.jpg.json" + ] + } + ] +} \ No newline at end of file diff --git a/docker-compose.yaml b/docker-compose.yaml index 464ca7f2..47419b3b 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -44,6 +44,8 @@ services: - "${PORT}:80" depends_on: - app + volumes: + - ./cantaloupe/interim_files/manifests:/code/manifests solr: build: ./solr @@ -94,3 +96,17 @@ services: - RABBIT_PASSWORD=${RABBIT_PASSWORD} - RABBIT_VHOST=${RABBIT_VHOST} restart: always + + cantaloupe: + build: ./cantaloupe + container_name: cantus-cantaloupe-1 + volumes: + - ./cantaloupe/interim_files/images:/srv/images + command: + [ + "java", + "-Dcantaloupe.config=/etc/cantaloupe/cantaloupe.properties", + "-Xmx2g", + "-jar", + "/opt/cantaloupe/cantaloupe-5.0.5/cantaloupe-5.0.5.jar" + ] diff --git a/nginx/nginx.conf b/nginx/nginx.conf index 1b53f903..18c93edd 100644 --- a/nginx/nginx.conf +++ b/nginx/nginx.conf @@ -43,13 +43,22 @@ http { client_max_body_size 4G; # set the correct host(s) for your site - server_name cantus.simssa.ca cantus.staging.simssa.ca dev-cantus.simssa.ca localhost + server_name cantus.simssa.ca cantus.staging.simssa.ca dev-cantus.simssa.ca localhost; keepalive_timeout 5; # path for static files root /code; + location /iiif { + proxy_pass http://cantaloupe:8182/iiif/2; + } + + + location /local_manifests { + alias /code/manifests/; + } + location / { # checks for static file, if not found proxy to app try_files $uri @proxy_to_app;