
Deja de enviar documentos sin marca de agua. Firemark marca imágenes y PDFs con un solo comando. Optimizado para contrarrestar la eliminación de marcas de agua por IA. Escrito en Rust.
Desde crates.io:
cargo install firemark
Desde el código fuente:
git clone https://github.com/Vitruves/firemark.git
cd firemark
cargo install --path .
Produce un único binario optimizado (~5 MB).
# Watermark a single image
firemark photo_id.png -m "Flat rental — SCI Dupont — March 2026"
# Watermark a PDF
firemark tax_notice.pdf -m "CONFIDENTIAL" -s "Do not distribute"
# Watermark an entire folder recursively
firemark ./documents/ -R -m "Sent to Agency X" -t stamp
# Preview without writing files
firemark id_card.jpg -m "Draft" -n
La salida se guarda junto a la entrada como {name}-watermarked.{ext} por defecto. Usa -o para establecer una ruta de salida explícita, o -S para un sufijo personalizado.
| Bandera | Estilo | Descripción |
|---|---|---|
diagonal | Diagonal grid | Texto diagonal repetido en toda la página (predeterminado) |
stamp | Rubber stamp | Sello de goma grande centrado con doble borde |
stencil | Stencil | Letras de esténcil militares a todo ancho |
typewriter | Typewriter | Texto de máquina de escribir monoespaciado |
handwritten | Signature | Firma estilo manuscrito con subrayado |
redacted | Redaction | Barras de redacción negras a todo ancho |
badge | Shield | Emblema de escudo de seguridad |
ribbon | Ribbon | Banner diagonal de esquina |
seal | Seal | Sello circular notarial |
frame | Frame | Borde decorativo de página completa |
tile | Tile | Cuadrícula de texto uniforme densa |
mosaic | Mosaic | Texto disperso aleatorio |
weave | Weave | Tejido diagonal entrelazado |
ghost | Ghost | Texto en relieve ultradiscreto |
watercolor | Watercolour | Efecto de lavado suave difuminado |
noise | Noise | Texto desgastado con ruido de píxeles |
halftone | Halftone | Texto como cuadrícula de puntos de semitono |
firemark doc.pdf -t stamp -m "CONFIDENTIAL" --border --color red
firemark superpone patrones de filigrana criptográfica inspirados en características de seguridad de billetes. Estos finos patrones geométricos son extremadamente difíciles de eliminar con editores de imágenes.
| Estilo | Descripción |
|---|---|
guilloche | Bandas de envolvente sinusoidal (predeterminado) |
rosette | Curvas de roseta + esquina espirógrafo |
crosshatch | Enrejado diamante diagonal fino |
border | Borde de seguridad ondulado anidado |
lissajous | Figuras paramétricas de Lissajous |
moire | Interferencia de círculos concéntricos |
spiral | Vórtice espiral de Arquímedes |
mesh | Rejilla hexagonal de panal |
plume | Curvas fluidas parecidas a plumas dispersas por la superficie |
constellation | Nodos de estrella conectados por una fina red geométrica |
ripple | Frentes de onda elípticos superpuestos desde orígenes aleatorios |
full | Todos los patrones combinados |
none | Deshabilitar filigrana |
firemark id.png -m "Rental application" --filigrane moire
firemark id.png -m "Rental application" --filigrane none # disable
Cada renderizado es no determinista por defecto. firemark aplica perturbación universal posterior al renderizado (fluctuación alfa, ruido de color subpíxel, micropuntos de borde, píxeles fantasma dispersos) y aleatorización por renderizador para que no haya dos salidas idénticas en píxeles, incluso con la misma configuración. Esto hace imposible que los modelos de visión de IA aprendan un patrón predecible para restarlo.
Además, se incrustan por defecto tiras de inyección de indicaciones adversariales para confundir las herramientas de eliminación de marcas de agua de IA. Desactívalas con --no-anti-ai si no deseas el texto de indicación visible:
firemark doc.png -m "CONFIDENTIAL" --no-anti-ai
-m, --main-text Texto principal de la marca de agua
-s, --secondary-text Línea de texto secundario
-t, --type Estilo de marca de agua (ver tabla anterior)
-o, --output Ruta del archivo de salida
-S, --suffix Sufijo de salida personalizado (predeterminado: "watermarked")
-c, --color Color — nombre o #RRGGBB (predeterminado: azul)
-O, --opacity Opacidad 0.0–1.0 (predeterminado: 0.5)
-r, --rotation Ángulo en grados (predeterminado: -45)
-p, --position centro, superior-izquierda, superior-derecha, inferior-izquierda, inferior-derecha, mosaico
-f, --font Nombre de fuente o ruta a .ttf/.otf
-I, --image Superponer una imagen como marca de agua
--qr-data Insertar un código QR con datos personalizados
--qr-code-position Ubicación del código QR (predeterminado: centro)
--qr-code-size Tamaño del código QR en píxeles (predeterminado: automático)
--border Dibujar un borde alrededor de la marca de agua
--shadow Agregar una sombra
--filigrane Estilo de filigrana de seguridad (predeterminado: guilloche)
--no-anti-ai Deshabilitar la inyección de indicaciones adversariales (activado por defecto)
Para la lista completa de más de 70 banderas, consulta CLI.md.
--pages Páginas para marcar (ej. 1,3-5 o "todas")
--skip-pages Páginas a omitir
--behind Colocar marca de agua detrás del contenido
--no-flatten Mantener capas separadas (aplanado por defecto)
--dpi Resolución de renderizado (predeterminado: 150)
# Process all images and PDFs in a folder
firemark ./inbox/ -m "INTERNAL" -t tile
# Recursive, 8 threads, custom suffix
firemark ./docs/ -R -j 8 -m "Draft" -S draft
# Dry run — list what would be processed
firemark ./docs/ -R -m "Draft" -n
Los archivos ya marcados (que coincidan con el sufijo) se omiten automáticamente en ejecuciones repetidas.
Guarda las opciones en un archivo TOML para evitar repetir banderas. Consulta examples/config/firemark.toml para un ejemplo completo con dos ajustes preestablecidos: ultra-seguro (mosaico denso, filigrana completa, trazabilidad QR, eliminación de metadatos) y ligero (texto diagonal simple, sin extras).
# Global defaults
main_text = "CONFIDENTIAL"
secondary_text = "{author} — {date}"
watermark_type = "diagonal"
color = "#1a3c6e"
opacity = 0.45
font_weight = "bold"
filigrane = "guilloche"
border = true
[preset.ultra-secure]
main_text = "CONFIDENTIAL — {author}"
watermark_type = "tile"
color = "#CC0000"
opacity = 0.6
filigrane = "full"
anti_ai = true
qr_data = "firemark://{author}/{timestamp}/{uuid}"
strip_metadata = true
[preset.light]
main_text = "COPY"
watermark_type = "diagonal"
color = "#555555"
opacity = 0.3
filigrane = "none"
anti_ai = false
firemark doc.pdf --config firemark.toml
firemark doc.pdf --config firemark.toml --preset ultra-secure
firemark doc.pdf --config firemark.toml --preset light
firemark doc.pdf --save-preset mypreset # save current flags
firemark --list-presets # list available presets
| Formato | Entrada | Salida |
|---|---|---|
| PNG | sí | sí |
| JPEG | sí | sí |
| sí | sí | |
| WebP | sí | sí |
| TIFF | sí | sí |
Se admite la conversión entre formatos (ej. firemark photo.webp -o out.pdf).
MIT