param ( [string]$variant ) # Initialize base Add-Type -assembly System.Windows.Forms Add-Type -AssemblyName PresentationFramework [System.Windows.Forms.Application]::EnableVisualStyles() # Set encodings $OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = [System.Text.Encoding]::GetEncoding("Windows-1252") $PSDefaultParameterValues['*:Encoding'] = 'utf8' [Console]::OutputEncoding = [System.Text.UTF8Encoding]::new() # Define app paths $root = (get-item $PSScriptRoot).parent.FullName $launcher = "$root\launcher.ps1" $log_dir = "$root\log" $log_file = "$log_dir\error.log" $log_temp_file = "$log_dir\stderr.log" $config_dir = "$root\cfg" $config_file = "$config_dir\config.json" $ffmpeg = "$root\lib\ffmpeg.exe" $ffprobe = "$root\lib\ffprobe.exe" $ffplay = "$root\lib\ffplay.exe" $ytdl = "$root\lib\yt-dlp.exe" $upscaler = "$root\lib\realesrgan\realesrgan-ncnn-vulkan.exe" $upscaler_models = "$root\lib\realesrgan\models\*.bin" $transcriber_exe = "whisper-cli.exe" $transcriber_bench = "whisper-bench.exe" $transcriber_x64 = "$root\lib\whisper\whisper-bin-x64\$transcriber_exe" $transcriber_blas = "$root\lib\whisper\whisper-blas-bin-x64\$transcriber_exe" $transcriber_cuda = "$root\lib\whisper\whisper-cublas-12.4.0-bin-x64\$transcriber_exe" $transcriber_cpu = $transcriber_x64 $transcriber_gpu = $transcriber_cuda $transcriber_ref_model = "ggml-large-v3-turbo-q8_0.bin" $transcriber_models = "$root\lib\whisper\models\*.bin" $transcriber_langs = "Detectar - auto,Afrikaans - af,Albanian - sq,Amharic - am,Arabic - ar,Armenian - hy,Assamese - as,Azerbaijani - az,Bashkir - ba,Basque - eu,Belarusian - be,Bengali - bn,Bosnian - bs,Breton - br,Bulgarian - bg,Catalan - ca,Chinese - zh,Croatian - hr,Czech - cs,Danish - da,Dutch - nl,English - en,Estonian - et,Faroese - fo,Finnish - fi,French - fr,Galician - gl,Georgian - ka,German - de,Greek - el,Gujarati - gu,Haitian creole - ht,Hausa - ha,Hawaiian - haw,Hebrew - he,Hindi - hi,Hungarian - hu,Icelandic - is,Indonesian - id,Italian - it,Japanese - ja,Javanese - jw,Kannada - kn,Kazakh - kk,Khmer - km,Korean - ko,Lao - lo,Latin - la,Latvian - lv,Lingala - ln,Lithuanian - lt,Luxembourgish - lb,Macedonian - mk,Malagasy - mg,Malay - ms,Malayalam - ml,Maltese - mt,Maori - mi,Marathi - mr,Mongolian - mn,Myanmar - my,Nepali - ne,Norwegian - no,Nynorsk - nn,Occitan - oc,Pashto - ps,Persian - fa,Polish - pl,Portuguese - pt,Punjabi - pa,Romanian - ro,Russian - ru,Sanskrit - sa,Serbian - sr,Shona - sn,Sindhi - sd,Sinhala - si,Slovak - sk,Slovenian - sl,Somali - so,Spanish - es,Sundanese - su,Swahili - sw,Swedish - sv,Tagalog - tl,Tajik - tg,Tamil - ta,Tatar - tt,Telugu - te,Thai - th,Tibetan - bo,Turkish - tr,Turkmen - tk,Ukrainian - uk,Urdu - ur,Uzbek - uz,Vietnamese - vi,Welsh - cy,Yiddish - yi,Yoruba - yo" $transcriber_save = "$config_dir\transcriber" $transcribers = @{ "x64" = $transcriber_x64 "blas" = $transcriber_blas } $upscale_job = "$root\src\job_upscale.ps1" $download_job = "$root\src\job_download.ps1" # Create directories/files New-Item $config_dir -ItemType "directory" -ErrorAction Ignore New-Item $config_file -ErrorAction Ignore New-Item $log_dir -ItemType "directory" -ErrorAction Ignore New-Item $log_file -ErrorAction Ignore New-Item $log_temp_file -ErrorAction Ignore # Load app files $metadata = ((Get-Content "$root\metadata.json") | ConvertFrom-Json) if ($variant -eq "lite") { $app_name = $metadata."name-lite" } else { $app_name = $metadata."name" } $icon = [System.Drawing.Icon]::ExtractAssociatedIcon("$root\icon.dll") . "$root\lib\Select-Folder.ps1" . "$root\lib\PSAppID.ps1" . "$root\lib\Set-Window.ps1" . "$root\lib\Out-FileUtf8NoBom.ps1" . "$root\lib\Invoke-WithEncoding.ps1" . "$root\lib\Start-ProcessWithOutput.ps1" . "$root\src\functions.ps1" # Load console commands $lib_paths = @("$root\lib") if ($variant -ne "lite") { # Load more console commands $lib_paths = @( "$root\lib", "$root\lib\Windows", "$root\lib\realesrgan", "$root\lib\ImageMagick" ) $transcriber = getTranscriber -paths $lib_paths $lib_paths += (Get-Item $transcriber).Directory } $env:Path += ";$($lib_paths -join ";")" $executables = Get-ChildItem -Path $lib_paths -Filter *.exe -ErrorAction SilentlyContinue $commands = " $(($executables | ForEach-Object { "$($_.BaseName) - $($_.FullName)" }) -join "`n ")" # Define defaults $def_video_fmt = "mp4" $def_audio_fmt = "aac" $def_image_fmt = "jpg" $def_sub_fmt = "vtt" $def_background = "$root\res\black.png" $def_dest_dir = [Environment]::GetFolderPath("Desktop") # Init global variables $global:curr_process = $null $global:win_loc = $null $global:win_size = $null function showMain() { $main = New-Object System.Windows.Forms.Form $main.Icon = $icon $main.Text = $app_name # $main.Width = 485 $main.Width = 365 $main.Height = 447 $main.StartPosition = [System.Windows.Forms.FormStartPosition]::CenterScreen $main.FormBorderStyle = 'FixedDialog' $main.MaximizeBox = $false $main.Font = "Microsoft Sans Serif, 9.35" $hidden = New-Object System.Windows.Forms.Button $hidden.Width = 0 $hidden.Height = 0 $main.Controls.Add($hidden) $menu = New-Object System.Windows.Forms.MenuStrip $menuShell = New-Object System.Windows.Forms.ToolStripMenuItem $menuShell.Text = "Consola" $menuShell.Font = [System.Drawing.Font]::new("Consolas", 9) $menuShell.Add_Click({ Start-Process powershell -WorkingDirectory ([Environment]::GetFolderPath("Desktop")) -ArgumentList "-NoExit `"Write-Host ' Comandos disponibles: $commands '`"" }) $menuLog = New-Object System.Windows.Forms.ToolStripMenuItem $menuLog.Text = "Log" $menuLog.Font = [System.Drawing.Font]::new("Consolas", 9) $menuLog.Add_Click({ . $log_file }) $menuAbout = New-Object System.Windows.Forms.ToolStripMenuItem $menuAbout.Text = "Acerca" $menuAbout.Font = [System.Drawing.Font]::new("Consolas", 9) $menuAbout.Add_Click({ . "$root\src\form\about.ps1" showAbout -owner $main }) $menu.Items.Add($menuShell) | out-null $menu.Items.Add($menuLog) | out-null $menu.Items.Add($menuAbout) | out-null $main.Controls.Add($menu) $btn_record = New-Object System.Windows.Forms.Button $btn_record.Text = "Grabar" $btn_record.Font = [System.Drawing.Font]::new("Consolas", 12) $btn_record.Location = New-Object System.Drawing.Point(20, 39) $btn_record.Width = 150 $btn_record.Height = 50 $btn_record.Add_Click({ . "$root\src\form\record.ps1" $main.Hide() showRecord -owner $main }) $main.Controls.Add($btn_record) $btn_capture = New-Object System.Windows.Forms.Button $btn_capture.Text = "Capturar" $btn_capture.Font = [System.Drawing.Font]::new("Consolas", 12) $btn_capture.Location = New-Object System.Drawing.Point(180, 39) $btn_capture.Width = 150 $btn_capture.Height = 50 $btn_capture.Add_Click({ . "$root\src\form\capture.ps1" $main.Hide() showCapture -owner $main }) $main.Controls.Add($btn_capture) $btn_join = New-Object System.Windows.Forms.Button $btn_join.Text = "Unir" $btn_join.Font = [System.Drawing.Font]::new("Consolas", 12) $btn_join.Location = New-Object System.Drawing.Point(20, 99) $btn_join.Width = 150 $btn_join.Height = 50 $btn_join.Add_Click({ . "$root\src\form\join.ps1" $main.Hide() showJoin -owner $main }) $main.Controls.Add($btn_join) $btn_cut = New-Object System.Windows.Forms.Button $btn_cut.Text = "Cortar" $btn_cut.Font = [System.Drawing.Font]::new("Consolas", 12) $btn_cut.Location = New-Object System.Drawing.Point(180, 99) $btn_cut.Width = 150 $btn_cut.Height = 50 $btn_cut.Add_Click({ . "$root\src\form\cut.ps1" $main.Hide() showCut -owner $main }) $main.Controls.Add($btn_cut) $btn_convert = New-Object System.Windows.Forms.Button $btn_convert.Text = "Convertir" $btn_convert.Font = [System.Drawing.Font]::new("Consolas", 12) $btn_convert.Location = New-Object System.Drawing.Point(20, 159) $btn_convert.Width = 150 $btn_convert.Height = 50 $btn_convert.Add_Click({ . "$root\src\form\convert.ps1" $main.Hide() showConvert -owner $main }) $main.Controls.Add($btn_convert) $btn_mix = New-Object System.Windows.Forms.Button $btn_mix.Text = "Mezclar" $btn_mix.Font = [System.Drawing.Font]::new("Consolas", 12) $btn_mix.Location = New-Object System.Drawing.Point(180, 159) $btn_mix.Width = 150 $btn_mix.Height = 50 $btn_mix.Add_Click({ . "$root\src\form\mix.ps1" $main.Hide() showMix -owner $main }) $main.Controls.Add($btn_mix) $btn_speedup = New-Object System.Windows.Forms.Button $btn_speedup.Text = "Acelerar" $btn_speedup.Font = [System.Drawing.Font]::new("Consolas", 12) $btn_speedup.Location = New-Object System.Drawing.Point(20, 219) $btn_speedup.Width = 150 $btn_speedup.Height = 50 $btn_speedup.Add_Click({ . "$root\src\form\speedup.ps1" $main.Hide() showSpeedUp -owner $main }) $main.Controls.Add($btn_speedup) $btn_speeddown = New-Object System.Windows.Forms.Button $btn_speeddown.Text = "Ralentizar" $btn_speeddown.Font = [System.Drawing.Font]::new("Consolas", 12) $btn_speeddown.Location = New-Object System.Drawing.Point(180, 219) $btn_speeddown.Width = 150 $btn_speeddown.Height = 50 $btn_speeddown.Add_Click({ . "$root\src\form\speeddown.ps1" $main.Hide() showSpeedDown -owner $main }) $main.Controls.Add($btn_speeddown) $btn_transcript = New-Object System.Windows.Forms.Button $btn_transcript.Text = "Transcribir" $btn_transcript.Font = [System.Drawing.Font]::new("Consolas", 12) $btn_transcript.Location = New-Object System.Drawing.Point(20, 279) $btn_transcript.Width = 150 $btn_transcript.Height = 50 $btn_transcript.Add_Click({ . "$root\src\form\transcribe.ps1" $main.Hide() showTranscribe -owner $main }) $main.Controls.Add($btn_transcript) if ($variant -eq "lite") { $btn_transcript.Enabled = $false } $btn_upscale = New-Object System.Windows.Forms.Button $btn_upscale.Text = "Escalar" $btn_upscale.Font = [System.Drawing.Font]::new("Consolas", 12) $btn_upscale.Location = New-Object System.Drawing.Point(180, 279) $btn_upscale.Width = 150 $btn_upscale.Height = 50 $btn_upscale.Add_Click({ . "$root\src\form\upscale.ps1" $main.Hide() showUpscale -owner $main }) $main.Controls.Add($btn_upscale) if ($variant -eq "lite") { $btn_upscale.Enabled = $false } $btn_download = New-Object System.Windows.Forms.Button $btn_download.Text = "Descargar" $btn_download.Font = [System.Drawing.Font]::new("Consolas", 12) $btn_download.Location = New-Object System.Drawing.Point(20, 339) $btn_download.Width = 310 $btn_download.Height = 50 $btn_download.Add_Click({ . "$root\src\form\download.ps1" $main.Hide() showDownload -owner $main }) $main.Controls.Add($btn_download) # $btn_compress = New-Object System.Windows.Forms.Button # $btn_compress.Text = "Compresión" # $btn_compress.Font = [System.Drawing.Font]::new("Consolas", 12) # $btn_compress.Location = New-Object System.Drawing.Point(320, 39) # $btn_compress.Width = 150 # $btn_compress.Height = 50 # $btn_compress.Add_Click({ # }) # $main.Controls.Add($btn_compress) # $btn_rename = New-Object System.Windows.Forms.Button # $btn_rename.Text = "Renombrado" # $btn_rename.Font = [System.Drawing.Font]::new("Consolas", 12) # $btn_rename.Location = New-Object System.Drawing.Point(320, 99) # $btn_rename.Width = 150 # $btn_rename.Height = 50 # $btn_rename.Add_Click({ # }) # $main.Controls.Add($btn_rename) [PSAppID]::SetAppIdForWindow($main.handle, "$($metadata.package).$app_name") $main.Add_LocationChanged({ $global:win_loc = $main.Location }) $main.Add_Resize({ $global:win_size = $main.Size }) $main.ShowDialog() } showMain