Generate CEDAR template elements from openMINDS schemas and convert filled instances back to openMINDS-LD.
uv sync
cp .env.example .env # Edit with your CEDAR API key# Developer: generate elements and templates
uv run openminds2cedar generate core.Subject
uv run openminds2cedar template -r subject-study # From registry definition
uv run openminds2cedar validate output/
# Publish when ready
uv run openminds2cedar publish output/elements/
uv run openminds2cedar publish output/templates/
# Curator: convert by instance ID
uv run openminds2cedar convert https://repo.metadatacenter.org/template-instances/xxx
# Utilities
uv run openminds2cedar sync # Sync all CEDAR resources locallyGenerate CEDAR elements and templates, validate, and publish:
# 1. Generate elements and templates from registry
uv run openminds2cedar generate core.Subject
uv run openminds2cedar generate core.SubjectState
uv run openminds2cedar template -r subject-study # Uses registry/templates.yaml
# 2. Validate via CEDAR API
uv run openminds2cedar validate output/
# 3. Publish to CEDAR
uv run openminds2cedar publish output/elements/
uv run openminds2cedar publish output/templates/Convert CEDAR instances to openMINDS:
# Convert by CEDAR instance ID (fetches from CEDAR)
uv run openminds2cedar convert https://repo.metadatacenter.org/template-instances/xxx
# Or convert local file
uv run openminds2cedar convert path/to/instance.jsonThe template ID is embedded in the instance (schema:isBasedOn), so only the instance ID is needed.
output/ # All generated output (gitignored)
├── elements/ # Generated CEDAR elements
│ └── core/
├── templates/ # Generated CEDAR templates
└── openminds/ # Converted openMINDS collections
src/openminds2cedar/
├── api/ # CEDAR Workbench API client
├── converters/ # CEDAR -> openMINDS conversion
├── generators/ # CEDAR element/template generation
└── registry/ # Schema and field configuration (YAML)
from openminds2cedar.generators import CEDARElementGenerator
from openminds2cedar.converters import CEDARToOpenMINDSConverter
from openminds2cedar.api import CEDARClient
# Generate element
gen = CEDARElementGenerator()
element = gen.generate("core.Subject")
# Upload to CEDAR
client = CEDARClient()
client.upload(element)
# Convert instance to openMINDS (by ID)
instance = client.get_instance("https://repo.metadatacenter.org/template-instances/xxx")
converter = CEDARToOpenMINDSConverter()
collection = converter.convert_instance(instance)
collection.save("output/openminds/")Copy .env.example to .env and set:
CEDAR_API_KEY=your-api-key
CEDAR_FOLDER_ELEMENTS=https://repo.metadatacenter.org/folders/your-folder-id
CEDAR_FOLDER_TEMPLATES=https://repo.metadatacenter.org/folders/your-folder-id
CEDAR_FOLDER_INSTANCES=https://repo.metadatacenter.org/folders/your-folder-idFor development/testing, use a test folder on CEDAR. When ready for production:
- Create production folders on CEDAR Workbench
- Update
.envwith production folder IDs - Publish elements and templates to production folders
You can also specify the folder directly via CLI:
# Publish to specific folder
uv run openminds2cedar publish output/elements/ --folder https://repo.metadatacenter.org/folders/production-idRegistry files (schema/field/template config):
registry/schemas.yaml- Which openMINDS schemas to generateregistry/fields.yaml- Field mappings and controlled term classesregistry/templates.yaml- Template definitions with cardinality
This project is in early development and has not been fully validated. Interfaces and output formats may change.
This project is licensed under MIT.