Michael J Wright Archive Documentation

Curation Workflow Guide - Michael J Wright Digital Archive

Overview

This guide provides step-by-step instructions for curating content into the Fedora 6 repository, with emphasis on storing low-resolution, watermarked access copies in Fedora and storing full-resolution masters outside Fedora (referenced via metadata).


Prerequisites

Required Tools

Access Credentials

Repository Endpoints

Note: Production endpoint uses automatic authentication via Cloudflare Worker. For curator-specific actions, test at localhost first.


Workflow 1: Curating a Painting

Step 1: Prepare Master File

Ensure you have the high-resolution archival master:

Example: MJW-P-1987-042_master.tif

Step 2: Create Web Preview with Watermark

Using ImageMagick, convert the master to a web-optimized preview:

magick convert MJW-P-1987-042_master.tif `
  -resize 1200x1200> `
  -quality 80 `
  -density 72 `
  -colorspace sRGB `
  -gravity SouthEast `
  -pointsize 16 `
  -fill white `
  -stroke black `
  -strokewidth 2 `
  -annotate +20+20 "© Michael J Wright - Preview Only" `
  MJW-P-1987-042_web.jpg

Verify:

Step 3: Store Master File Separately

Move or copy the master file to external archive storage:

\\archive\paintings\1987\MJW-P-1987-042_master.tif

Or upload to cloud storage (AWS S3, Azure Blob, etc.)

Step 4: Prepare Metadata

Copy the painting template and fill in details:

cp templates/painting-template.json metadata-temp.json

Edit metadata-temp.json:

{
  "@context": {
    "dc": "http://purl.org/dc/elements/1.1/",
    "dcterms": "http://purl.org/dc/terms/",
    "schema": "https://schema.org/"
  },
  "dc:title": "Coastal Landscape at Dusk",
  "dc:creator": "Michael J Wright",
  "dc:date": "1987-03",
  "dc:type": "Painting",
  "dc:format": "Oil on canvas",
  "dc:rights": "Copyright © Michael J Wright. All rights reserved.",
  "dc:description": "A moody depiction of the Australian coast at twilight, featuring windswept vegetation and turbulent seas",
  "dc:subject": [
    "Landscape",
    "Seascape",
    "Australian landscape",
    "Coast"
  ],
  "schema:artworkSurface": "76 x 101 cm",
  "dc:identifier": "MJW-P-1987-042",
  "dcterms:isPartOf": "Coastal Studies Series",
  "schema:contentLocation": "Private collection, Melbourne",
  "dcterms:hasFormat": {
    "@id": "https://licensing.michaeljwright.com.au/masters/MJW-P-1987-042",
    "dc:format": "image/tiff",
    "schema:contentSize": "87340032",
    "schema:encodingFormat": "TIFF; 16-bit; Adobe RGB; 300 DPI",
    "dcterms:accessRights": "Restricted; commercial licensing required"
  }
}

Consult:

Step 5: Create Container in Fedora

Using cURL, create the container with metadata:

curl -X PUT `
  -H "Content-Type: application/ld+json" `
  --data-binary "@metadata-temp.json" `
  -u curator1:ChangeThisCuratorPassword789! `
  http://localhost:8080/fcrepo/rest/paintings/coastal-studies/MJW-P-1987-042

Response: 201 Created with Location header

Step 6: Upload Web Preview Binary

Attach the web preview image to the container:

curl -X PUT `
  -H "Content-Type: image/jpeg" `
  -H "Content-Disposition: attachment; filename=MJW-P-1987-042_web.jpg" `
  --data-binary "@MJW-P-1987-042_web.jpg" `
  -u curator1:ChangeThisCuratorPassword789! `
  http://localhost:8080/fcrepo/rest/paintings/coastal-studies/MJW-P-1987-042/web-preview

Response: 201 Created

Step 7: Verify

Retrieve the resource to confirm:

curl -H "Accept: application/ld+json" `
  -u curator1:ChangeThisCuratorPassword789! `
  http://localhost:8080/fcrepo/rest/paintings/coastal-studies/MJW-P-1987-042

Verify:

Step 8: View Web Preview

Access the image in browser:

http://localhost:8080/fcrepo/rest/paintings/coastal-studies/MJW-P-1987-042/web-preview

Check:


Workflow 2: Curating a Photograph

Step 1: Prepare Master File

Step 2: Create Web Preview

magick convert MJW-PH-1992-089_master.dng `
  -resize 1024x1024> `
  -quality 75 `
  -density 72 `
  -colorspace sRGB `
  -gravity SouthEast `
  -pointsize 14 `
  -fill white `
  -stroke black `
  -strokewidth 2 `
  -annotate +20+20 "© Michael J Wright - Preview Only" `
  MJW-PH-1992-089_web.jpg

Step 3-8: Follow Same Process as Paintings

Container Path Example:

/fcrepo/rest/photographs/nature-studies/MJW-PH-1992-089

Workflow 3: Curating a Poem

Step 1: Prepare Text

Step 2: Prepare Metadata

Use templates/poem-template.json:

{
  "@context": {
    "dc": "http://purl.org/dc/elements/1.1/",
    "dcterms": "http://purl.org/dc/terms/",
    "schema": "https://schema.org/"
  },
  "dc:title": "The Weight of Winter",
  "dc:creator": "Michael J Wright",
  "dc:date": "1995",
  "dc:type": "Poem",
  "dc:format": "Text; 42 lines",
  "dc:language": "en-AU",
  "dc:rights": "Copyright © Michael J Wright. All rights reserved.",
  "dc:description": "A meditation on loss and renewal through seasonal imagery",
  "dc:subject": [
    "Nature poetry",
    "Australian literature",
    "Seasons"
  ],
  "dc:identifier": "MJW-PM-1995-018",
  "schema:citation": "When the frost descends on sleeping fields",
  "dcterms:isPartOf": "Winter Sonnets Collection",
  "schema:contentLocation": "Artist's estate"
}

Step 3: Create Container

curl -X PUT `
  -H "Content-Type: application/ld+json" `
  --data-binary "@metadata-temp.json" `
  -u curator1:ChangeThisCuratorPassword789! `
  http://localhost:8080/fcrepo/rest/poems/winter-sonnets/MJW-PM-1995-018

Step 4: Upload Poem Text (Optional)

If storing full text as binary:

curl -X PUT `
  -H "Content-Type: text/plain; charset=utf-8" `
  -H "Content-Disposition: attachment; filename=MJW-PM-1995-018.txt" `
  --data-binary "@MJW-PM-1995-018.txt" `
  -u curator1:ChangeThisCuratorPassword789! `
  http://localhost:8080/fcrepo/rest/poems/winter-sonnets/MJW-PM-1995-018/full-text

Alternative: Embed full text in dc:description if under ~500 words.


Workflow 4: Curating a Notebook

Step 1: Prepare Master Files

Notebooks are multi-page documents:

Step 2: Create Web Previews for Sample Pages

Create previews for select pages (e.g., first page, representative spreads):

magick convert MJW-NB-1989-003_p001_master.tif `
  -resize 1000x1000> `
  -quality 70 `
  -density 96 `
  -colorspace sRGB `
  -gravity SouthEast `
  -pointsize 14 `
  -fill white `
  -stroke black `
  -strokewidth 2 `
  -annotate +20+20 "© Michael J Wright - Preview Only" `
  MJW-NB-1989-003_p001_web.jpg

Step 3: Prepare Metadata

Use templates/notebook-template.json:

{
  "@context": {
    "dc": "http://purl.org/dc/elements/1.1/",
    "dcterms": "http://purl.org/dc/terms/",
    "schema": "https://schema.org/"
  },
  "dc:title": "Field Notes - Outback Journey 1989",
  "dc:creator": "Michael J Wright",
  "dc:date": "1989-05/1989-08",
  "dc:type": "Notebook",
  "dc:format": "Handwritten journal; mixed media",
  "dcterms:extent": "87 pages",
  "dc:rights": "Copyright © Michael J Wright. All rights reserved.",
  "dc:description": "Travel journal documenting 3-month journey through central Australia, includes sketches, poetry fragments, and botanical observations",
  "dc:subject": [
    "Travel writing",
    "Australian outback",
    "Artist notebooks"
  ],
  "dc:identifier": "MJW-NB-1989-003",
  "dcterms:tableOfContents": "Journey log (p.1-45), Sketches (p.46-67), Poems (p.68-87)",
  "dcterms:relation": "Source material for 'Desert Series' paintings 1990-1991",
  "schema:contentLocation": "Artist's estate",
  "dcterms:hasFormat": {
    "@id": "https://licensing.michaeljwright.com.au/masters/MJW-NB-1989-003",
    "dc:format": "application/pdf",
    "schema:contentSize": "523400192",
    "schema:encodingFormat": "PDF; multipage TIFF sequence; 400 DPI",
    "dcterms:accessRights": "Restricted; commercial licensing required"
  }
}

Step 4: Create Container and Upload Sample Pages

Create notebook container:

curl -X PUT `
  -H "Content-Type: application/ld+json" `
  --data-binary "@metadata-temp.json" `
  -u curator1:ChangeThisCuratorPassword789! `
  http://localhost:8080/fcrepo/rest/notebooks/outback-journals/MJW-NB-1989-003

Upload sample page previews:

curl -X PUT `
  -H "Content-Type: image/jpeg" `
  -H "Content-Disposition: attachment; filename=MJW-NB-1989-003_p001_web.jpg" `
  --data-binary "@MJW-NB-1989-003_p001_web.jpg" `
  -u curator1:ChangeThisCuratorPassword789! `
  http://localhost:8080/fcrepo/rest/notebooks/outback-journals/MJW-NB-1989-003/page-001-preview

Repeat for additional representative pages.


Container Hierarchy Strategy

Recommended Structure

/fcrepo/rest/
  paintings/
    coastal-studies/
      MJW-P-1987-042
      MJW-P-1988-015
    desert-series/
      MJW-P-1990-023
  photographs/
    nature-studies/
      MJW-PH-1992-089
    urban-fragments/
      MJW-PH-1998-134
  poems/
    winter-sonnets/
      MJW-PM-1995-018
    nature-poetry/
      MJW-PM-1993-007
  notebooks/
    outback-journals/
      MJW-NB-1989-003
    sketchbooks/
      MJW-NB-1985-001

Container Type Selection

Use Basic Containers for maximum flexibility:

Creating Top-Level Containers

Before adding items, create series/category containers:

curl -X PUT `
  -H "Content-Type: text/turtle" `
  -u curator1:ChangeThisCuratorPassword789! `
  http://localhost:8080/fcrepo/rest/paintings/coastal-studies

This creates an empty container ready to hold individual artworks.


Image Preparation Checklist

Before uploading any visual work:


Metadata Update Workflow

To update metadata on an existing resource:

Step 1: Retrieve Current Metadata

curl -H "Accept: application/ld+json" `
  -u curator1:ChangeThisCuratorPassword789! `
  http://localhost:8080/fcrepo/rest/paintings/coastal-studies/MJW-P-1987-042 > current-metadata.json

Step 2: Edit Metadata

Modify current-metadata.json with changes.

Step 3: Update via PATCH (SPARQL)

Use SPARQL UPDATE to modify specific triples:

curl -X PATCH `
  -H "Content-Type: application/sparql-update" `
  -u curator1:ChangeThisCuratorPassword789! `
  --data-binary @- `
  http://localhost:8080/fcrepo/rest/paintings/coastal-studies/MJW-P-1987-042 << 'EOF'
PREFIX dc: <http://purl.org/dc/elements/1.1/>
DELETE { <> dc:description ?old }
INSERT { <> dc:description "Updated description with more detail about the painting" }
WHERE { <> dc:description ?old }
EOF

Step 4: Add Modification Timestamp

curl -X PATCH `
  -H "Content-Type: application/sparql-update" `
  -u curator1:ChangeThisCuratorPassword789! `
  --data "PREFIX dcterms: <http://purl.org/dc/terms/> INSERT { <> dcterms:modified \"2025-11-03T10:30:00Z\"^^<http://www.w3.org/2001/XMLSchema#dateTime> } WHERE {}" `
  http://localhost:8080/fcrepo/rest/paintings/coastal-studies/MJW-P-1987-042

Bulk Import Considerations

If you have many items to curate, consider:

  1. CSV Inventory: Create spreadsheet with catalog IDs, titles, dates, subjects, etc.
  2. Scripted Conversion: Write script to generate JSON metadata from CSV
  3. Batch Processing: Use ImageMagick batch commands to process all images
  4. Automated Upload: Script cURL commands to iterate through files

Example PowerShell script skeleton:

$csv = Import-Csv "inventory.csv"
foreach ($item in $csv) {
  $catalogId = $item.CatalogID
  $title = $item.Title
  # ... build JSON metadata
  # ... run ImageMagick conversion
  # ... execute cURL upload
}

Recommendation: Start with manual workflow for first 5-10 items to validate process, then automate.


Troubleshooting

Authentication Errors

Error: 401 Unauthorized
Solution: Verify credentials; check that container is restarted with latest .env values

Binary Upload Fails

Error: 413 Payload Too Large
Solution: Web preview should be < 300 KB; re-compress image

Metadata Validation Errors

Error: 400 Bad Request with JSON parse error
Solution: Validate JSON syntax at jsonlint.com; check quotes, commas, brackets

Container Already Exists

Error: 409 Conflict
Solution: Resource at that path exists; use different path or DELETE existing resource first

Watermark Not Visible

Issue: Watermark blends into image background
Solution: Adjust -stroke color or add shadow; test with -strokewidth 3 for more contrast


Quality Assurance

After ingestion, verify:

  1. Metadata Completeness: All required fields populated
  2. Keyword Accuracy: Terms match controlled vocabularies
  3. Image Quality: Web preview displays correctly; watermark visible
  4. File Naming: Follows convention exactly
  5. Master Archival: Full-resolution file safely stored externally
  6. Licensing Link: dcterms:hasFormat points to correct URL
  7. Accessibility: Public can view web preview without authentication (via Cloudflare Worker)

Next Steps

After completing initial curation: