Jump to content

OpenSpeaks/Tools

From Meta, a Wikimedia project coordination wiki

The OpenSpeaks open-source tools are offline-first and for language archivists, including Wikimedians, to support them in documenting languages. All code will be licensed under a permissive open-source license (e.g., MIT or GPL), fully public, and free to use. The focus is simplicity, offline capability, and cross-platform access (desktop-first, browser-based where possible). Internet is required only for optional upload functions. The need for these tools within the community was identified during a previous Rapid Grant-supported project and was documented in this research paper.

Timeline: July 2025–June 2026

Tools
Prototype of OpenSpeaks Subtitler in action

Purpose

Create and edit subtitles quickly, especially for oral history and language documentation materials.

Core Features

  1. Load Media
    • Accepts common video/audio formats (MP4, MOV, MP3, WAV, etc.).
    • Offline loading with HTML5-based player.
  2. Dummy Subtitle Generation
    • Parameters:
      • Silence threshold (in dB).
      • Minimum silence length (in milliseconds/seconds).
    • Automatically segments media into draft subtitle chunks.
  3. Manual Editing Interface
    • Full timeline view + zoomed-in view for current subtitle (with 2–3 preceding/following subtitles visible).
    • Editable text overlay directly on video player.
    • Real-time update of subtitles in playback.
  4. Language Selection
    • Dropdown with ISO 639 language list.
  5. Export
    • Save as SRT or VTT.
    • UTF-8 encoding.
  6. Optional Wikimedia Upload
    • Login via OAuth using MediaWiki credentials.
    • Upload generated subtitles to Wikimedia Commons.

Tech Suggestions

  • Frontend: HTML5, JavaScript (possibly React or vanilla JS), Web Audio API for silence detection.
  • Backend: None (pure client-side, except Wikimedia API calls).
  • Media handling: ffmpeg.wasm for browser-based media analysis.
Update

Media Metadata Viewer & Compress Helper

[edit]
Screenshot of a prototype of OpenSpeaks Media Size Optimizer (see working prototype

Purpose

Quickly inspect media properties and compress files for sharing/editing.

Core Features

  1. Load Media & Display Metadata
    • Key data points:
      • Duration
      • Resolution (video)
      • Frame rate (fps)
      • Audio sample rate (Hz)
      • Bitrate
      • Codec info
  2. Compression Targeting
    • User enters desired output file size.
    • Tool calculates required bitrate for re-encoding.
  3. Compression Execution
    • Option to export compressed file.
    • Use ffmpeg.wasm or local ffmpeg wrapper.

Tech Suggestions

  • Frontend: HTML5/JavaScript UI.
  • Compression: ffmpeg.wasm or native ffmpeg calls in Electron.
See working prototype

Media Duration Calculator

[edit]
Prototype of OpenSpeaks Folder Media Analyzer

Purpose

Batch calculate total media duration of audio and video files inside folders for project planning/budgeting.

Core Features

  1. Folder Input
    • User points to a folder containing media files.
  2. Duration Summary
    • Outputs:
      • Total duration of all media.
      • Total duration of audio-only files.
      • Total duration of video-only files.
  3. Output Format
    • Display results on screen.
    • Option to export CSV or plain text report.

Tech Suggestions

  • Node.js or Python backend for folder scanning + ffprobe (from FFmpeg) for duration extraction.
  • Simple HTML/JS frontend.
Test working prototype

OpenSpeaks Bento

[edit]
Prototype of Multimedia Organization Tool

Purpose

Organise, categorise, tag, and batch-rename multimedia files (video, audio, image) inside a folder using structured naming conventions for production workflows.

Core Features

  1. Folder Input
  2. User selects a local folder containing media files via the File System Access API.
  3. Scans and lists all video, audio, and image files.
  1. File Categorisation & Tagging
  2. Assign categories (e.g., A-roll, B-roll) to files — categories are editable.
  3. Apply supplementary tags (e.g., Establishing, Close-up) independently of categories.
  4. Filter file list by category or tag.
  5. Inline notes per file within the file list view.
  1. Media Preview
  2. Built-in player for video, audio, and image preview.
  3. Displays current filename during playback.
  4. Audio files are visually distinguished with a different colour.
  1. Naming Convention Builder
  2. Configurable pattern: {language}-{type}-{names}-{subject}_{sequence}.{ext}
  3. Language prefix (e.g., en, hi).
  4. Type mapped to category (e.g., a for A-roll, b for B-roll).
  5. Speaker/participant names joined with hyphens; spaces converted to underscores.
  6. Subject/topic in Sentence Case with spaces as underscores.
  7. Auto-appended sequential numbering (_01, _02, etc.) to prevent overwrites.
  8. Example: en-a-Speaker_1-Speaker_2-Subject_01.mov
  1. Export & Rename
  2. Export organisation log as CSV or TSV with old name, new name, notes, category, type, and size.
  3. Batch rename files directly in the filesystem (requires browser permission).

Tech Stack

  • Self-contained single HTML file — works fully offline.
  • File System Access API for local folder access (Chromium-based browsers).
  • Vanilla HTML, CSS, and JavaScript — no external dependencies.
  • Also available as React/TypeScript app (Vite + Tailwind CSS + shadcn/ui).
Test working prototype

OpenSpeaks Tome

[edit]

Prototype now available here for testing. Former prototype was called Wikimedia Commons Metadata Generator

Prototype of Multimedia Organization Tool
Purpose

Helps create ready-to-paste wiki-code (templates, citations, categories, and licensing) for video, audio, image, and document uploads to Wikimedia Commons. It is designed for oral history and language documentation projects, and can read and write OpenSpeaks JSON, wikitext, and metadata exported from Lameta/OPEX (supported by Endangered Languages Archive) and BLAM/CMDI (supported by Language Archives Cologne).

Core Features

Structured Commons form Single-page form split into tabs: Basic Info, Production, People, Subtitles & Oral History, License, Import, and Preview & Export. Basic fields: file name and type, title and original title, description, language and ISO 639‑3 code, country, recording location, dates, runtime, colour and sound, and source (e.g. Own work). Production fields: project name, cast or featured speaker(s), genre, topic, producer, director, writer, cinematographer, editor, recordist/camera operator, and identifiers (DOI/EIDR, IMDb, ISRC). License and categorisation: Commons-compatible license selector and a multi-line categories field (one category per line, without [[Category:…]]).

People, moral rights, and author line

Dedicated "People & Attribution" tab for: Commons author username (without the "User:" prefix). Copyright holder (used when no username is available). Interviewees/participants with full name, Wikidata QID, gender, and role.

Live preview of the generated |author= parameter: A "Moral Rights" line that lists interviewees as (QID) when available, otherwise as plain names. A "Copyright" line that prefers [[User:Username]] when a username is provided, falling back to the copyright holder text.

The tool still accepts "Copyright holder" as input but does not emit a separate |Copyright_holder= parameter in {{OpenSpeaks}}; that information is folded into |author= instead.

Subtitles and OpenSpeaks Oral History Framework
Subtitles

One subtitle track per record: language, TimedText page URL or name, creators, and editors/reviewers. Generates a |Subtitles= line such as: In [[TimedText:…|Nepali]] by Name1, Name2; Name3 (editor), Name4 (reviewer)

If the editors/reviewers field contains a "/" (for example Name1, Name2 / Name3, Name4), names before the slash are tagged as editors and names after as reviewers. Oral history documentation: Fields for interviewer, recorder/camera operator, recording context (field, studio, remote, other), equipment, consent type (verbal, written, both, unknown), consent informed/revocable flags, sensitive content, and consent record location. Community review details: whether reviewed, review date, reviewers, and review notes. Transcript details: whether a transcript exists, transcript language(s), writer, editor, date, and URL. These fields are rendered as the three "OpenSpeaks Oral History Documentation Record" tables (Parameters 1–3) beneath the main file description, with the P1–P3 flags exposed as Framework_p1/p2/p3 inside {{OpenSpeaks}}.

Import existing metadata

"Import" tab supports: OpenSpeaks JSON: imports a previously exported JSON file using the OpenSpeaks v1.2 schema and repopulates the entire form. OPEX / IMDI 3.0: imports Lameta session metadata (.opex or IMDI XML), mapping title, description, location, languages, actors, keywords, and media file details into OpenSpeaks fields. BLAM / CMDI: imports BLAM JSON/JSON‑LD and maps basic collection information, languages, location, keywords, creators, and publication year.

"Paste Commons wikitext": Accepts a full Commons file description (with {{Information}} and nested {{OpenSpeaks}}).

Parses key fields (description, dates, source, author, subtitles, framework parameters, basic oral history table values, categories, and license) and fills the form so metadata can be cleaned up and re‑exported.

Preview and export

"Preview & Export" tab shows the generated output and lets you choose the format: Wikimedia wikitext: full file description with {{Information}}, nested {{OpenSpeaks}}, three oral history tables (Parameters 1–3), license header, and categories. JSON: OpenSpeaks v1.2 record with _version and _exportedAt, suitable for archiving or re‑import. Markdown: a human-readable summary of the record for reports or documentation. HTML: a simple stand-alone HTML summary page. One-click buttons to copy the output to the clipboard or download it as .txt, .json, .md or .html (file name based on the media file name).

Tech Stack
  • React 18, functional components and hooks.
  • Single-page app rendered entirely in the browser (no server side).
  • Static HTML + JavaScript; can be served from any static host (tested on GitHub Pages).
Current prototype
OpenSpeaks Metadata Generator
Roadmap / planned features

Export back to Lameta/OPEX and BLAM/CMDI using the same OpenSpeaks JSON as a pivot.

Import and export simple CSV/Excel representations of selected metadata fields for bulk editing in spreadsheets.

Required features/future expansion
  • Full interoperability with formats/standards used by archives such as Lameta, BLAM: Can import and export in these formats.
  • Ontology described in a documentation page
  • Option to import/export as CSV/Excel (is this needed though? for what?)

Needs

[edit]
  • Tool to ingest metadata in accepted formats by other archives and export Wikimedia Templates (partially done using OpenSpeaks Metadata Generator)
  • Citable files on Commons need to have a ready-to-past template if they are citable by concatenating input fields: DOI, Handle, URL, author(s), year, publisher. A separate citation section has to clraly share this info.

Blogs, reports & publications

[edit]

Inspirations

[edit]
  • LinguaLibre Dictionary for creating a dictionary using recordings on Commons: Excellent way to organise community-based recording sessions for those interested in building a dictionary