Goal
Integrate the QtMesh Cloud asset marketplace (qtmesh-cloud#106, live at https://qtmesh.dev/marketplace) directly into QtMeshEditor: browse and search assets, download and import them into the open scene, and publish work back to the marketplace — without leaving the editor.
Why
- The marketplace's registration incentive (login-gated downloads) becomes an editor-native flow: the editor is already authenticated via the device OAuth connect flow.
- Assets carry real technical metadata the editor understands (formats, quality grade/score from QtMesh scans) — an in-app browser can filter on what actually matters.
- Publishing from the editor closes the loop: model → validate → list, one tool.
Existing cloud API surface (all live)
GET /v1/marketplace/listings — browse JSON: ?category=, ?q=, pagination; returns official, formats, hasThumbnail, categories
GET /v1/marketplace/listings/:owner/:slug — detail incl. files + quality (grade/score/ratings from the source project's published scan)
GET /v1/marketplace/listings/:owner/:slug/thumbnail — preview image (public for published)
GET /v1/marketplace/listings/:owner/:slug/download/:fileId — login-gated download (Bearer token)
POST /v1/marketplace/listings (+ 3-step file upload, POST :id/publish, POST :id/thumbnail) — create/publish/thumbnail
- Device OAuth: the editor's existing connect flow provides the Bearer token
Tracks
A — Marketplace browser (read side)
B — Publish from the editor (write side)
C — Deep links & polish
Non-goals (for this epic)
Payments, ratings/reviews, collections, in-app 3D preview streaming (download-then-preview is fine).
Dependencies
🤖 Generated with Claude Code
Goal
Integrate the QtMesh Cloud asset marketplace (qtmesh-cloud#106, live at https://qtmesh.dev/marketplace) directly into QtMeshEditor: browse and search assets, download and import them into the open scene, and publish work back to the marketplace — without leaving the editor.
Why
Existing cloud API surface (all live)
GET /v1/marketplace/listings— browse JSON:?category=,?q=, pagination; returnsofficial,formats,hasThumbnail,categoriesGET /v1/marketplace/listings/:owner/:slug— detail incl. files +quality(grade/score/ratings from the source project's published scan)GET /v1/marketplace/listings/:owner/:slug/thumbnail— preview image (public for published)GET /v1/marketplace/listings/:owner/:slug/download/:fileId— login-gated download (Bearer token)POST /v1/marketplace/listings(+ 3-step file upload,POST :id/publish,POST :id/thumbnail) — create/publish/thumbnailTracks
A — Marketplace browser (read side)
B — Publish from the editor (write side)
qtmesh turntable(blocked by turntable: shaded rendering + framing for untextured models (marketplace thumbnails) #933 for untextured models)C — Deep links & polish
Open in QtMeshEditoron the web listing pages (custom URL scheme or the existing launch flow), landing on the in-app detail viewNon-goals (for this epic)
Payments, ratings/reviews, collections, in-app 3D preview streaming (download-then-preview is fine).
Dependencies
🤖 Generated with Claude Code