Script convertidor imagen de Obsidian a Astro
Este es el script que tengo en esta página. Lo que hace es que básicamente convierte el formato de como se insertan las imágenes en obsidian en formato en que pueda ser visto correctamente. Más específicamente pasa de esto ![[Ejemplo]] a esto . En otras palabras de wikiLinks a Markdown estandar de Astro.
Para poder usarlo:
- Crea un archivo .ps1 (scripts de PowerShel) llamado
convert-obsidian-images-fixed.ps1 - Añádelo a una nueva carpeta llamado scripts
- Añadelo a la lista de git ignore
- Ejecutalo con este comando:
powershell -ExecutionPolicy Bypass -File ".\scripts\convert-obsidian-images-fixed.ps1"
Este es el contenido de convert-obsidian-images-fixed.ps1
# Script para convertir sintaxis de imagenes de Obsidian a Markdown estandar
# y renombrar imagenes con espacios
param(
[string]$Path = $PWD,
[switch]$DryRun
)
Write-Host "=== Convertidor de Imagenes Obsidian a Markdown ===" -ForegroundColor Cyan
Write-Host ""
# Paso 1: Renombrar imagenes con espacios
Write-Host "Paso 1: Buscando imagenes con espacios en los nombres..." -ForegroundColor Yellow
$imageExtensions = @("*.jpg", "*.jpeg", "*.png", "*.gif", "*.webp", "*.svg", "*.bmp")
$renamedFiles = @{}
foreach ($ext in $imageExtensions) {
$images = Get-ChildItem -Path $Path -Filter $ext -Recurse -File -ErrorAction SilentlyContinue | Where-Object { $_.Name -match " " }
foreach ($image in $images) {
$newName = $image.Name -replace " ", "-"
$newPath = Join-Path $image.DirectoryName $newName
if ($DryRun) {
Write-Host " [DRY RUN] Renombraria: $($image.Name) -> $newName" -ForegroundColor Gray
} else {
try {
Write-Host " Renombrando: $($image.Name) -> $newName" -ForegroundColor Green
Rename-Item -Path $image.FullName -NewName $newName -Force -ErrorAction Stop
$renamedFiles[$image.Name] = $newName
} catch {
Write-Host " Error al renombrar: $($image.Name)" -ForegroundColor Red
}
}
}
}
if ($renamedFiles.Count -eq 0) {
Write-Host " No se encontraron imagenes con espacios" -ForegroundColor Gray
}
Write-Host ""
# Paso 2: Convertir sintaxis de Obsidian a Markdown estandar
Write-Host "Paso 2: Convirtiendo sintaxis de imagenes en archivos .md..." -ForegroundColor Yellow
$mdFiles = Get-ChildItem -Path $Path -Filter "*.md" -Recurse -File -ErrorAction SilentlyContinue
$totalReplacements = 0
foreach ($mdFile in $mdFiles) {
try {
$content = Get-Content -Path $mdFile.FullName -Raw -Encoding UTF8 -ErrorAction Stop
$originalContent = $content
$fileReplacements = 0
# Patron para capturar ![[imagen.ext]]
$pattern = '!\[\[([^\]]+\.(jpg|jpeg|png|gif|webp|svg|bmp))\]\]'
$matches = [regex]::Matches($content, $pattern, [System.Text.RegularExpressions.RegexOptions]::IgnoreCase)
foreach ($match in $matches) {
$fullMatch = $match.Value
$imageName = $match.Groups[1].Value
# Si la imagen fue renombrada, usar el nuevo nombre
$finalImageName = if ($renamedFiles.ContainsKey($imageName)) {
$renamedFiles[$imageName]
} else {
$imageName
}
# Crear el nombre descriptivo (sin extension) para el alt text
$altText = [System.IO.Path]::GetFileNameWithoutExtension($finalImageName)
# Nuevo formato: 
$replacement = ""
$content = $content -replace [regex]::Escape($fullMatch), $replacement
$fileReplacements++
}
if ($fileReplacements -gt 0) {
if ($DryRun) {
Write-Host " [DRY RUN] $($mdFile.Name): $fileReplacements reemplazo(s)" -ForegroundColor Gray
} else {
Set-Content -Path $mdFile.FullName -Value $content -Encoding UTF8 -NoNewline -ErrorAction Stop
Write-Host " $($mdFile.Name): $fileReplacements reemplazo(s)" -ForegroundColor Green
$totalReplacements += $fileReplacements
}
}
} catch {
Write-Host " Error procesando: $($mdFile.Name)" -ForegroundColor Red
}
}
Write-Host ""
Write-Host "=== Resumen ===" -ForegroundColor Cyan
Write-Host "Imagenes renombradas: $($renamedFiles.Count)" -ForegroundColor White
Write-Host "Archivos Markdown procesados: $($mdFiles.Count)" -ForegroundColor White
Write-Host "Total de reemplazos de sintaxis: $totalReplacements" -ForegroundColor White
if ($DryRun) {
Write-Host ""
Write-Host "MODO DRY RUN - No se realizaron cambios reales" -ForegroundColor Yellow
Write-Host "Ejecuta sin el parametro -DryRun para aplicar los cambios" -ForegroundColor Yellow
}
Write-Host ""
Write-Host "Proceso completado!" -ForegroundColor Green
Si no funciona el script:
✅ Solución rápida:
Ejecuta el script con Bypass para saltarte la verificación de firma:
powershell
powershell -ExecutionPolicy Bypass -File ".\scripts\convert-obsidian-images.ps1"
O más simple:
powershell
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process
& ".\scripts\convert-obsidian-images.ps1"
🎯 Mejor solución (permanente):
Desbloquea el archivo descargado:
powershell
Unblock-File -Path ".\scripts\convert-obsidian-images.ps1"
Unblock-File -Path ".\scripts\process-new-image.ps1"
# Ahora sí debería funcionar:
& ".\scripts\convert-obsidian-images.ps1"
🚀 Opción más directa:
Copia y pega todo esto en tu PowerShell:
powershell
# Desbloquear los scripts
Unblock-File -Path ".\scripts\convert-obsidian-images.ps1"
# Ejecutar
& ".\scripts\convert-obsidian-images.ps1"
📝 Alternativa: Recrear el script manualmente
Si los comandos anteriores no funcionan, crea el script de nuevo:
- Abre Notepad o VSCode
- Copia el contenido del archivo
convert-obsidian-images.ps1que te di - Guárdalo como
convert-obsidian-images.ps1en la carpetascripts/ - Ejecuta normalmente
Cuando creas el archivo tú mismo (en lugar de descargarlo), Windows no lo marca como bloqueado.
⚡ Prueba esto AHORA:
powershell
Unblock-File -Path ".\scripts\convert-obsidian-images.ps1"
& ".\scripts\convert-obsidian-images.ps1"