viznoir
Cinema-quality science visualization for AI agents — headless VTK via MCP.
Installation
Ajoutez ceci à la configuration MCP de votre client (Claude Desktop : claude_desktop_config.json ; Cursor : .cursor/mcp.json ; VS Code et les autres utilisent la même forme « mcpServers »).
viznoirclaude mcp add viznoir -e 'VIZNOIR_RENDER_BACKEND=<VIZNOIR_RENDER_BACKEND>' -e 'VIZNOIR_OUTPUT_DIR=<VIZNOIR_OUTPUT_DIR>' -- uvx viznoir==0.10.1
{
"mcpServers": {
"viznoir": {
"command": "uvx",
"args": [
"viznoir==0.10.1"
],
"env": {
"VIZNOIR_RENDER_BACKEND": "<VIZNOIR_RENDER_BACKEND>",
"VIZNOIR_OUTPUT_DIR": "<VIZNOIR_OUTPUT_DIR>"
}
}
}
}
Variables d'environnement
VIZNOIR_RENDER_BACKENDRendering backend: gpu, cpu, or autoVIZNOIR_OUTPUT_DIROutput directory for rendered images
Documentation
Tirée du README du projet sur GitHub, actualisée chaque semaine. Les liens ouvrent GitHub.
Sommaire
viznoir
VTK is all you need. Cinema-quality science visualization for AI agents.
One prompt → physics analysis → cinematic renders → LaTeX equations → publication-ready story.
What it does
An MCP server that gives AI agents full access to VTK's rendering pipeline — no ParaView GUI, no Jupyter notebooks, no display server. Your agent reads simulation data, applies filters, renders cinema-quality images, and exports animations, all headless.
Works with: Claude Code · Cursor · Windsurf · Gemini CLI · any MCP client
Quick Start
1. Install
pip install viznoir
# With optional extras
pip install "viznoir[mesh]" # meshio + trimesh (50+ formats)
pip install "viznoir[composite]" # Pillow + matplotlib (split_animate)
pip install "viznoir[all]" # everything
Requires Python ≥3.10. VTK wheel auto-installed (EGL headless rendering supported).
2. Verify
mcp-server-viznoir --help # server entry point
python -c "import viznoir; print(viznoir.__version__)"
3. Use with an MCP client
Add to your MCP client config (claude_desktop_config.json, ~/.cursor/mcp.json, etc.):
{
"mcpServers": {
"viznoir": {
"command": "mcp-server-viznoir",
"env": {
"VIZNOIR_DATA_DIR": "/path/to/your/simulation/data",
"VIZNOIR_OUTPUT_DIR": "/path/to/output"
}
}
}
}
Then ask your AI agent:
"Open cavity.foam, render the pressure field with cinematic lighting, then create a physics decomposition story."
4. Or use as a Python library (advanced)
All tool implementations are importable as async functions. You provide a VTKRunner and await the result:
import asyncio
from viznoir.core.runner import VTKRunner
from viznoir.tools.inspect import inspect_data_impl
from viznoir.tools.render import render_impl
async def main():
runner = VTKRunner()
meta = await inspect_data_impl(file_path="cavity.foam", runner=runner)
print(meta["fields"], meta["timesteps"])
result = await render_impl(
file_path="cavity.foam",
field_name="p",
runner=runner,
colormap="Cool to Warm",
camera="isometric",
width=1920, height=1080,
output_filename="pressure.png",
)
print(result.file_path)
asyncio.run(main())
See docs for the full tool reference.
Capabilities
| Category | Tools |
|---|---|
| Rendering | render · cinematic_render · batch_render · volume_render |
| Filters | slice · contour · clip · streamlines · pv_isosurface |
| Analysis | inspect_data · inspect_physics · extract_stats · analyze_data |
| Probing | plot_over_line · integrate_surface · probe_timeseries |
| Animation | animate · split_animate |
| Comparison | compare · compose_assets |
| Export | preview_3d · execute_pipeline |
22 tools · 12 resources · 4 prompts · 50+ file formats (OpenFOAM, VTK, CGNS, Exodus, STL, glTF, …)
Showcase — 10 Domains, One Pipeline
Every frame below is a single MCP tool call. No GUI, no post-processing, no ParaView. Annotations are rendered inside the 3D scene via VTK-native text actors and leader lines — no Photoshop, no matplotlib overlay.
| | | | | |
|:-:|:-:|:-:|:-:|:-:|
| | | | | |
| Medical
CT skull volume | CFD
Combustion streamlines | Thermal
Heatsink gradient | Geoscience
Seismic wavefield | Automotive
DrivAerML · 8.8M cells |
| | | | | |
| Molecular
H₂O electron density | Vascular
Cerebral aneurysm MRA | Planetary
Bennu · 196K triangles | Structural
Cantilever FEA stress | Volume
Thermal threshold |
Physics-Aware Animations
Seven presets convert raw simulation data into publication-ready motion — each binds a rendering primitive to a physical phenomenon.
| Preset | Physics | Rendering |
|---|---|---|
streamline_growth | Lagrangian advection | Particle path-line extension over time |
clip_sweep | Pressure gradient cross-section | Moving clip plane |
layer_reveal | CT density classification | Progressive isosurface stacking |
iso_sweep | Orbital topology | Isovalue sweep with camera orbit |
warp_oscillation | Structural mode shape | Warp-by-vector harmonic displacement |
light_orbit | Oblique illumination | Rotating key light for material reveal |
threshold_reveal | Feature hierarchy | Threshold peeling from outside → in |
Story Composition (compose_assets)
Inspect → render → annotate → compose → narrate. One prompt produces a 4-panel physics decomposition with LaTeX-rendered governing equations.
Layouts: story (vertical narrative) · grid (N×M comparison) · slides (16:9 keynote) · video (MP4 with transitions)
Full interactive gallery: https://kimimgo.github.io/viznoir/#showcase
Architecture
prompt "Render pressure from cavity.foam"
│
MCP Server 22 tools · 12 resources · 4 prompts
│
VTK Engine readers → filters → renderer → camera
│ EGL/OSMesa headless · cinematic lighting
Physics Layer topology analysis · context parsing
│ vortex detection · stagnation points
Animation 7 physics presets · easing · timeline
│ transitions · compositor · video export
Output PNG · WebP · MP4 · GLTF · LaTeX
Numbers
| 22 MCP tools | 24 VTK filters |
| 10 domains | 19 native file formats |
| 6/6 VTK data types | 50+ formats via meshio |
Documentation
Homepage: kimimgo.github.io/viznoir
Developer docs: kimimgo.github.io/viznoir/docs — full tool reference, domain gallery, architecture guide
License
MIT
Questions fréquentes
Qu'est-ce que viznoir ?
Cinema-quality science visualization for AI agents — headless VTK via MCP.
Comment installer viznoir ?
Il s'exécute sur votre machine. Dans Claude Code : claude mcp add viznoir -e 'VIZNOIR_RENDER_BACKEND=<VIZNOIR_RENDER_BACKEND>' -e 'VIZNOIR_OUTPUT_DIR=<VIZNOIR_OUTPUT_DIR>' -- uvx viznoir==0.10.1. Pour les autres clients, collez la configuration JSON de cette page dans leurs réglages MCP.
Faut-il une clé API pour viznoir ?
Son entrée au registre n'indique aucune clé ni secret obligatoire. Certaines fonctions peuvent tout de même demander un compte auprès du service auquel il se connecte.
viznoir est-il open source ?
Oui. Son code est sur GitHub sous licence MIT.
Qui maintient viznoir ?
Il est publié par kimimgo. AI.tn le référence sans le maintenir ni le recommander.
Issu du registre MCP officiel. Être listé n'est pas une recommandation : vérifiez le code et les permissions d'un serveur avant de lui donner accès à vos données.