Files
pi-multifx-pedal/src/web/templates/models.html
T
shawn a31342b478 feat(tonedownload): Tone3000 NAM + IR browser, real anon key, tests
- Tonedownload.py: Tone3000 API client with search/download/cache/enrich
- Server.py: 4 endpoints (search models, search IRs, install model, install IR)
- Models.html + irs.html: Browse Tone3000 tab with search, trending, offline
- Models.js + irs.js: Tone3000 search UI with install tracking via localStorage
- Style.css: Card layout for search results with thumbnail, meta, install btn
- Tests: 47 tests covering data classes, cache, API, search, download, enrichment
- Anon key: Updated from placeholder to real Supabase anon key (verified: API works)
2026-06-09 01:39:12 -04:00

69 lines
2.7 KiB
HTML

{% extends "base.html" %}
{% block title %}NAM Models — Pi Multi-FX Pedal{% endblock %}
{% block content %}
<div class="page models-page">
<div class="page-header">
<h1>NAM Model Manager</h1>
<button class="btn btn-secondary" onclick="loadModels()">⟳ Refresh</button>
</div>
<div class="card">
<div class="card-header">
<h2>Current Model</h2>
</div>
<div class="card-body">
<div class="current-model" id="current-model">
<span class="model-name">None loaded</span>
</div>
<div class="model-controls">
<button class="btn btn-danger" onclick="unloadModel()" id="unload-model-btn" style="display:none">Unload</button>
</div>
</div>
</div>
<div class="card">
<div class="card-header">
<h2>Available Models</h2>
</div>
<div class="card-body">
<div class="model-list" id="model-list">
<p class="loading">Loading models...</p>
</div>
</div>
</div>
<div class="card">
<div class="card-header">
<h2>Upload Model</h2>
</div>
<div class="card-body">
<p class="hint">Upload .nam model files to the pedal's model directory.</p>
<input type="file" id="model-upload-input" accept=".nam" class="file-input">
<button class="btn btn-primary" onclick="uploadModel()">Upload</button>
</div>
</div>
<div class="card">
<div class="card-header">
<h2>Browse Tone3000 <span class="badge badge-tone3000">BETA</span></h2>
</div>
<div class="card-body">
<p class="hint">Search and download NAM models directly from the Tone3000 community.</p>
<div class="tonedownload-search-row">
<input type="text" id="model-tone-search" class="file-input tonedownload-input"
placeholder="Search models (e.g. Marshall JCM800)..." onkeydown="if(event.key==='Enter')searchToneModels()">
<button class="btn btn-primary" onclick="searchToneModels()">Search</button>
<button class="btn btn-secondary" onclick="loadTrendingModels()">Trending</button>
</div>
<div id="model-tone-loader" class="loading" style="display:none">Searching Tone3000...</div>
<div id="model-tone-offline" class="tonedownload-offline" style="display:none">
<span>⚠ Offline — search unavailable</span>
</div>
<div id="model-tone-results" class="tonedownload-results"></div>
</div>
</div>
</div>
{% endblock %}
{% block scripts %}
<script src="/static/models.js"></script>
{% endblock %}