FT1F

Documentation

FT1F is a desktop application for validating and organizing 3D game assets before pipeline integration. Technical artists and pipeline developers use it to define validation rule sets (“Presets”), run them against asset folders, and copy/rename files to match a target folder structure.

Getting Started

When you first launch FT1F, a license gate is shown. You must activate a valid license key before accessing the application.

  1. Enter your license key in the format XXXX-XXXX-XXXX-XXXX.
  2. Press Activate or hit Enter.
  3. If activation succeeds, the app loads immediately.
  4. If it fails, an error message describes the reason (invalid key, activation limit reached, network error, etc.).

Your license is stored encrypted on your machine. You do not need to re-enter it on subsequent launches unless you deactivate it or move to a new device.

You can get a license key from your account on our website. The settings screen also shows a direct link.

Application Layout

The application has a fixed left sidebar and a main content area.

Content Area

The content area renders the active view. In the Validate view, the layout splits into:

  • Config panel (left, fixed 72px) — preset selector, asset name input, folder picker, and run button.
  • Results / Viewport area (right, resizable) — validation report or 3D/2D viewer.
  • 3D/Texture sidebar (optional, resizable) — drag the divider between the results and the sidebar to resize. Default width is 40% of the content area (min 20%, max 80%).

Core Concepts

Projects

A Project is a named container that groups related Presets together. For example, you might have a “Characters” project holding presets for Hero, NPC, and Creature asset types.

  • Projects are sorted by creation date by default.
  • You can drag to reorder them in the library.
  • Each project can be exported as a .json file and shared with teammates.
  • Projects can be imported from a .json file. When importing a preset file, you choose whether to add it to an existing project or keep it as a standalone preset.

Presets

A Preset defines the validation rules for a specific asset type. It specifies:

  • The expected root folder name (supports template variables like {AssetName}).
  • The expected folder structure (sub-folders, with optional required/optional flags).
  • The expected files inside each folder (name patterns, types, and technical constraints).

Presets can exist inside a Project or as standalone presets (not grouped in any project).

  • Click a preset card to open a new Validation tab for that preset.
  • Presets can be exported as individual .json files.
  • Presets can be marked as favorites (star icon on hover) for quick access.

Custom Tags

Custom Tags are reusable, named variables you define once and reference across any preset. They let you express variability in filenames and folder structures — for example, a {Part} tag representing different body parts of a character.

There are three check types:

TypeDescription
WildcardMatches any single token in a filename. No constraint on values.
EnumeratedA fixed list of allowed values. Validation fails if the value is not in the list.
PatternA regular expression. Validation fails if the value does not match the pattern.

Custom Tags are managed in Settings > Custom Tags.

Template Variables

Template variables are placeholders used in preset folder paths and file name patterns. They are resolved at validation or submission time.

VariableDescription
{AssetName}Replaced with the asset name entered in the config panel.
{date}Replaced with the current date in the preset's configured date format.
{CustomTag}Any custom tag you have defined (e.g., {Part}, {LOD}).
{MaterialName}Wildcard that matches any single token. Used for per-material file slots.

See the full Template Variables Reference for details.


Validate

The Validate section is where you run preset rules against an asset folder on disk and see a detailed report.

Creating a Validation Tab

  1. Navigate to Validate (the FT1F icon in the sidebar). This opens the Presets & Projects library.
  2. Click a preset card inside a project, or click a standalone preset. A new validation tab opens and you are taken to it automatically.
  3. Each tab is fully isolated — you can run different presets or different folders simultaneously in separate tabs.

Running Validation

The left config panel contains:

FieldDescription
Asset NameThe name of the asset being validated. Used to resolve {AssetName} in the preset.
Asset FolderThe folder to scan. Click the button to open a folder picker dialog. Hover over the path to see the full path in a tooltip.
Selected folder is the rootWhen checked, the selected folder is treated as the asset root (e.g., SM_Hero/). When unchecked, the validator expects the rootFolder pattern to exist inside the selected folder.

Once both fields are filled, click Run Validation (or press Enter while the asset name input is focused). A spinner shows while the scan runs.

Clicking Re-run after results are shown repeats the validation against the same folder.

Reading the Report

The report is organized into sections, each representing a category of checks:

  • Naming — file and folder name convention checks.
  • Folder Structure — expected folders present/missing.
  • Textures — resolution, power-of-two, required suffixes.
  • Meshes — polycount limits, expected scale and rotation.

Each section has an overall status badge:

StatusMeaning
PassAll checks in this section passed.
WarningOne or more non-critical issues found.
FailOne or more required checks failed.
InfoInformational messages only.

Each item within a section shows:

  • A label — the name of the specific check.
  • A status indicator — colored dot (green/yellow/red/blue).
  • A message — human-readable explanation of the result.
  • Optional details — extended technical information.
  • Optional fix suggestion — if a file or folder has a naming issue, a suggested rename (oldPath → newPath) is shown.

3D Viewport

When a validation report is available, you can load a 3D model from the scan results into the built-in viewer.

Display modes:

ModeDescription
ShadedStandard lit material rendering.
WireframeMesh edges only, no fill.
Wireframe ShadedShaded mesh overlaid with wireframe edges.
CollisionDisplays collision geometry if present.
UVRenders UV layout in 2D.

Additional controls:

  • Materials panel — toggle individual material visibility. A legend lists all materials in the loaded model.
  • Pivot point — toggle display of the model's pivot/origin point.
  • UV channel selector — switch between UV channels when multiple are present.
  • Grid Y position — adjust the ground plane height for accurate ground-contact visualization.

Supported model formats: FBX, GLTF, GLB, OBJ, USD.

Models are loaded via a custom asset:// protocol that gives the renderer secure access to local files without using unsafe file:// URLs.

Texture Viewer

Toggle the 2D Viewer button in the sidebar (or click a texture entry in the validation report) to open the texture sidebar. It displays the selected texture file as a 2D image. Textures are auto-mapped from the scan results by filename.


Create

The Create section helps you copy and rename source files into a preset-defined destination folder structure. This is useful for organizing raw deliverables from an artist into the correct pipeline locations.

Picking a Preset

The Create section opens to a preset picker — the same library layout as the Validate section. Click a preset card to start a submission session for that preset.

  • Use Import, New Preset, and New Project buttons at the top to manage presets without leaving the Create section.
  • To return to the picker from an active session, click ← All Presets in the left config panel.

Tag Values

When a preset references Custom Tags, the Tag Values panel appears in the config panel. For each tag referenced in the preset, you provide the actual values to use.

For example, if the preset has a {Part} tag:

  1. Type a value (e.g., Head) in the input and press Enter or click Add.
  2. The value appears as a chip. Add as many values as needed.
  3. To remove a value, click the X on its chip.

The file slots panel on the right automatically expands to show one slot for every combination of tag values (cartesian product). For instance, if {Part} has values [Head, Torso] and {LOD} has values [LOD0, LOD1], the result is 4 file slots.

File Slots

The File Slots panel (right side) shows every expected file defined by the preset, grouped by folder.

Each row (slot) represents one expected file and shows:

ElementDescription
Status dotGreen = source file assigned; Gray = slot still empty.
Expected filenameThe resolved filename (variables substituted).
Source pathThe file currently mapped to this slot.
Hover actionsEdit to manually pick a source file; Remove to clear the assignment.

Auto-Detection: When you set a destination folder, FT1F automatically scans it and matches existing files to slots by filename (case-insensitive). Auto-detected files are marked accordingly. Re-click Re-check in the panel header to rescan at any time.

The header also shows a summary: X assigned · X pending · X/Y required.

Submitting Files

Configure the destination in the config panel:

OptionDescription
Asset NameResolves {AssetName} in all folder and file patterns.
Destination FolderThe root folder to copy files into. Click to open a folder picker.
Destination is rootWhen checked, files go directly into the destination folder (no extra root folder from the preset). When unchecked, the preset's rootFolder template is created inside the destination.
Keep OriginalWhen enabled, source files are copied but not deleted. When disabled, source files are removed after a successful copy (move behavior).

Click Submit to start the operation. Progress is shown with a spinner. After completion:

  • Success — a confirmation message appears with an optional Show in Folder button to open the destination in your system file explorer.
  • Errors — a list of files that failed to copy or delete is shown. Partial successes are reported; no files are silently skipped.

Preset Editor

The Preset Editor opens when you create a new preset or click Edit on an existing one. It replaces the current view with a full-screen editor.

General Settings

FieldDescription
Preset NameThe display name for this preset. Required to save.
Root FolderThe expected root folder name. Supports template variables (e.g., SM_{AssetName}).
Date FormatHow {date} is formatted in filenames and folder names. See Date Format Reference.

Root-Level Files

Defines files expected directly in the root folder (not inside any subfolder). Click Add File to add a file rule. Each rule is configured in the File Rules editor.

Folder Rules

The folder list defines the expected sub-folder structure inside the root. Each folder rule has:

FieldDescription
PathThe folder path relative to the root. Supports template variables.
RequiredWhether validation fails if this folder is missing.
FilesThe file rules inside this folder.
  • Click Add Folder to append a new folder rule.
  • Drag the grip handle to reorder folders.
  • Click the folder row to expand/collapse its file list.
  • Click Delete (trash icon) to remove a folder and all its file rules.

File Rules

Each file rule defines one expected file (or a pattern matching a group of files):

FieldDescription
PatternThe filename pattern. Supports template variables and wildcards. For example: {AssetName}_D.png or {AssetName}_{MaterialName}_N.png.
RequiredWhether validation fails if this file is missing.
TypeThe asset type: mesh, texture, scene, or other. Determines which constraint options are shown.

Click the expand toggle on a file rule to access its constraints.

Constraints

Constraints are optional technical validation rules applied to a matched file.

Texture Constraints

ConstraintDescription
Resolution RangeMinimum and maximum texture dimensions in pixels. For example, [512, 4096] allows 512×512 up to 4096×4096.
Power of TwoWhen enabled, validation fails if either dimension is not a power of two (e.g., 256, 512, 1024, 2048, 4096).

PBR Constraints (texture type)

ConstraintDescription
Check AlbedoEnables albedo range checking on this texture.
Albedo RangeThe expected minimum and maximum average brightness range [min, max] (0–255).

Mesh Constraints

ConstraintDescription
Max PolycountMaximum number of polygons allowed. Validation fails if the mesh exceeds this value.

Preset-Level Tech Constraints

Applied across all meshes/textures in the scan.

ConstraintDescription
Polycount per LODMax triangle counts for LOD0, LOD1, etc.
Required Texture SuffixesFile suffixes that must be present (e.g., _D, _N, _AO).
Expected ScaleExpected transform scale with a configurable tolerance.
Expected RotationExpected transform rotation with a configurable tolerance.

Custom Tag Editor

Custom Tags are created and managed in Settings > Custom Tags, but they are referenced in presets and submission sessions throughout the app.

To open the editor, click New Tag (or Edit on an existing tag) in the Settings view.

FieldDescription
Tag NameThe identifier used in patterns (e.g., Part → referenced as {Part}).
DescriptionA human-readable explanation of what this tag represents. Shown in tooltips and the tag manager panel.
Check TypeWildcard, Enumerated, or Pattern.
  • Enumerated tags: Add each allowed value as a chip using the value input and Add button. During validation, any token matching the tag position that is not in this list will cause a fail.
  • Pattern tags: Enter a regular expression. Tokens at the tag's position must match it to pass.
  • Wildcard tags: Any token at the tag's position is accepted.

To delete a tag, click Delete on the tag row in Settings. You are asked for a double-confirmation before the tag is permanently removed.

Deleting a Custom Tag does not automatically remove it from existing presets. Presets referencing a deleted tag will still reference it by name, but validation will treat it as a wildcard until the tag is recreated or the preset is updated.

Settings

Access Settings via the gear icon in the sidebar.

General

SettingDescription
ThemeToggle between Dark and Light modes. Persists across sessions.
Show TipsToggle contextual help text in the Preset Editor.

License

Shows your current license status:

  • License key — displayed in masked format (****-XXXX).
  • Tier — your license tier (indie, pro, or studio).
  • Deactivate — removes the license from this device, freeing the activation for use elsewhere. The app restarts and shows the license gate again.

Custom Tags

Lists all defined Custom Tags with:

  • Tag name, check type, and description.
  • Allowed values (for Enumerated tags) — visible on hover.
  • Edit button to open the Custom Tag Editor.
  • Delete button (two-step confirmation).

App Info

Displays the application version number and build date.


Validation Rules Reference

Structure Validation

Structure validation checks whether the scanned folder matches the hierarchy and naming patterns defined in the preset.

How filename matching works: Filenames are tokenized by splitting on _ and . characters. Each token in the filename is compared against the corresponding token in the preset pattern.

Example: SM_HeroCharacter_LOD0.fbx — Tokens: SM, HeroCharacter, LOD0, fbx

The pattern SM_{AssetName}_{LOD}.{ext} is compiled into a schema that matches those tokens positionally.

Rules:

  • Static tokens must match exactly (case-sensitive by default).
  • Variable tokens ({AssetName}, {CustomTag}, etc.) match the value provided or any value (for wildcards).
  • Wildcards (*) match any single token.
  • Required folders: If a required folder is absent, the section item fails.
  • Required files: If a required file is absent (no file in the folder matches the pattern), the section item fails.
  • Extra files: Files present in the folder but not matching any rule are flagged as informational or warnings depending on preset settings.

Fix suggestions: When a file's name is close to a valid pattern (measured by Levenshtein edit distance), the validator proposes a corrected filename.

Content Validation

Content validation reads the actual file data to check technical properties.

Texture validation (via sharp):

  • File extension must be one of: .png, .jpg, .jpeg, .tga, .tiff, .tif, .bmp, .exr.
  • Resolution is read and compared against resolutionRange constraints.
  • Power-of-two is checked if the constraint is enabled.
  • PBR albedo average brightness is computed and compared against albedoRange.
  • Required suffixes (e.g., _D, _N) are checked for presence across all textures in the folder.

Mesh validation:

  • Polycount is extracted from the mesh file.
  • Compared against maxPolycount (file-level) or polycount.perLOD (preset-level).
  • Expected scale and rotation are compared against the mesh transform within the configurable tolerance.

Validation Report

After validation completes, a ValidationReport is returned containing:

FieldDescription
overallStatuspass, fail, warning, or info — the worst status across all sections.
sectionsArray of ValidationSection objects, one per category.
timestampTime the report was generated.
scanDataThe list of all file paths found in the scan, used for viewport texture mapping.

Each ValidationSection contains:

FieldDescription
titleThe category name (e.g., "Naming", "Textures").
statusThe worst status across items in this section.
itemsArray of ValidationItem objects.

Each ValidationItem contains:

FieldDescription
labelThe check name.
statuspass, fail, warning, or info.
messageHuman-readable result description.
detailsOptional extended information.
fixOptional { oldPath, newPath } rename suggestion.

Template Variables Reference

Template variables can be used in the Root Folder, Folder Rule paths, and File Rule patterns fields of a preset.

VariableResolved FromResolved AtExample
{AssetName}Asset Name field in the config panelValidation / Submission timeSM_Hero
{date}Current system dateValidation / Submission time20260311
{CustomTag}Any custom tag name you defineValidation / Submission timeHead, LOD0
{MaterialName}Wildcard — matches any single tokenValidation time (match only)Any value

Cartesian product expansion: When a folder path or file pattern contains multiple Custom Tags, FT1F generates one slot/placeholder for every combination of values. This happens automatically in the Create section's File Slots panel.

Example: A file rule {AssetName}_{Part}_{LOD}.fbx with {Part} = [Head, Torso] and {LOD} = [LOD0, LOD1] expands into four expected files:

  • HeroChar_Head_LOD0.fbx
  • HeroChar_Head_LOD1.fbx
  • HeroChar_Torso_LOD0.fbx
  • HeroChar_Torso_LOD1.fbx

Date Format Reference

The {date} variable is formatted according to the Date Format selected in the preset's General Settings.

Format TokenExample
DDMMYYYY11022026
MMDDYYYY02112026
YYYYMMDD20260211
DDMMYY110226
MMDDYY021126
YYMMDD260211
DD_MM_YYYY11_02_2026
MM_DD_YYYY02_11_2026
YYYY_MM_DD2026_02_11
DD-MM-YYYY11-02-2026
MM-DD-YYYY02-11-2026
YYYY-MM-DD2026-02-11

Supported 3D Formats

The built-in 3D viewport supports the following mesh formats:

FormatExtension
Filmbox.fbx
GL Transmission Format.gltf, .glb
Wavefront OBJ.obj
Universal Scene Description.usd, .usdc, .usdz

Textures supported for the 2D viewer: PNG, JPG/JPEG, TGA, TIFF/TIF, BMP, EXR.


Keyboard Shortcuts

ContextKeyAction
Asset Name inputEnterRun validation
Project Name inputEnterConfirm project creation
Tag Value inputEnterAdd tag value
License Key inputEnterActivate license
All confirm dialogsEscapeCancel / close
Preset Editor tips—Toggled globally via Settings > Show Tips

License Activation

FT1F requires an active license to run. Licenses are managed via Polar.sh and tied to your device using a hardware fingerprint.

Activation

  1. Launch the app. The license gate appears.
  2. Enter your key (XXXX-XXXX-XXXX-XXXX) and click Activate.
  3. On success, the app loads. Your license is saved encrypted to disk.

Validation

Each time the app starts, your stored license is validated silently. If validation fails (e.g., the key was revoked), the license gate reappears.

Deactivation

Go to Settings > License and click Deactivate. This removes the license from your device and frees the activation slot so you can use the key on another machine. The app restarts immediately after deactivation.

License Tiers

TierDescription
indieIndividual license.
proProfessional license with expanded limits.
studioTeam/studio license.

Error Messages

ErrorCause
Invalid license keyThe key does not exist or was entered incorrectly.
Activation limit reachedAll activation slots for this key are in use. Deactivate on another device first.
Network errorCould not reach the license server. Check your internet connection.