Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 17 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,9 +67,23 @@ Modly supports external AI model extensions. Each extension is a GitHub reposito

### Official extensions

| Extension | Model |
|-----------|-------|
| [modly-hunyuan3d-mini-extension](https://github.com/lightningpixel/modly-hunyuan3d-mini-extension) | Hunyuan3D 2 Mini |
| Extension | Model | URL |
|-----------|-------|-----|
| [modly-hunyuan3d-mini-extension](https://github.com/lightningpixel/modly-hunyuan3d-mini-extension) | Hunyuan3D 2 Mini | https://github.com/lightningpixel/modly-hunyuan3d-mini-extension |

### How to install an extension

**1.** Go to the **Models** page and click **Install from GitHub**.

![Install from GitHub](docs/install-from-github.png)

**2.** Enter the HTTPS URL of the extension repository and confirm.

![Enter extension URL](docs/install-extension.png)

**3.** Once the extension is installed, download the model or one of its variants.

![Install models](docs/install-models.png)

---

Expand Down
Binary file added docs/install-extension.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/install-from-github.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/install-models.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "modly",
"version": "0.1.1",
"version": "0.1.2",
"description": "Local AI-powered 3D mesh generation from images",
"main": "./out/main/index.js",
"author": "Modly",
Expand Down
27 changes: 25 additions & 2 deletions src/areas/generate/components/GenerationOptions.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { useEffect, useRef, useState } from 'react'
import { useAppStore } from '@shared/stores/appStore'
import { FieldLabel, Tooltip } from '@shared/components/ui'
import { FieldLabel, Tooltip, ConfirmModal } from '@shared/components/ui'

import type { CatalogModel } from '../models'

Expand Down Expand Up @@ -161,6 +161,7 @@ export default function GenerationOptions(): JSX.Element {
)

const isDisabled = currentJob?.status === 'uploading' || currentJob?.status === 'generating'
const [showTextureWarning, setShowTextureWarning] = useState(false)

useEffect(() => {
window.electron.model.listDownloaded()
Expand All @@ -186,6 +187,7 @@ export default function GenerationOptions(): JSX.Element {
}

return (
<>
<div className={`flex flex-col px-4 pb-4 gap-3 ${isDisabled ? 'opacity-50 pointer-events-none' : ''}`}>
<div className="h-px bg-zinc-800" />
<h2 className="text-xs font-semibold uppercase tracking-widest text-zinc-500">Options</h2>
Expand Down Expand Up @@ -416,7 +418,13 @@ export default function GenerationOptions(): JSX.Element {
<button
role="checkbox"
aria-checked={generationOptions.enableTexture}
onClick={() => setGenerationOptions({ enableTexture: !generationOptions.enableTexture })}
onClick={() => {
if (!generationOptions.enableTexture) {
setShowTextureWarning(true)
} else {
setGenerationOptions({ enableTexture: false })
}
}}
className={`ml-2 w-9 h-5 rounded-full transition-colors relative flex-shrink-0 ${
generationOptions.enableTexture ? 'bg-accent' : 'bg-zinc-700'
}`}
Expand Down Expand Up @@ -466,5 +474,20 @@ export default function GenerationOptions(): JSX.Element {
</div>

</div>

{showTextureWarning && (
<ConfirmModal
title="Texture generation is experimental"
description="This feature is still in development and may produce unexpected results, crash, or significantly slow down generation. Use at your own risk."
confirmLabel="Enable anyway"
cancelLabel="Cancel"
onConfirm={() => {
setGenerationOptions({ enableTexture: true })
setShowTextureWarning(false)
}}
onCancel={() => setShowTextureWarning(false)}
/>
)}
</>
)
}
39 changes: 34 additions & 5 deletions src/areas/setup/FirstRunSetup.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ function InstallingPanel({ progress }: { progress: SetupProgress | null }): JSX.
const done = idx < currentIdx
const active = idx === currentIdx
return (
<div key={step.key} className="flex-1">
<div key={step.key} className="flex-1 min-w-0">
<div
className={`h-1 rounded-full transition-colors ${
done ? 'bg-accent' :
Expand All @@ -96,7 +96,7 @@ function InstallingPanel({ progress }: { progress: SetupProgress | null }): JSX.
</div>

<div className="flex justify-between items-center">
<p className="text-xs text-zinc-500 truncate max-w-[220px]">
<p className="text-xs text-zinc-500 truncate flex-1 min-w-0">
{progress?.currentPackage ?? (currentIdx >= 0 ? STEPS[currentIdx]?.label : 'Initialising…')}
</p>
<p className="text-xs text-zinc-500 ml-2 shrink-0">{percent}%</p>
Expand Down Expand Up @@ -167,9 +167,38 @@ export default function FirstRunSetup(): JSX.Element {
}

return (
<div className="flex flex-col h-full bg-surface-500 items-center justify-center">
<AppHeader />
{renderPanel()}
<div className="flex flex-col h-full bg-surface-500">
{/* Title bar */}
<div className="flex items-center h-9 px-3 shrink-0 drag-region">
<div className="flex-1" />
<div className="flex items-center gap-1 no-drag">
<button
onClick={() => window.electron.window.minimize()}
className="w-7 h-7 flex items-center justify-center rounded hover:bg-zinc-700 text-zinc-500 hover:text-zinc-100 transition-colors"
aria-label="Minimize"
>
<svg width="10" height="1" viewBox="0 0 10 1" fill="currentColor">
<rect width="10" height="1" />
</svg>
</button>
<button
onClick={() => window.electron.window.close()}
className="w-7 h-7 flex items-center justify-center rounded hover:bg-red-600 text-zinc-500 hover:text-white transition-colors"
aria-label="Close"
>
<svg width="9" height="9" viewBox="0 0 9 9" fill="none" stroke="currentColor" strokeWidth="1.2">
<line x1="0" y1="0" x2="9" y2="9" />
<line x1="9" y1="0" x2="0" y2="9" />
</svg>
</button>
</div>
</div>

{/* Content */}
<div className="flex flex-col flex-1 items-center justify-center">
<AppHeader />
{renderPanel()}
</div>
</div>
)
}
2 changes: 1 addition & 1 deletion src/shared/stores/appStore.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ const DEFAULT_OPTIONS: GenerationOptions = {
modelId: 'sf3d',
vertexCount: 10000,
remesh: 'quad',
enableTexture: true,
enableTexture: false,
textureResolution: 512,
octreeResolution: 380,
guidanceScale: 5.5,
Expand Down
Loading