Understand your content.
Tags, metadata, and analysis — modular by design.

Universal metadata intelligence core with product-specific modules. Senza stays fully supported; Cultiva foundation is prepared for the next generation of Glyph integrations.

View on GitHub Read the docs
v2.7.1 module: senza module: notes module: cultiva JS + Python

What’s new in 2.7

From Senza-specific pipeline to a universal core with pluggable product modules — without breaking existing integrations.

Universal contracts

normalizeInput() and normalizeResult() define a stable API surface. Any product module receives the same shape and returns a consistent result envelope.

Module routing

analyzeUniversal(input, { moduleId }) routes to the right handler. Unknown modules fall back to the default Senza analyzer with hints.fallbackReason.

Senza module adapter

Full Senza pipeline — tags, metadata, spectral analysis, kNN, local agent — wrapped as module-senza with zero behavior change for existing callers.

Notes module

Active title / headings / body pipeline with tag scoring and extractive summary stubs. Alias text. Target consumer: glyph-miO.

Cultiva foundation

Scaffold module and knowledge pack placeholder for future Cultiva product integration. Manifest, handler stub, and cultiva-foundation-v1.json ready for extension.

Architecture

Product-agnostic core with module adapters on top of the existing analysis pipeline.

analyzeUniversal(input, { moduleId })
  │
  ├─ module: senza → analyzeForSenza() → Senza pipeline (tags, spectral, kNN)
  ├─ module: notes → analyzeForNotes() → tags + extractive summary
  ├─ module: cultiva → analyzeForCultivaFoundation() → scaffold
  └─ fallback → analyzeMI() + hints.fallbackReason

contracts.js normalizeInput / normalizeResult / GLYPH_MI_API_VERSION
engine.js listGlyphModules / resolveGlyphModule / MODULE_HANDLERS

Modules

Each module has a manifest, handler, and optional knowledge pack.

Active

senza

Music library metadata intelligence for Senza. Capabilities: tags, metadata, spectral analysis, kNN neighbors, local agent hints. Enabled by default.

Active

notes

Textual notes for glyph-miO. Capabilities: tags, headings, extractive summary, metadata. Alias text.

Foundation

cultiva

Placeholder for Cultiva product integration. Manifest and handler scaffold in place; knowledge pack at knowledge/public/cultiva-foundation-v1.json.

API quick start

JavaScript universal entry and Python CLI for batch analysis.

import { analyzeUniversal, listGlyphModules } from './js/index.js'; const modules = listGlyphModules(); // [{ moduleId: 'senza', ... }, { moduleId: 'notes', ... }, ...] const result = await analyzeUniversal({ moduleId: 'senza', track: { path: '/music/artist/album/track.flac', title: 'Track' }, context: { app: 'senza' }, }, { moduleId: 'senza' }); // result: { apiVersion, moduleId, fields, confidence, sources, hints }

Python CLI

pip install -e ".[spectral]"
glyph-mi analyze --help

Where glyph-mi runs

Senza desktop

Primary consumer. Full pipeline with spectral features, kNN tag propagation, and local agent integration.

glyph-miO (Obsidian)

Obsidian plugin — should converge on the notes module. Unlike glyph-sO, it does not yet vendor glyph-mi.

Custom integrations

Use analyzeUniversal() with your own moduleId or extend the module registry for new products.

Glyph 2.7 family

Search and metadata intelligence, built to work together.