InDesign Script Collection
105 free ExtendScript tools for Adobe InDesign, covering text, images, styles, tables, colour, layers, export, preflight, production automation and more. Cross-platform compatible with InDesign CC 2020 through CC 2026.
What's Included
A production-ready toolkit organised into 11 categories, built by Mapsoft's InDesign development team.
105 Scripts
Covering text, images, styles, tables, colour, layers, export, preflight, production automation and document management.
Cross-Platform
All scripts work on both Mac and Windows without modification. Platform-agnostic file paths and no OS-specific APIs.
Production Ready
ScriptUI dialogs for configuration, error handling, measurement unit safety, and full undo support via Ctrl/Cmd+Z.
Installation
Copy to Scripts Panel Folder
Open InDesign's Scripts panel: Window > Utilities > Scripts
Right-click User and select Reveal in Explorer (Windows) or Reveal in Finder (Mac).
Copy the script folders (01-Text-Typography, 02-Images-Graphics, etc.) into the revealed Scripts Panel directory.
Scripts appear immediately in the Scripts panel, organised by folder. Double-click any script to run it.
Alternative: Direct Paths
Windows: C:\Users\[username]\AppData\Roaming\Adobe\InDesign\Version [X]\[locale]\Scripts\Scripts Panel\
Mac: ~/Library/Preferences/Adobe InDesign/Version [X]/[locale]/Scripts/Scripts Panel/
Alternative: Run Directly
In the Scripts panel, use File > Scripts > Other Script... to browse to and run any .jsx file directly.
Script Catalogue
Browse all 105 scripts organised by category. Each script includes ScriptUI dialogs for configuration.
Text & Typography
15 scripts
Scripts for text manipulation, formatting, typographic features, and text frame management.
| Script | Description | Use Case |
|---|---|---|
ConvertToTitleCase.jsx | Converts selected text to Title Case with smart handling of articles and prepositions | Fixing headline capitalisation across layouts |
RemoveEmptyTextFrames.jsx | Finds and removes all empty text frames with scope selection | Document cleanup after layout changes |
TextFrameAutofit.jsx | Auto-sizes selected text frames to fit content (height, width, or both) | Fitting caption frames and pull quotes to content |
BulletListCreator.jsx | Converts paragraphs into bulleted lists with configurable bullet character and spacing | Formatting lists in newsletters and manuals |
BalanceRaggedLines.jsx | Balances ragged text to prevent short last lines using tracking adjustments | Improving typographic quality in body text |
FindOversetText.jsx | Scans for overset text frames, highlights them, and offers navigation to each | Pre-press QC to catch hidden text |
StripInlineFormatting.jsx | Removes local formatting overrides while preserving applied styles | Cleaning up text pasted from Word |
TextStatistics.jsx | Counts characters, words, lines, paragraphs with reading time estimate | Editorial word count checking |
InsertSpecialCharacters.jsx | Floating palette with buttons for em dash, en dash, non-breaking space, thin space, and more | Quick access to typographic special characters |
ConvertStraightToSmartQuotes.jsx | Converts straight quotes to typographically correct curly quotes via GREP | Fixing documents from plain text sources |
ParagraphSpacingNormalizer.jsx | Normalises space before/after values with optional style filtering | Standardising spacing from multiple sources |
TextWrapBatchApply.jsx | Batch-applies text wrap settings to selected objects or entire pages | Adding text wrap to multiple images at once |
FontUsageReport.jsx | Reports all fonts used: name, style, type, pages, missing status | Pre-press font auditing before packaging |
DropCapEnhancer.jsx | Adds or modifies drop caps with configurable lines, characters, and character style | Adding decorative drop caps to chapter openings |
ThreadTextFrames.jsx | Automatically threads selected text frames in reading order | Quickly linking frames for multi-column articles |
Images & Graphics
12 scripts
Scripts for managing placed images, graphics, links, and visual assets.
| Script | Description | Use Case |
|---|---|---|
RelinkMissingImages.jsx | Scans for missing/modified links and batch-relinks from a target folder | Reconnecting images after moving project folders |
BatchResizeImages.jsx | Resizes all placed images by percentage or fitting method | Uniform scaling after layout size changes |
ImageInfoReport.jsx | Reports effective PPI, format, colour space, file size, and flags low-res images | Pre-press image quality audit |
ConvertAllImagesToCMYK.jsx | Identifies all RGB images and generates a conversion report | Flagging RGB images before going to press |
FitAllImagesToFrames.jsx | Fits images using fill, fit, centre, or content-to-frame methods | Batch-fitting images after placement |
CaptionGenerator.jsx | Auto-generates captions from image filenames with configurable position and style | Photo catalogs and proofing sheets |
ImageFrameFromSelection.jsx | Places images from a folder into selected frames sequentially | Filling photo grids and template layouts |
BatchPlaceImages.jsx | Places multiple images into an auto-generated grid layout | Contact sheets, galleries, product catalogues |
ReplaceWithHighRes.jsx | Swaps FPO images with hi-res versions by matching filenames | Production workflow low-res to hi-res swap |
EmbedAllImages.jsx | Embeds all placed images with file size warning | Creating self-contained documents for archiving |
ExportAllImagesFromDoc.jsx | Copies all linked images to a single output folder | Collecting assets for sharing or archiving |
ImageScaleChecker.jsx | Flags images scaled beyond configurable thresholds with colour-coded frames | QC for over-scaled or under-scaled images |
Document & Pages
12 scripts
Scripts for page management, guides, document setup, and structural operations.
| Script | Description | Use Case |
|---|---|---|
AddBleedMarks.jsx | Draws crop marks and bleed indicators on a dedicated locked layer | Adding visible bleed marks for proofing |
DuplicatePageRange.jsx | Duplicates a range of pages with master page preservation | Creating repeated sections in catalogues |
MasterPageApplicator.jsx | Batch-applies master pages to page ranges like "1-5, 8, 12-20" | Applying masters after restructuring chapters |
PageSizeConverter.jsx | Converts page size with presets (Letter, A4, A5, Tabloid) and content handling options | Converting layouts for international markets |
DocumentGridCreator.jsx | Creates column guides and baseline grid on all pages or master pages | Setting up consistent grids across pages |
PageNumberInserter.jsx | Adds automatic page numbers via master pages with configurable position and font | Adding page numbering to documents |
RemoveBlankPages.jsx | Finds and removes pages with no content beyond master page items | Cleaning up empty pages after revisions |
SpreadInspector.jsx | Reports on spread configurations: page counts, dimensions, island spreads | Troubleshooting gatefold and multi-page spreads |
GuidesManager.jsx | Multi-tab interface: remove, lock/unlock, recolour, create, and move guides | Managing guides in complex layouts |
DocumentCleanup.jsx | Removes empty frames, unused swatches, unnamed colours, empty layers, pasteboard items | End-of-project cleanup before handoff |
PageShuffler.jsx | Move pages, reverse page order, or sort alphabetically by content | Reordering catalogue pages |
SlugInfoAdder.jsx | Adds filename, date, inks, fonts, and custom text to the slug area | Production job identification on proofs |
Styles Management
10 scripts
Scripts for creating, auditing, mapping, and managing paragraph, character, object, and table styles.
| Script | Description | Use Case |
|---|---|---|
StyleUsageReport.jsx | Reports which styles are used/unused with count per style, option to delete unused | Cleaning up accumulated unused styles |
BulkStyleRenamer.jsx | Find/replace on style names across paragraph, character, and object styles | Rebranding style names across templates |
StyleOverrideHighlighter.jsx | Highlights text with local formatting overrides for QC review | Finding manual formatting instead of styles |
ImportStylesFromDoc.jsx | Imports styles from another InDesign document with conflict handling | Bringing styles from a design system |
CreateStyleFromSelection.jsx | Creates a new style based on the current selection's formatting | Capturing ad-hoc formatting as a reusable style |
StyleSheetExporter.jsx | Exports all style definitions to text file or CSV | Documenting style guides for brand compliance |
NestedStyleHelper.jsx | Creates and modifies nested styles with character styles and delimiters | Complex typographic patterns like run-in headings |
GREPStyleManager.jsx | View, add, edit, or remove GREP styles attached to paragraph styles | Managing automatic text formatting rules |
StyleMappingTool.jsx | Maps source styles to target styles and applies the mapping document-wide | Converting content between template systems |
ObjectStyleBatchApply.jsx | Applies object styles to objects filtered by type, layer, or colour | Batch-applying frame formatting |
Tables
8 scripts
Scripts for creating, formatting, importing/exporting, and manipulating tables.
| Script | Description | Use Case |
|---|---|---|
CSVToTable.jsx | Imports CSV and creates a formatted table with configurable delimiter and styles | Importing data from spreadsheets or databases |
TableToCSV.jsx | Exports selected table to CSV, handling merged cells gracefully | Extracting table data for use in spreadsheets |
TableStyler.jsx | Applies alternating row colours, header formatting, and border settings | Professional alternating-row table styling |
SortTableRows.jsx | Sorts rows by column with ascending/descending and numeric/alphabetic options | Alphabetising directories or sorting price tables |
MergeTableCells.jsx | Merges cells with identical values in a selected column | Creating grouped tables from flat data |
TableResizer.jsx | Equalises or proportionally distributes column widths and row heights | Normalising column widths after changes |
SplitTableByRows.jsx | Splits large tables into smaller ones by row count | Controlling table breaks across pages |
TableHeaderRepeater.jsx | Sets first row as repeating header, batch-apply to all tables | Ensuring headers repeat on every page |
Find & Replace
8 scripts
Advanced find/replace scripts using text, GREP, and style-based operations.
| Script | Description | Use Case |
|---|---|---|
MultipleTextReplacements.jsx | Loads find/replace pairs from a tab-delimited text file and runs them in batch | Bulk corrections from a corrections list |
CleanupTypography.jsx | One-click fix: double spaces, smart quotes, em dashes, ellipsis, punctuation spacing | Cleaning up text imported from Word or web |
FindReplaceByStyle.jsx | Finds text in a specific style and changes it to another style | Bulk style changes without modifying text |
RegexFindHighlight.jsx | Highlights GREP matches with colour without changing text | Proofreading review of patterns like dates or numbers |
PhoneNumberFormatter.jsx | Finds phone numbers in various formats and normalises to a chosen format | Standardising phone numbers in directories |
URLFinder.jsx | Finds URLs and optionally converts to hyperlinks or exports a list | URL auditing and hyperlink creation |
WhitespaceNormalizer.jsx | Cleans up multiple spaces, trailing spaces, extra returns, and tab issues | Cleaning up whitespace from various sources |
FindReplaceAcrossDocuments.jsx | Runs find/replace across all open documents or all files in a folder | Corrections across an entire book or magazine |
Colour & Swatches
8 scripts
Scripts for swatch management, colour conversion, and colour consistency.
| Script | Description | Use Case |
|---|---|---|
UnusedSwatchCleaner.jsx | Identifies and removes unused swatches with optional similar-swatch merge | Cleaning up accumulated unused colours |
SwatchInventory.jsx | Full swatch report: name, colour model, values, usage counts, export to file | Colour auditing for brand compliance |
RGBtoCMYKConverter.jsx | Finds RGB swatches and shows CMYK conversion preview with batch support | Preparing documents for print production |
SpotColorReporter.jsx | Lists spot colours with usage locations and option to convert to process | Pre-press spot colour audit |
CreateColorPalette.jsx | Creates swatches from manual entry, text file, or colour harmony generation | Setting up brand colours from a style guide |
SwatchReplacer.jsx | Replaces one swatch with another across all fills, strokes, text, and styles | Rebranding colour swaps |
ColorHarmonizer.jsx | Finds near-duplicate colours within a Delta-E threshold and suggests merging | Merging slightly different versions of same colour |
TintSwatchGenerator.jsx | Creates tint swatches at user-specified percentages from base colours | Building tint systems from brand colours |
Layers
6 scripts
Scripts for layer management, organisation, and version control.
| Script | Description | Use Case |
|---|---|---|
LayerVisibilityToggler.jsx | Floating palette with checkboxes for visibility and lock toggling | Quick layer toggling during design review |
MergeSelectedLayers.jsx | Merges multiple source layers into a chosen target layer | Consolidating layers after a design phase |
LayerCleanup.jsx | Removes empty layers and optionally layers with only hidden items | Cleaning up accumulated empty layers |
DuplicateToLayer.jsx | Duplicates or moves selected objects to a specified layer | Moving elements between layers preserving position |
LayerColorCoder.jsx | Assigns distinct UI colours to layers for visual organisation | Colour-coding layers by function |
VersionLayerManager.jsx | Creates version layers for language variants or design alternatives | Multilingual layouts with per-language layers |
Export & Output
10 scripts
Scripts for exporting, packaging, and outputting documents in various formats.
| Script | Description | Use Case |
|---|---|---|
BatchPDFExport.jsx | Exports each page as a separate PDF with preset, naming, and progress bar | Individual page PDFs for client review |
ExportPagesAsJPEG.jsx | Exports pages as JPEG with configurable quality, resolution, and colour space | Preview images for web or email proofing |
ExportSelectionAsSnippet.jsx | Exports selected objects as InDesign snippet (.idms) files | Creating reusable design elements |
PackageAndArchive.jsx | Packages document with fonts, links, IDML, and optional ZIP archive | Preparing handoffs to printers or clients |
EPUBPrepChecker.jsx | Checks EPUB readiness: alt text, export order, unsupported features | Pre-EPUB export quality check |
PrintReadyChecker.jsx | Comprehensive print checklist: bleed, resolution, CMYK, fonts, overset | Final pre-press check before sending to print |
ExportTextContent.jsx | Exports text to plain text or tagged text with style filtering | Extracting content for web or translation |
SplitDocByPages.jsx | Splits multi-page document into individual .indd files per page | Breaking magazines into page files for collaboration |
CreateContactSheet.jsx | Creates thumbnail grid overview of all pages | Visual overview for pagination planning |
BatchExportArticles.jsx | Exports each defined article as a separate text file | Content management for web publishing |
Preflight & QC
8 scripts
Quality control scripts for catching errors before output.
| Script | Description | Use Case |
|---|---|---|
OversetTextFinder.jsx | Finds overset text frames with navigation, auto-expand, and text shrink options | Catching hidden text before print |
OrphanWidowDetector.jsx | Detects typographic orphans and widows with configurable thresholds | Typographic QC for books and magazines |
MissingFontChecker.jsx | Lists missing fonts with page locations and offers font substitution | Resolving missing fonts from other designers |
LinkStatusChecker.jsx | Comprehensive link audit: missing, modified, embedded with colour-coded frames | Pre-output link verification |
ConsistencyChecker.jsx | Checks tracking, indent, leading, and inset consistency across styles | Finding formatting drift in templates |
SpellCheckReport.jsx | Collects suspected misspellings with context, exportable to text file | Generating reports for editors |
BleedChecker.jsx | Verifies items extend properly into bleed with colour-coded status | Pre-press bleed verification |
AccessibilityChecker.jsx | Checks alt text, reading order, language, tags, and heading structure | Meeting Section 508 / WCAG accessibility standards |
Production & Automation
8 scripts
Scripts for batch processing, data-driven design, and production workflows.
| Script | Description | Use Case |
|---|---|---|
BatchFileProcessor.jsx | Opens every .indd in a folder and runs a selected operation (update links, export PDF, preflight, package) | End-of-project batch processing |
DataMergeHelper.jsx | Enhanced data merge from CSV with placeholder tags, creating a page per record | Variable data printing and personalised materials |
BusinessCardGenerator.jsx | Creates business cards from CSV data using a template page with photo support | Producing card sets from a contact spreadsheet |
BookletImposition.jsx | Rearranges pages for saddle-stitch booklet printing with creep adjustment | Self-printed booklets, zines, and small publications |
WatermarkAdder.jsx | Adds text or image watermarks on a locked layer with full appearance control | Adding DRAFT or CONFIDENTIAL watermarks for review |
DocumentTemplateBuilder.jsx | Creates documents with layers, masters, page numbering, and common styles | Standardised document creation with full infrastructure |
QRCodePageLabeler.jsx | Adds QR codes with page metadata to each page on a dedicated layer | Proofing workflow with digital-physical linking |
FootnoteEndnoteConverter.jsx | Bidirectional conversion between footnotes and endnotes | Switching footnote/endnote styles for publication requirements |
Common Workflows
Combine scripts for end-to-end production workflows.
Print Preparation
- Run
DocumentCleanup.jsxto remove stray frames, unused swatches, empty layers - Run
RGBtoCMYKConverter.jsxto convert colours for print - Run
ImageInfoReport.jsxto audit image resolution - Run
FontUsageReport.jsxto check fonts - Run
OversetTextFinder.jsxto catch hidden text - Run
BleedChecker.jsxto verify bleed - Run
PrintReadyChecker.jsxfor final pre-press check - Run
BatchPDFExport.jsxfor final output
Text Cleanup
- Run
CleanupTypography.jsxto fix quotes, dashes, and spacing - Run
WhitespaceNormalizer.jsxto clean up whitespace - Run
StripInlineFormatting.jsxto remove local overrides - Run
StyleOverrideHighlighter.jsxto verify style consistency - Run
SpellCheckReport.jsxfor editorial review
Digital Publishing
- Run
AccessibilityChecker.jsxto audit alt text and reading order - Run
URLFinder.jsxto create hyperlinks from URLs - Run
EPUBPrepChecker.jsxto validate EPUB readiness - Run
ExportTextContent.jsxfor web content extraction
Style & Colour Cleanup
- Run
StyleUsageReport.jsxto find unused styles - Run
UnusedSwatchCleaner.jsxto remove unused colours - Run
ColorHarmonizer.jsxto merge near-duplicate colours - Run
ConsistencyChecker.jsxto find formatting drift
Compatibility
Tested and supported across modern InDesign versions on Mac and Windows.
Platform: macOS 10.15+ / Windows 10/11
Technical Notes
- Scripts use ExtendScript (.jsx), Adobe's JavaScript implementation for Creative Cloud applications.
- All scripts are wrapped in IIFEs
(function() { ... })()to avoid polluting the global scope. - Document-modifying scripts are wrapped in
app.doScript()withUndoModes.ENTIRE_SCRIPTfor single-step undo. - Measurement units are saved and restored to avoid altering user preferences.
- File I/O operations use
FileandFolderobjects from ExtendScript's cross-platform API. - User interfaces are built with ScriptUI dialogs for consistent cross-platform appearance.
Download the Collection
Get all 105 InDesign scripts in a single download. Free to use, modify, and distribute.