feat: Add social media video import (YouTube, TikTok, Instagram) (#6764)

Co-authored-by: Maxime Louward <61564950+mlouward@users.noreply.github.com>
Co-authored-by: Michael Genson <genson.michael@gmail.com>
Co-authored-by: Michael Genson <71845777+michael-genson@users.noreply.github.com>
This commit is contained in:
Aurelien
2026-03-09 21:44:27 +01:00
committed by GitHub
parent 5a223aa92d
commit 1344f1674d
25 changed files with 563 additions and 45 deletions

View File

@@ -636,7 +636,8 @@
"create-a-recipe-by-providing-the-name-all-recipes-must-have-unique-names": "Create a recipe by providing the name. All recipes must have unique names.",
"new-recipe-names-must-be-unique": "New recipe names must be unique",
"scrape-recipe": "Scrape Recipe",
"scrape-recipe-description": "Scrape a recipe by url. Provide the url for the site you want to scrape, and Mealie will attempt to scrape the recipe from that site and add it to your collection.",
"scrape-recipe-description": "Scrape a recipe by url. Provide the url for the site or the video you want to scrape, and Mealie will attempt to scrape the recipe from that site and add it to your collection.",
"scrape-recipe-description-transcription": "You can also provide the url to a video and Mealie will attempt to transcribe it into a recipe.",
"scrape-recipe-have-a-lot-of-recipes": "Have a lot of recipes you want to scrape at once?",
"scrape-recipe-suggest-bulk-importer": "Try out the bulk importer",
"scrape-recipe-have-raw-html-or-json-data": "Have raw HTML or JSON data?",

View File

@@ -18,6 +18,7 @@ export interface AdminAboutInfo {
oidcProviderName: string;
enableOpenai: boolean;
enableOpenaiImageServices: boolean;
enableOpenaiTranscriptionServices: boolean;
tokenTime: number;
versionLatest: string;
apiPort: number;
@@ -51,6 +52,7 @@ export interface AppInfo {
oidcProviderName: string;
enableOpenai: boolean;
enableOpenaiImageServices: boolean;
enableOpenaiTranscriptionServices: boolean;
tokenTime: number;
}
export interface AppStartupInfo {

View File

@@ -9,14 +9,22 @@
{{ $t('recipe.scrape-recipe') }}
</v-card-title>
<v-card-text>
<p>{{ $t('recipe.scrape-recipe-description') }}</p>
<p>
{{ $t('recipe.scrape-recipe-have-a-lot-of-recipes') }}
<router-link :to="bulkImporterTarget">{{ $t('recipe.scrape-recipe-suggest-bulk-importer') }}</router-link>.
<br>
{{ $t('recipe.scrape-recipe-have-raw-html-or-json-data') }}
<router-link :to="htmlOrJsonImporterTarget">{{ $t('recipe.scrape-recipe-you-can-import-from-raw-data-directly') }}</router-link>.
</p>
<v-card-text class="pa-0">
<p>{{ $t('recipe.scrape-recipe-description') }}</p>
<p v-if="$appInfo.enableOpenaiTranscriptionServices">
{{ $t('recipe.scrape-recipe-description-transcription') }}
</p>
</v-card-text>
<v-card-text class="px-0">
<p>
{{ $t('recipe.scrape-recipe-have-a-lot-of-recipes') }}
<router-link :to="bulkImporterTarget">{{ $t('recipe.scrape-recipe-suggest-bulk-importer') }}</router-link>.
</p>
<p>
{{ $t('recipe.scrape-recipe-have-raw-html-or-json-data') }}
<router-link :to="htmlOrJsonImporterTarget">{{ $t('recipe.scrape-recipe-you-can-import-from-raw-data-directly') }}</router-link>.
</p>
</v-card-text>
<v-text-field
v-model="recipeUrl"
:label="$t('new-recipe.recipe-url')"
@@ -209,7 +217,7 @@ export default defineNuxtComponent({
stayInEditMode.value = false;
}
createByUrl(recipeUrl.value, importKeywordsAsTags.value);
createByUrl(recipeUrl.value, importKeywordsAsTags.value, false);
return;
}
});