diff --git a/src/constants/coreSettings.ts b/src/constants/coreSettings.ts index f21ee76f9..0375147f6 100644 --- a/src/constants/coreSettings.ts +++ b/src/constants/coreSettings.ts @@ -713,7 +713,7 @@ export const CORE_SETTINGS: SettingParams[] = [ id: 'Comfy.TutorialCompleted', name: 'Tutorial completed', type: 'hidden', - defaultValue: true, - versionAdded: '1.8.5' + defaultValue: false, + versionAdded: '1.8.7' } ] diff --git a/src/scripts/app.ts b/src/scripts/app.ts index 1f26231db..e6d70688f 100644 --- a/src/scripts/app.ts +++ b/src/scripts/app.ts @@ -1062,8 +1062,13 @@ export class ComfyApp { // We failed to restore a workflow so load the default if (!restored) { const settingStore = useSettingStore() - if (settingStore.get('Comfy.TutorialCompleted') === false) { + + // If tutorial is not completed, load the tutorial workflow + if (!settingStore.get('Comfy.TutorialCompleted')) { await settingStore.set('Comfy.TutorialCompleted', true) + // Load model folders to ensure the missing models' corresponding folders + // can be correctly identified. + await useModelStore().loadModelFolders() await useWorkflowService().loadTutorialWorkflow() } else { await this.loadGraphData() diff --git a/src/services/workflowService.ts b/src/services/workflowService.ts index 3f5ee4a2d..35c79d39b 100644 --- a/src/services/workflowService.ts +++ b/src/services/workflowService.ts @@ -2,6 +2,7 @@ import { LGraphCanvas } from '@comfyorg/litegraph' import { toRaw } from 'vue' import { t } from '@/i18n' +import { api } from '@/scripts/api' import { app } from '@/scripts/app' import { blankGraph, defaultGraph } from '@/scripts/defaultGraph' import { downloadBlob } from '@/scripts/utils' @@ -125,16 +126,9 @@ export const useWorkflowService = () => { * Load the tutorial workflow */ const loadTutorialWorkflow = async () => { - const tutorialWorkflow = { - ...defaultGraph, - models: [ - { - name: 'v1-5-pruned-emaonly.safetensors', - url: 'https://huggingface.co/Comfy-Org/stable-diffusion-v1-5-archive/resolve/main/v1-5-pruned-emaonly.safetensors?download=true', - directory: 'checkpoints' - } - ] - } + const tutorialWorkflow = await fetch( + api.fileURL('/templates/default.json') + ).then((r) => r.json()) await app.loadGraphData(tutorialWorkflow, false, false, 'tutorial', { showMissingModelsDialog: true }) diff --git a/src/stores/modelStore.ts b/src/stores/modelStore.ts index d88a36039..dc03c6145 100644 --- a/src/stores/modelStore.ts +++ b/src/stores/modelStore.ts @@ -192,7 +192,6 @@ export const useModelStore = defineStore('models', () => { const models = computed(() => modelFolders.value.flatMap((folder) => Object.values(folder.models)) ) - const isLoaded = ref(false) /** * Loads the model folders from the server @@ -204,13 +203,11 @@ export const useModelStore = defineStore('models', () => { for (const folderName of modelFolderNames.value) { modelFolderByName.value[folderName] = new ModelFolder(folderName) } - isLoaded.value = true } async function getLoadedModelFolder( folderName: string ): Promise { - if (!isLoaded.value) await loadModelFolders() const folder = modelFolderByName.value[folderName] return folder ? await folder.load() : null }