pyTransmit
Complete User Guide. Seed43 pyRevit Extension.
Version 250507
1 Overview
pyTransmit automates the full document transmittal workflow from inside Revit. It replaces the manual process of copying sheet numbers into a spreadsheet, building a distribution table, and formatting the output. Everything runs inside Revit via pyRevit. Nothing to open separately, no external platform to log into.
On each issue you select the revision you are issuing, fill in the recipient details, set the issue options, and click Publish. pyTransmit marks the revision as issued in Revit and writes your chosen output formats automatically.
| Item | Detail |
|---|---|
| Output formats | Revit Schedule, Revit Drafting View, Revit Legend, Excel (.xlsx), PDF |
| Sheet data | Live from the open Revit model. Revision sequence, sheet numbers, names, grouping parameters. |
| Config files | JSON files in the Settings folder, shareable via a network path. |
| Revit versions | 2025 and 2026 |
| Version | 250507 |
2 Main Window
Clicking the pyTransmit button in the Seed43 tab opens the main window. At startup the tool reads the current Revit project and pre-fills fields from the last issued revision.
Header and menu
The header bar contains the tool name, the current Revit project name, and the Publish button. The ☰ button in the top right opens the settings menu.
The menu gives access to all settings panels and tools.
- Recipient Manager: manage your client list and distribution list.
- Options Manager: configure the reason, method, format, and print size dropdowns.
- Setup: control which fields are visible and which output formats run on publish.
- Export Format: assign a layout template to each output format.
- File Naming: set the default filename and output folder path.
- Export Settings: share your config files with other team members.
- Import Settings: pull config files from a shared folder.
- Document Layout: open the Layout Builder to edit transmittal templates.
- Enable Log: capture a full debug log of the next publish run.
- Help: opens this page.
- About: opens seed43.org.
Revision selector
Lists all un-issued revisions from the Revit project. Selecting a revision is required before you can publish.
| Control | What it does |
|---|---|
| Revision dropdown | Lists all un-issued Revit revisions by sequence number and description. |
| Rev type dropdown | Appears only when the project has revisions from multiple numbering sequences. Hidden when only one type exists. |
| Group Label toggle | Text On or Text Off. Controls whether group header rows appear in the output between drawing groups. Persists between sessions. |
| Sheet grouping combos | Select Revit sheet parameters to group the drawing list by. Selecting a value in the last combo adds a new one below for multi-level grouping. |
Project info fields
Four optional fields pre-filled from Revit Project Information on startup. Each is shown or hidden by the Setup toggles.
| Field | Source |
|---|---|
| Organisation | Organization Name project parameter |
| Client | Client Name project parameter |
| Project No. | Project Number project parameter |
| Project | Project Name parameter, falling back to the Revit file title |
Issue fields
| Field | Description |
|---|---|
| Issued By | Free text initials. Written to the Revit revision IssuedBy field on publish. |
| Reason for Issue | Dropdown driven by reason.json. e.g. A, Approval. C, Construction. |
| Method of Issue | Dropdown driven by method.json. e.g. E, Email. M, Mail. |
| Document Format | Dropdown driven by format.json. e.g. PDF, DWG. |
| Print Size | Dropdown driven by printsize.json. e.g. A1, A3. |
Recipient section — Distribution List mode
Shows fixed role rows loaded from distribution.json. Each row has a label (read-only role name), an Attention To text field, and a Copies number field. Pre-filled from the last issued revision.
Recipient section — Client List mode
Shows rows with Company and Contact dropdowns plus a Copies field, driven by recipients.json. Selecting a company filters the Contact dropdown to that company’s contacts. Selecting any value in the last row adds a new blank row below it automatically.
3 Setup
Opened from ☰ > Setup. Controls what fields are visible in the main window and which output formats run on Publish. Settings save to pytransmit_setup.json immediately.
Project info
| Checkbox | Effect |
|---|---|
| Organisation | Shows or hides the Organisation Name field. |
| Client | Shows or hides the Client Name field. |
| Project No. | Shows or hides the Project Number field. |
| Project | Shows or hides the Project Name field. |
Issue fields
| Checkbox | Effect |
|---|---|
| Initials | Shows or hides the Issued By field. When hidden, IssuedBy is left blank on publish. |
| Reason | Shows or hides the Reason for Issue dropdown. |
| Method | Shows or hides the Method of Issue dropdown. |
| Format | Shows or hides the Document Format dropdown. |
| Print Size | Shows or hides the Print Size dropdown. |
Recipient mode
| Mode | Effect |
|---|---|
| Distribution List | Fixed role rows from distribution.json with Attention To and Copies per row. |
| Client List | Company and Contact dropdowns driven by recipients.json. |
Output formats
| Format | Effect |
|---|---|
| Revit Schedule | Generates a ViewSchedule in the current Revit model. Default on. |
| Excel | Generates an Excel workbook (.xlsx). Prompts for save path. |
| Generates a PDF file. Prompts for save path. | |
| Revit Drafting View | Generates a drafting view with the transmittal placed inside it. |
| Revit Legend | Generates a legend view with the transmittal. |
Page height
| Option | Effect |
|---|---|
| A4 | Standard A4 page height (287mm usable). Splits across multiple schedule views when needed. Default. |
| Custom | Enter a custom usable height in mm. |
| No Page Break | Single schedule view regardless of length. |
4 Export Format
Opened from ☰ > Export Format. Controls which output formats are generated when Publish runs, and assigns a layout template to each one. Each format can use a different template independently.
| Row | Description |
|---|---|
| Revit Schedule | Checkbox enables or disables this output. The dropdown on the right selects the layout template to use. Default on, uses the Revit Schedule template. |
| Revit Drafting View | Checkbox enables or disables this output. Dropdown selects the layout template. |
| Revit Legend | Checkbox enables or disables this output. Dropdown selects the layout template. |
| Excel | Checkbox enables or disables this output. Dropdown selects the layout template. |
| Checkbox enables or disables this output. Dropdown selects the layout template. |
5 Recipient Manager
Opened from ☰ > Recipient Manager. Manages the two data sources for the recipient section: the Distribution List (role labels) and the Client List (companies and contacts).
Distribution List tab
Stores the role labels shown in Distribution List mode. e.g. Architect/Designer, Owner/Developer, Contractor, Local Authority. Add, delete, and reorder rows here. The Attention To and Copies values are filled per-issue in the main window and are not stored here.
- Add: adds a blank row at the bottom.
- Delete: removes highlighted rows after confirmation.
- Drag to reorder: controls the order roles appear in the main window.
- Column header click: sorts ascending or descending.
- Right-click: Select All, Select None, Duplicate, Delete, Copy.
Client List tab
Stores companies and contacts for Client List mode. Multiple records with the same Company name give multiple contact options in the dropdown.
| Column | Description |
|---|---|
| Company | The organisation name. Populates the Company dropdown in client mode. |
| Attention To | The contact name. Multiple records with the same Company give multiple contact options. |
Import
Click Browse to select a CSV or Excel file. The tool auto-detects Company and Attention To columns, shows a preview of up to 100 rows, and skips exact duplicates.
Export
Click Export in the header. Choose Excel (.xlsx) or CSV. With rows highlighted you can export selected records only, or all records.
6 Options Manager
Opened from ☰ > Options Manager. Manages the four configurable dropdown lists: Reason for Issue, Method of Issue, Document Format, and Print Size.
Reason for Issue tab
Coded records with three fields. The Code is a short abbreviation (e.g. A, BC, C) written into the Revit IssuedTo field on publish. The Separator sits between code and description in the dropdown label. Changing it on any row updates all rows in the list. The Description is the full label, e.g. Approval, Building Consent, Construction.
Method of Issue tab
Same structure as Reason. Code, Separator, Description. e.g. E, Email. M, Mail. H, Hand. CT, Cloud Transfer.
Document Format tab
Simple records with a single Value each. e.g. PDF, DWG, IFC. Shown as-is in the Format dropdown.
Print Size tab
Simple records with a single Value each. e.g. A4, A3, A1, A0. Shown as-is in the Print Size dropdown.
Common controls
- Add: adds a blank row at the bottom of the current tab.
- Delete: removes highlighted rows after confirmation.
- Drag to reorder: controls the order items appear in the dropdown.
- Column header click: sorts ascending or descending.
- Right-click: Select All, Select None, Duplicate, Delete, Copy.
Import and Export
Import loads from Excel or CSV. The expected format has sheets or sections named Reason, Method, Format, and Print Size with a header row. Export saves all four tabs to Excel (four sheets) or CSV (labelled sections).
7 Export Settings
Opened from ☰ > Export Settings. Shares your settings JSON files with other team members by copying them to a network folder.
| Setting | Description |
|---|---|
| Export Path | Destination folder. Files are copied into a pyTransmit Settings subfolder here. |
| Auto-Update on Save | When ticked, silently re-exports every time you save changes in Recipient Manager or Options Manager. Keeps a shared network folder current automatically. |
| Recipients | Includes recipients.json in the export. |
| Reason, Method, Format, Print Size | Includes the respective JSON files. |
8 Import Settings
Opened from ☰ > Import Settings. Pulls config files from a shared folder into your local Settings directory.
| Setting | Description |
|---|---|
| Import Path | Source folder. The tool looks for a pyTransmit Settings subfolder here. |
| Auto-Update on Open | When ticked, silently imports the selected files every time the tool opens. |
| Recipients, Reason, Method, Format, Print Size | Which JSON files to pull in. |
9 File Naming
Opened from ☰ > File Naming. Controls the default filename and output folder path used when pyTransmit prompts you to save Excel and PDF files.
Transmittal naming template
Type the filename template or drag token chips from the palette into the field. The live preview below shows the resolved filename using values from the current Revit project.
| Token | Resolves to |
|---|---|
| {proj_number} | Project Number from Revit Project Information |
| {proj_name} | Project Name from Revit Project Information |
| {current_date} | Today’s date in YYYY-MM-DD format |
| {date_yy}, {date_mm}, {date_dd} | Two-digit year, month, day |
| {rev_number} | Revision number, e.g. 01 |
| {rev_desc} | Revision description, e.g. ASI01 |
| {username} | Current Windows username |
| {revit_version} | Active Revit version number |
Default: {proj_number}-TRA-{current_date}.pdf
Output path template
Sets the default folder for file save dialogs. The path preview turns green when the resolved folder exists on disk, orange when it resolves but the folder is missing, and red when the root is not configured.
| Token | Resolves to |
|---|---|
| {projects_root} | The Projects Root folder set below |
| {bucket_folder} | Full bucket folder name found on disk, e.g. #JOB-4251-4300 |
| {bucket_min}, {bucket_max} | Lower and upper numbers of the bucket range |
| {job_number} | Full project folder name as found on disk, e.g. 4286 – Alterations |
Projects Root
Set this to the root folder where your project folders live. pyTransmit scans it to find the correct bucket folder for the current job number. If the job is not found it tries the Older Jobs Root. Use Browse or type the path directly.
10 Layout Builder
Opened from ☰ > Document Layout. Visual editor for transmittal layout templates. Each template is a JSON file in Layout/Layouts/. Each output format can use a different template, assigned in Export Format.
Layout Builder settings
Column widths
Set A, B, and C as percentages of the page width. D takes the remainder and is divided equally across revision columns.
| Zone | Role |
|---|---|
| A | First column. Typically sheet number, e.g. 11%. |
| B | Second column, e.g. 11%. |
| C | Third column. Typically the widest data column, e.g. 33%. |
| D (auto) | Revision spine. Calculated as 100 minus A minus B minus C, split across revision columns. |
Text styles
| Style | Default |
|---|---|
| Data | Arial 2.3mm. Body text. |
| Header | Arial 2.5mm bold. Column headers. |
| Title | Arial 4.5mm bold. Title row. |
Each style supports: font family, size in mm, bold, italic, underline, and text colour as a hex value.
Block palette and Inspector
Window areas
| Area | Purpose |
|---|---|
| Template selector | Dropdown at the top. Select a template to load it or create a new one. |
| Block palette (left) | All available block types, grouped. Click or drag to add to the canvas. |
| Canvas (centre) | The row editor. Each row shows its blocks. Click to select. Drag rows to reorder. |
| Inspector (right) | Settings for the selected row or block. Changes apply immediately. |
Block types
Layout
| Block | Content |
|---|---|
| Logo | Company logo image from branding settings. |
| Text | Static label. Supports token substitutions. |
| Blank Row | Empty spacer. Height controlled by the height percentage field. |
| Page Count | Page X of Y. Format is configurable. |
| Current Issue Date | Date of the latest revision. |
Project Info
| Block | Content |
|---|---|
| Organisation, Client, Project Number, Project Name | Project info fields from the main window. |
Distribution
| Block | Content |
|---|---|
| Sent To | Expands to one row per recipient. Company name or role label. |
| Attention To | Expands to one row per recipient. The named contact. |
Documentation
| Block | Content |
|---|---|
| Sheet Number | Expands to one row per sheet. Shows the Revit sheet number. |
| Sheet Description | Expands to one row per sheet. Shows the sheet name. |
| Drawing Group | Group header label between drawing groups when grouping is active. |
Revision
| Block | Content |
|---|---|
| Date of Issue | Header row across revision columns. Supports text rotation. |
| Number of Copies | One cell per recipient per revision column. |
| Revision Marks | One cell per sheet per revision column. The revision letter or number. |
| Initials | IssuedBy initials per revision column. |
| Reason, Method, Doc Type, Print Size codes | The encoded value per revision column. |
Metadata
| Block | Content |
|---|---|
| Reason, Method list | Legend row listing all codes and descriptions. |
| Document Type, Print Size | The value for the current issue. |
Inspector block settings
| Setting | Description |
|---|---|
| Text Style | Data (small body), Header (medium bold), or Title (large bold). |
| Justification | Horizontal: Left, Centre, Right. |
| Vertical Justification | Top, Middle, Bottom. |
| Span | How many column slots this block occupies. |
| Borders | Toggle top, bottom, left, right cell borders independently. |
| Data Borders | Horizontal and vertical borders between expanded rows. |
| Background Color | Optional hex colour for the cell background. |
| Alt Rows, Alt Color | Alternating row background for expandable blocks. |
| Content | For Text blocks. Static text or token string. |
| Rotation | For spine header blocks. Rotate text 90 degrees. |
| Prefix, Suffix | Text prepended or appended to the block value. |
| List Style | One line or separate rows. For Reason and Method lists. |
| Date Format | dd/MM/yyyy, dd MMMM yyyy, and others. |
| Page Format | Page X, Page X of Y, X of Y, and others. |
| Repeat every page | Row appears on every overflow page. |
Template management
| Action | How |
|---|---|
| New template | Click + next to the selector. A copy of the current template is created with your chosen name. |
| Rename | Click the pencil icon. The JSON file is renamed on disk. |
| Delete | Click the trash icon. Deletes the JSON file permanently. |
| Auto-save | Changes save to the active template JSON as you make them. |
11 Enable Log
Accessed from ☰ > Enable Log. Captures a full record of a publish run for troubleshooting or bug reports.
- Click ☰ > Enable Log.
- A file save dialog opens. Choose where to save the log zip and give it a name.
- The menu label changes to Log: ON (click to cancel).
- Click Publish as normal.
- After the run completes the log is saved and a dialog confirms the path. Logging turns off automatically.
The log zip contains a plain-text log with timestamped START, DONE, CANCELLED, and ERROR entries for each output type, a copy of the layout JSON used, and the project number and name.
12 Settings Mismatch
When you open pyTransmit on a project that was previously issued, the tool compares your current Setup settings against what was active when the last revision was issued. If they differ, a Settings Mismatch dialog appears before the window is ready.
| Option | Effect |
|---|---|
| Update Settings | Permanently updates your Setup config to match what was used last time. Saves to disk. |
| This Issue Only | Applies the previous settings for this session only. Not written to disk. |
| Ignore | Proceeds with your current settings unchanged. |
13 Publish Workflow
What happens when you click Publish:
- pyTransmit reads all field values from the main window.
- It builds the IssuedTo string encoding all metadata as space-separated tags.
- In a single Revit transaction it writes IssuedTo, writes IssuedBy, and marks the revision as Issued.
- For file outputs (Excel, PDF) a file save dialog opens. Cancelling skips only that format.
- For Revit outputs (Schedule, Drafting View, Legend) it writes directly into the current model.
- After all outputs complete the main window closes.
IssuedTo encoding
All issue data is stored in the Revit revision IssuedTo field as a compact encoded string so future sessions can pre-fill the main window without needing an external database.
| Tag | Meaning |
|---|---|
| R: | Reason for Issue code, e.g. R:C for Construction. |
| M: | Method of Issue code, e.g. M:E for Email. |
| F: | Document Format, e.g. F:PDF. |
| S: | Print Size, e.g. S:A1. |
| DL: | Distribution List recipients. Format: index, letter, attention, copies. |
| CL: | Client List recipients. Format: Company, Contact, copies. |
| RT: | Revision numbering type, e.g. Numeric, Alphanumeric. |
| VIS: | Active info rows. FR=Organisation, CL=Client, PN=Project No., PJ=Project. |
| EX: | Active outputs. RS=Schedule, RD=Drafting, RL=Legend, Excl=Excel, PDF=PDF. |
| RPG: | Page break. 0=none, 1=A4, or a mm value for custom. |
| GP: | Sheet grouping parameters, separated by ~~ for multiple levels. |
14 Troubleshooting
Main window does not open
- Reload pyRevit from the pyRevit tab and try again.
- Check the pyRevit output window for a XAML load error.
- Make sure Seed43Styles.xaml is present in the extension root folder.
Revision not in the dropdown
- Only un-issued revisions appear. Add a new revision sequence entry in Revit if all are already issued.
Settings Mismatch appears every time
- Choose Update Settings to permanently save the project settings. The dialog will not reappear unless settings change again.
Revit Schedule output looks wrong
- Open Layout Builder and check that column percentages A + B + C are less than 100.
- Check row heights are not too small for the text size.
- Delete any stale schedule pages from a prior run and publish again.
File save dialog does not appear for Excel or PDF
- Confirm the Excel or PDF checkbox is ticked in Export Format.
- Confirm the format has a layout template assigned in Export Format, not set to (none).
Output folder not resolving in File Naming
- Check that Projects Root is set and the folder exists on disk.
- Check that bucket folder names on disk contain numbers matching the job number.
Logo not appearing
- Check the logo source path in Branding settings points to a PNG or JPG that exists.
- If using a network path, confirm it is accessible from the machine running Revit.

