feedback-ls

star 14

Guide for sending document pages to Label Studio for human feedback on transcriptions. Use when: feedback, label studio, annotation, review transcription, quality check, send to label studio, import to label studio, human review, correct transcription, segmentation feedback, transcription feedback, ALTO to label studio, review pages, flag pages for review, quality assurance, QA, annotation task, annotate images, label images, send images for annotation.

AI-Riksarkivet By AI-Riksarkivet schedule Updated 2/24/2026

name: feedback-ls description: > Guide for sending document pages to Label Studio for human feedback on transcriptions. Use when: feedback, label studio, annotation, review transcription, quality check, send to label studio, import to label studio, human review, correct transcription, segmentation feedback, transcription feedback, ALTO to label studio, review pages, flag pages for review, quality assurance, QA, annotation task, annotate images, label images, send images for annotation.

Label Studio Feedback Workflow

Send document pages to Label Studio for human annotation and feedback.

Tool

  • label_import_to_label_studio — Import pages to a Label Studio project. Two modes:
    • With ALTO: pre-annotated tasks with polygons and transcriptions
    • Images only: blank tasks for annotation from scratch

When to Use

  • User asks to send pages for human review or annotation
  • User wants to flag transcription or segmentation issues
  • User wants to create Label Studio tasks from browse results
  • User wants to send images for annotation from scratch
  • User asks for quality assurance on specific pages

Two Modes

Mode 1: Pre-annotated (with ALTO XML)

Use when pages already have AI transcriptions. The tool fetches ALTO XML, extracts text line polygons and transcriptions, and creates VectorLabels pre-annotations.

{
  "image_urls": [
    "https://lbiiif.riksarkivet.se/arkis!30002056_00004/full/max/0/default.jpg"
  ],
  "alto_urls": [
    "https://sok.riksarkivet.se/dokument/alto/SE_RA_30002056_00004"
  ],
  "feedback": [["Transcription"]]
}

Mode 2: Images only (no ALTO)

Use when there are no existing transcriptions — the user wants to annotate from scratch. Just pass image URLs, omit alto_urls.

{
  "image_urls": [
    "https://lbiiif.riksarkivet.se/arkis!30002056_00004/full/max/0/default.jpg",
    "https://lbiiif.riksarkivet.se/arkis!30002056_00005/full/max/0/default.jpg"
  ]
}

Choosing the Right Source for Pre-annotations

When the user wants to send pages with pre-annotations, choose the source based on what's available:

Situation Source How
Pages from browse_document results ALTO XML from Riksarkivet Pass alto_urls from browse output
User has images without transcriptions No pre-annotations Omit alto_urls (image-only mode)
User has images and wants AI transcription first HTR transcription Use htr_transcribe first to generate ALTO XML, then pass the ALTO export URLs as alto_urls
User wants to label/annotate themselves No pre-annotations Omit alto_urls — blank tasks for manual annotation

Tip: If the user has untranscribed images and wants pre-annotations, suggest running htr_transcribe (see /htr-transcription skill) first to generate ALTO XML, then feed those results into this tool.

Workflow

1. Get page URLs

From browse results: Call browse_browse_document first (or use results already in the conversation). Each page includes:

  • ALTO XML URL: https://sok.riksarkivet.se/dokument/alto/...
  • Image URL: https://lbiiif.riksarkivet.se/arkis!.../full/max/0/default.jpg

From any image source: Any publicly accessible image URL works for image-only mode.

2. Determine feedback choices (optional, ALTO mode only)

Value Meaning
Transcription Text recognition needs correction
Segmentation Line/region boundaries need correction

Each page gets its own list of feedback values. Use an empty list [] for pages that need general review without a specific feedback flag.

3. Optionally assign to a user

Pass assign_to with a Label Studio user's email to auto-assign the imported tasks for annotation. If omitted, tasks are created unassigned.

{
  "image_urls": ["..."],
  "alto_urls": ["..."],
  "assign_to": "reviewer@example.com"
}

4. Call the tool

Label Studio URL, token, and project ID are configured via environment variables (LS_URL, LS_TOKEN, LS_PROJECT_ID) — no need to pass them unless overriding.

5. Confirm to the user

The tool returns:

  • Number of tasks imported and the mode (pre-annotated or image-only)
  • Who the tasks were assigned to (if assign_to was provided)
  • Direct links to each task in Label Studio for labeling

Share the task links with the user so they can go directly to Label Studio.

Dry Run — Preview Before Import

Set dry_run=true to see the converted Label Studio JSON without importing.

{
  "image_urls": ["..."],
  "alto_urls": ["..."],
  "dry_run": true
}

Pairing Rules

When using alto_urls, all lists are paired by index — alto_urls[i], image_urls[i], and feedback[i] refer to the same page.

Rule Detail
image_urls is always required One image URL per page
alto_urls is optional Omit for image-only tasks
alto_urls and image_urls must match length One ALTO XML per image
feedback must match length if provided One feedback list per page
feedback requires alto_urls Feedback choices attach to ALTO text regions

Extracting URLs from Browse Results

The browse_browse_document tool returns per-page links in this format:

🔗 Links:
  📝 ALTO XML: https://sok.riksarkivet.se/dokument/alto/SE_RA_30002056_00004
  🖼️  Image: https://lbiiif.riksarkivet.se/arkis!30002056_00004/full/max/0/default.jpg

Collect the Image URLs (always needed) and ALTO XML URLs (only if you want pre-annotations).

Batch Strategy

  • Small sets (1-10 pages): Send all pages in a single call.
  • Larger sets: Batch into groups of 10-20 pages per call to avoid timeouts. The tool has a 120-second timeout.

Common Mistakes

Mistake Fix
Mismatched list lengths alto_urls and image_urls must be the same length
Passing feedback without alto_urls Feedback requires ALTO (choices attach to text regions)
Passing feedback as flat list Each entry must be a list of strings, e.g. [["Transcription"], []] not ["Transcription", ""]
Wrong ALTO URL format Use the full URL from browse results, not just the page ID
Passing Label Studio credentials Credentials are loaded from env vars — only pass if overriding

Environment Variables

Variable Description
LS_URL Label Studio instance URL
LS_TOKEN Label Studio Personal Access Token (JWT PAT)
LS_PROJECT_ID Target project ID

These are configured in packages/label-mcp/.env and loaded automatically.

Install via CLI
npx skills add https://github.com/AI-Riksarkivet/ra-mcp --skill feedback-ls
Repository Details
star Stars 14
call_split Forks 2
navigation Branch main
article Path SKILL.md
More from Creator
AI-Riksarkivet
AI-Riksarkivet Explore all skills →