diff --git a/backend/app/api/routers/admin.py b/backend/app/api/routers/admin.py index 7416606..f1ae9c6 100644 --- a/backend/app/api/routers/admin.py +++ b/backend/app/api/routers/admin.py @@ -16,7 +16,7 @@ from app.utils.auth import require_admin, hash_password router = APIRouter(prefix="/admin", tags=["admin"]) -VALID_RENDERERS = {"pillow", "blender"} +VALID_RENDERERS = {"blender"} VALID_ENGINES = {"cycles", "eevee"} VALID_FORMATS = {"jpg", "png"} VALID_STL_QUALITIES = {"low", "high"} @@ -459,7 +459,6 @@ async def renderer_status( blender_available = is_blender_available() blender_bin = find_blender() return { - "pillow": {"available": True, "note": "Built-in (always available)"}, "blender": { "available": blender_available, "note": ( diff --git a/frontend/src/pages/Admin.tsx b/frontend/src/pages/Admin.tsx index 31aaa5e..85d8a0c 100644 --- a/frontend/src/pages/Admin.tsx +++ b/frontend/src/pages/Admin.tsx @@ -167,66 +167,6 @@ export default function AdminPage() { {/* ------------------------------------------------------------------ */} - {/* ------------------------------------------------------------------ */} - {/* Pricing Tiers */} - {/* ------------------------------------------------------------------ */} -
-
- -
-

Pricing Tiers

-

- Configure price per rendering item by category and quality level. -

-
-
- -
- - {/* ------------------------------------------------------------------ */} - {/* Output Types */} - {/* ------------------------------------------------------------------ */} -
-
- -
-

Output Types

-

- Define what kinds of outputs orders can request (thumbnails, views, formats). -

-
-
- -
- - {/* ------------------------------------------------------------------ */} - {/* Render Templates (admin/PM) */} - {/* ------------------------------------------------------------------ */} -
-
- -
-

Render Templates

-

- Upload .blend studio setups matched by Category + Output Type. Geometry is imported into the template at render time. -

-
-
-
- -
- - {/* Material Library sub-section */} -
- -
-
- - {/* ------------------------------------------------------------------ */} - {/* Asset Libraries */} - {/* ------------------------------------------------------------------ */} - - {/* ------------------------------------------------------------------ */} {/* Users (admin only) */} {/* ------------------------------------------------------------------ */} @@ -307,13 +247,18 @@ export default function AdminPage() { } {/* ------------------------------------------------------------------ */} - {/* Renderer Settings (admin only) */} + {/* Blender Render Settings (admin only) */} {/* ------------------------------------------------------------------ */} {isAdmin &&
-

Thumbnail Renderer

+
+

Blender Render Settings

+

+ Render quality, performance and thumbnail output options for Blender 5. +

+
-
- {/* Renderer picker */} -
- - {(['blender', 'pillow'] as const).map((r) => ( - - ))} -
- - {/* Blender options — shown only when blender is the active renderer */} - {settings?.thumbnail_renderer === 'blender' && ( +
+ {/* ── Render Quality ───────────────────────────────────────────── */} +
+

Render Quality

-

Blender 5 Options

{/* Engine */}
@@ -415,9 +335,7 @@ export default function AdminPage() { {/* Sample counts */}
- + Higher = better quality, slower

- +
+
+
- {/* Max concurrent renders */} + {/* ── Performance ──────────────────────────────────────────────── */} +
+

Performance

+
Max concurrent
-
Stall timeout
- - {/* Save blender options */} - {Object.keys(blenderDraft).length > 0 && ( - - )}
+
+ + {/* Save button — appears when draft has unsaved changes */} + {Object.keys(blenderDraft).length > 0 && ( + )} - {/* Output format — always visible, applies to all renderers */} -
- + {/* ── Output ───────────────────────────────────────────────────── */} +
+

Output

+
+ {(['jpg', 'png'] as const).map((fmt) => (
{/* end Output */} - {/* Service health */} -
- {rendererStatus && Object.entries(rendererStatus).map(([name, info]) => ( -
- {info.available - ? - : info.url === null + {/* ── Service Status ───────────────────────────────────────────── */} +
+

Service Status

+
+ {rendererStatus && Object.entries(rendererStatus).map(([name, info]) => ( +
+ {info.available ? : - } -
-

{name}

-

{info.note || (info.available ? 'Online' : 'Offline')}

+ } +
+

{name}

+

{info.note || (info.available ? 'Online' : 'Offline')}

+
-
- ))} - {!rendererStatus && ( -
- Checking service status… -
- )} + ))} + {!rendererStatus && ( +
+ Checking service status… +
+ )} +
- {/* Process unprocessed / Regenerate thumbnails */} -
-
- -

- Queues all pending and failed STEP files for initial processing. -

-
-
- -

- Re-processes all existing STEP files with the currently selected renderer. -

-
-
- -

- Generates low + high STL files for any completed STEP file that is missing them. -

-
-
- -

- Creates the 4 standard workflow definitions (still/turntable/multi-angle) if they don't exist. -

+ {/* ── Maintenance ──────────────────────────────────────────────── */} +
+

Maintenance

+
+
+ +

Queues all pending/failed STEP files for initial processing.

+
+
+ +

Re-renders thumbnails for all completed CAD files.

+
+
+ +

Generates low + high STL files for completed STEP files missing them.

+
+
+ +

Creates the 4 standard workflow definitions if they don't exist yet.

+
} + {/* ------------------------------------------------------------------ */} + {/* Render Templates (admin/PM) */} + {/* ------------------------------------------------------------------ */} +
+
+ +
+

Render Templates

+

+ Upload .blend studio setups matched by Category + Output Type. Geometry is imported into the template at render time. +

+
+
+
+ +
+
+ +
+
+ + {/* ------------------------------------------------------------------ */} + {/* Asset Libraries */} + {/* ------------------------------------------------------------------ */} + + + {/* ------------------------------------------------------------------ */} + {/* Output Types */} + {/* ------------------------------------------------------------------ */} +
+
+ +
+

Output Types

+

+ Define what kinds of outputs orders can request (thumbnails, views, formats). +

+
+
+ +
+ + {/* ------------------------------------------------------------------ */} + {/* Pricing Tiers */} + {/* ------------------------------------------------------------------ */} +
+
+ +
+

Pricing Tiers

+

+ Configure price per rendering item by category and quality level. +

+
+
+ +
+ {/* ------------------------------------------------------------------ */} {/* E-Mail / SMTP Settings */} {/* ------------------------------------------------------------------ */}