refactor: rename thumbnail_rendering queue to asset_pipeline
The queue handles far more than thumbnails: OCC tessellation, USD master generation, GLB production, order line renders, and workflow renders. asset_pipeline better reflects its role as the render-worker's primary queue. Updated all references in: task decorators, celery_app.py, beat_tasks.py, docker-compose.yml worker command, worker.py MONITORED_QUEUES, admin.py, CLAUDE.md, LEARNINGS.md, Dockerfile, helpTexts.ts, test files, and all .claude/commands/*.md skill files. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -138,6 +138,7 @@ export default function AdminPage() {
|
||||
|
||||
const [tessellationDraft, setTessellationDraft] = useState<Partial<Settings>>({})
|
||||
const tess = { ...settings, ...tessellationDraft } as Settings
|
||||
const [showAdvancedTess, setShowAdvancedTess] = useState(false)
|
||||
|
||||
const { data: rendererStatus, refetch: refetchStatus } = useQuery({
|
||||
queryKey: ['renderer-status'],
|
||||
@@ -1332,6 +1333,7 @@ export default function AdminPage() {
|
||||
/>
|
||||
<span className="text-sm text-content">Apply Laplacian smoothing on export</span>
|
||||
</label>
|
||||
<p className="text-xs text-content-muted mt-1">Smooths surface normals during GLB export for a less faceted look in the 3D viewer.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1348,8 +1350,10 @@ export default function AdminPage() {
|
||||
max="10000"
|
||||
value={viewer3d.viewer_max_distance ?? 50}
|
||||
onChange={e => setViewerDraft(d => ({ ...d, viewer_max_distance: parseFloat(e.target.value) }))}
|
||||
title="Maximum camera distance from the model in the 3D viewer (in metres after mm→m conversion). Default: 50"
|
||||
className="input w-full"
|
||||
/>
|
||||
<p className="text-xs text-content-muted mt-1">Maximum camera pull-back distance in the 3D viewer (metres).</p>
|
||||
</div>
|
||||
<div>
|
||||
<label className="text-sm font-medium text-content-muted block mb-1">
|
||||
@@ -1362,8 +1366,10 @@ export default function AdminPage() {
|
||||
max="1"
|
||||
value={viewer3d.viewer_min_distance ?? 0.001}
|
||||
onChange={e => setViewerDraft(d => ({ ...d, viewer_min_distance: parseFloat(e.target.value) }))}
|
||||
title="Minimum camera distance from the model in the 3D viewer (in metres). Default: 0.001. Prevents clipping into the geometry."
|
||||
className="input w-full"
|
||||
/>
|
||||
<p className="text-xs text-content-muted mt-1">Closest the camera can zoom in (metres). Prevents clipping through geometry.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1376,11 +1382,13 @@ export default function AdminPage() {
|
||||
<select
|
||||
value={viewer3d.gltf_material_quality ?? 'pbr_colors'}
|
||||
onChange={e => setViewerDraft(d => ({ ...d, gltf_material_quality: e.target.value }))}
|
||||
title="Controls what material data is embedded in exported GLB files. 'None' exports bare geometry; 'PBR Colors' bakes part colours into PBR materials."
|
||||
className="input w-full"
|
||||
>
|
||||
<option value="none">None (geometry only)</option>
|
||||
<option value="pbr_colors">PBR Colors (from part colors)</option>
|
||||
</select>
|
||||
<p className="text-xs text-content-muted mt-1">Material data embedded in exported GLB files.</p>
|
||||
</div>
|
||||
<div>
|
||||
<label className="text-sm font-medium text-content-muted block mb-1">
|
||||
@@ -1393,8 +1401,10 @@ export default function AdminPage() {
|
||||
max="1"
|
||||
value={viewer3d.gltf_pbr_roughness ?? 0.4}
|
||||
onChange={e => setViewerDraft(d => ({ ...d, gltf_pbr_roughness: parseFloat(e.target.value) }))}
|
||||
title="Surface roughness for GLB PBR materials (0 = mirror-smooth, 1 = fully matte). Default: 0.4 — appropriate for brushed metal."
|
||||
className="input w-full"
|
||||
/>
|
||||
<p className="text-xs text-content-muted mt-1">0 = mirror-smooth, 1 = fully matte. Default 0.4 suits brushed metal.</p>
|
||||
</div>
|
||||
<div>
|
||||
<label className="text-sm font-medium text-content-muted block mb-1">
|
||||
@@ -1407,8 +1417,10 @@ export default function AdminPage() {
|
||||
max="1"
|
||||
value={viewer3d.gltf_pbr_metallic ?? 0.6}
|
||||
onChange={e => setViewerDraft(d => ({ ...d, gltf_pbr_metallic: parseFloat(e.target.value) }))}
|
||||
title="Metallic factor for GLB PBR materials (0 = dielectric/plastic, 1 = fully metallic). Default: 0.6 — suitable for steel parts."
|
||||
className="input w-full"
|
||||
/>
|
||||
<p className="text-xs text-content-muted mt-1">0 = plastic/dielectric, 1 = fully metallic. Default 0.6 suits steel parts.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1525,10 +1537,19 @@ export default function AdminPage() {
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button
|
||||
onClick={() => setShowAdvancedTess(v => !v)}
|
||||
className="text-xs text-accent hover:underline flex items-center gap-1 mt-1"
|
||||
>
|
||||
{showAdvancedTess ? <ChevronDown size={12} /> : <ChevronRight size={12} />}
|
||||
{showAdvancedTess ? 'Hide manual values' : 'Advanced: manual deflection values'}
|
||||
</button>
|
||||
|
||||
{/* Manual inputs */}
|
||||
{showAdvancedTess && (<>
|
||||
<div className="grid grid-cols-2 gap-6">
|
||||
<div className="space-y-4">
|
||||
<p className="text-xs font-semibold text-content-secondary uppercase tracking-wide">Scene / Viewer</p>
|
||||
<p className="text-xs font-semibold text-content-secondary uppercase tracking-wide">Scene (USD Master)</p>
|
||||
<div className="flex items-center gap-3">
|
||||
<label className="text-sm text-content-secondary w-36 shrink-0">Linear deflection</label>
|
||||
<input
|
||||
@@ -1555,7 +1576,7 @@ export default function AdminPage() {
|
||||
/>
|
||||
<span className="text-sm text-content-muted">rad</span>
|
||||
</div>
|
||||
<p className="text-xs text-content-muted">Used for the 3D viewer (canonical scene). Smaller = smoother surfaces.</p>
|
||||
<p className="text-xs text-content-muted">Used for the USD master + 3D viewer GLB (canonical scene). Smaller = smoother surfaces.</p>
|
||||
</div>
|
||||
<div className="space-y-4">
|
||||
<p className="text-xs font-semibold text-content-secondary uppercase tracking-wide">Render output</p>
|
||||
@@ -1588,6 +1609,7 @@ export default function AdminPage() {
|
||||
<p className="text-xs text-content-muted">Used for final render output. Smaller = smoother surfaces, larger file sizes.</p>
|
||||
</div>
|
||||
</div>
|
||||
</>)}
|
||||
<div className="flex gap-2">
|
||||
<button
|
||||
onClick={() => { updateSettingsMut.mutate(tessellationDraft); setTessellationDraft({}) }}
|
||||
|
||||
Reference in New Issue
Block a user