Reproducible benchmark · 2026-09-03

Image-to-PBR benchmark: PLAYTEX AI vs GenPBR 2.7

This test does not establish that either product is better. It publishes the raw outputs from one three-crop, default-settings run. Border-pixel deltas and encoded metallic values are descriptive diagnostics, not texture-quality verdicts. The two timing sets are not comparable. Anonymous access and output-channel counts describe product scope, not output quality.

Tested by justhim on . Versioned edition: 2026-09-03.

Download input-photo set (.zip)Download full results (.zip)Measurements (.json)Measurements (.csv)Exact settings (.json)Citation fileSHA-256 manifest

Three image-to-PBR benchmark crops with PLAYTEX AI and GenPBR normal-map outputs
Three controlled crops from one first-party phone photo. This limited sample is meant to be inspected, repeated, and extended.

Results at a glance

Measured values and the conclusions they support
QuestionPLAYTEX AIGenPBR 2.7Supported interpretation
Anonymous 512px generationFree plan can generate/preview, but repository entitlement contract disables download.$0 public generator, no account used; free-output license is non-commercial with attribution.Access-policy difference only; not texture quality
Shared-map opposing-border pixel delta17.172%14.560%Descriptive statistic; no seam-quality or product verdict
Mean encoded metallic value on wood19.712%35.342%Descriptive statistic; no calibrated accuracy verdict
Observed processing timer504.127 ms median, core only466 ms median, browser result updateNot comparable; no faster-product conclusion
Output channels at tested defaults7: albedo, normal, metallic, emission, roughness, height, AO5 derived maps: normal, metallic, roughness, height, AOOutput-scope difference; channel count is not map quality
Commercial entry listed on test date$9/month Starter; up to 2048px PBR maps and engine packages in the repository entitlement contract.$9.99/month Starter; commercial rights listed on official pricing page.Not like-for-like; licenses and bundles differ

The table reports observations without ranking the products. A lower opposing-border delta can come from flatter output and does not prove a better tile. The processing timers use different boundaries and cannot be used to call either product faster.

Neutral wood crop

Lower-glare section used as the baseline wood case.

Neutral wood crop source, PLAYTEX AI normal map, and GenPBR normal map side by side
Same 512×512 crop and default settings. Full-resolution files are linked below.
Descriptive opposing-border pixel delta by shared map; this is not a seam or quality score
MapPLAYTEX AIGenPBR
normal23.737%5.124%
metallic6.042%13.487%
roughness4.946%21.278%
height18.378%14.298%
ao18.315%7.227%

Wood metallic output: PLAYTEX AI mean 17.181% with 99.733% of pixels above 0.10; GenPBR mean 34.400% with 99.999% above 0.10.

Source-to-height luminance correlation: PLAYTEX AI 0.9999; GenPBR 0.8611. This describes carryover; it is not a correctness score.

3 by 3 repeat of the Neutral wood crop source crop
Source repeat
3 by 3 repeat of the PLAYTEX AI normal map for Neutral wood crop
PLAYTEX AI normal repeat
3 by 3 repeat of the GenPBR normal map for Neutral wood crop
GenPBR normal repeat

Open every result for this case

Glare hotspot crop

Tests whether photographed lighting is carried into derived maps.

Glare hotspot crop source, PLAYTEX AI normal map, and GenPBR normal map side by side
Same 512×512 crop and default settings. Full-resolution files are linked below.
Descriptive opposing-border pixel delta by shared map; this is not a seam or quality score
MapPLAYTEX AIGenPBR
normal24.579%5.845%
metallic3.995%9.113%
roughness4.670%26.781%
height12.675%8.990%
ao11.320%8.188%

Wood metallic output: PLAYTEX AI mean 22.367% with 99.984% of pixels above 0.10; GenPBR mean 44.503% with 100.000% above 0.10.

Source-to-height luminance correlation: PLAYTEX AI 0.9999; GenPBR 0.9190. This describes carryover; it is not a correctness score.

3 by 3 repeat of the Glare hotspot crop source crop
Source repeat
3 by 3 repeat of the PLAYTEX AI normal map for Glare hotspot crop
PLAYTEX AI normal repeat
3 by 3 repeat of the GenPBR normal map for Glare hotspot crop
GenPBR normal repeat

Open every result for this case

Dark edge and trim crop

Tests strong boundary contrast and repeat-edge behavior.

Dark edge and trim crop source, PLAYTEX AI normal map, and GenPBR normal map side by side
Same 512×512 crop and default settings. Full-resolution files are linked below.
Descriptive opposing-border pixel delta by shared map; this is not a seam or quality score
MapPLAYTEX AIGenPBR
normal19.000%4.037%
metallic8.138%31.732%
roughness13.782%18.769%
height44.127%35.709%
ao43.883%7.819%

Wood metallic output: PLAYTEX AI mean 19.588% with 99.732% of pixels above 0.10; GenPBR mean 27.123% with 68.735% above 0.10.

Source-to-height luminance correlation: PLAYTEX AI 1.0000; GenPBR 0.9821. This describes carryover; it is not a correctness score.

3 by 3 repeat of the Dark edge and trim crop source crop
Source repeat
3 by 3 repeat of the PLAYTEX AI normal map for Dark edge and trim crop
PLAYTEX AI normal repeat
3 by 3 repeat of the GenPBR normal map for Dark edge and trim crop
GenPBR normal repeat

Open every result for this case

Methodology

  1. Crop three 512×512 PNG inputs from the same first-party 1080×1440 phone photo. Do not retouch the crops.
  2. Run PLAYTEX AI reference build 2ae3dbaf971b21895a84697b5775fa0509cfedf5 with material class dielectric, preset wood, and the checked-in defaults.
  3. Run the public GenPBR 2.7 anonymous generator in Canvas CPU mode with every visible control left at its default.
  4. Save the unedited PNG outputs. Regenerate the neutral and glare normals and compare SHA-256 hashes.
  5. Measure opposite-edge RGB delta, decoded normal length, metallic leakage for a dielectric subject, and source/height luminance correlation.

Read the full method, settings, hardware, metric definitions, and limitations.

Exact machine-readable settings
{
  "benchmark": {
    "edition": "2026-09-03",
    "tester": "justhim",
    "testedAt": "2026-09-03T09:00:00-05:00",
    "sourcePhoto": "/images/image-to-texture/phone-wood-source.webp",
    "sourcePhotoSha256": "eb05ba5741f461bb23dd4d0306e42113cb2390cdcc935d03216db1d3d411326f",
    "inputContract": "Three 512×512 PNG crops from one first-party phone photo; no retouching after crop.",
    "machine": {
      "operatingSystem": "Microsoft Windows 11 Home build 26200",
      "cpu": "AMD Ryzen 5 5600X 6-Core Processor (12 logical processors)",
      "memory": "31.9 GB",
      "gpu": "NVIDIA GeForce RTX 5070",
      "node": "v24.13.1"
    }
  },
  "products": {
    "playtex": {
      "name": "PLAYTEX AI PBR Map Generator",
      "version": "reference build 2ae3dbaf971b21895a84697b5775fa0509cfedf5",
      "committedAt": "2026-09-03T04:57:47-05:00",
      "implementationFiles": {
        "src/constants/defaults.ts": "b53b66cbdfd47d922f17c7b796a151255b9926a88cb2cac79aafd069fd0bcee7",
        "src/lib/imageProcessing.ts": "0871f380b6d76d92dc56990a2fb9612be872f58832076ac98854a5921a5e4a1f",
        "src/lib/materialHeuristics.ts": "3b85034a18e1f04e4e65f8c48c6aa1092320ef82032e9ed11f77cb59d78547f1",
        "src/lib/pbrCalibration.ts": "61b0b46705e6a1a68b3ddfb259df54eee02ea580ac43a0655cbfa5cfe262251a",
        "src/lib/pbrGenerationCore.ts": "96aa5cfbeba5af7d22bc2e9d0432b5b717d350b6dcb6152a01f3957d178c9349",
        "src/lib/processingSettings.ts": "5f3f6b6e7727abfc1fd0fcfc0f300479a956e528d4e9b3ed8176d74d26b93f6a"
      },
      "execution": "Direct synchronous reference-core call using the repository implementation.",
      "inputResolution": "512×512",
      "outputResolution": "512×512",
      "materialClass": "dielectric",
      "materialPreset": "wood",
      "requestedMaps": [
        "albedo",
        "normal",
        "metallic",
        "emission",
        "roughness",
        "height",
        "ao"
      ],
      "settings": {
        "albedo": {
          "brightness": 0,
          "contrast": 1,
          "saturation": 1,
          "hueShift": 0,
          "gamma": 1
        },
        "normal": {
          "strength": 5,
          "blur": 0,
          "detail": 1,
          "invertX": false,
          "invertY": false,
          "format": "opengl",
          "seamless": false,
          "edgeEmphasis": 0.5,
          "microDetailScale": 1,
          "heightToNormalInfluence": 0.3
        },
        "metallic": {
          "mode": "smart",
          "threshold": 128,
          "contrast": 1,
          "clampMin": 0,
          "clampMax": 255,
          "sourceChannel": "luminance"
        },
        "emission": {
          "threshold": 200,
          "mode": "solid",
          "color": "#ffffff",
          "gradientColors": [
            "#ff0000",
            "#ffff00",
            "#00ff00",
            "#00ffff",
            "#0000ff"
          ],
          "gradientIntensities": [
            1,
            1,
            1,
            1,
            1
          ],
          "intensity": 1,
          "glowRadius": 0,
          "sourceMode": "luminance",
          "softThreshold": 0.2,
          "falloffCurve": "smooth",
          "invertOutput": false,
          "colorMatch": false
        },
        "roughness": {
          "source": "luminance",
          "blackPoint": 0,
          "whitePoint": 255,
          "contrast": 1,
          "outputMode": "roughness",
          "clampMin": 0,
          "clampMax": 255,
          "invertOutput": false,
          "responseCurve": "linear"
        },
        "height": {
          "strength": 1,
          "blur": 0,
          "midpointBias": 0,
          "clampMin": 0,
          "clampMax": 255,
          "parallaxSafe": false
        },
        "ao": {
          "radius": 2,
          "intensity": 1,
          "edgeOcclusionBoost": false,
          "heightAwareAO": false
        },
        "global": {
          "seamAwareProcessing": false,
          "mapConsistencyLock": true,
          "powerOfTwoLock": false
        }
      },
      "repetitions": "One warm-up, then five measured generations per crop.",
      "deterministicAcrossMeasuredRuns": {
        "wood-neutral": true,
        "glare-hotspot": true,
        "dark-edge": true
      },
      "pricingAsOfTest": {
        "free": {
          "monthlyPriceUsd": 0,
          "download": false,
          "maxMapResolutionPx": 512,
          "licenseScope": "noncommercial_public"
        },
        "mapper": {
          "monthlyPriceUsd": 3,
          "download": true,
          "maxMapResolutionPx": 2048,
          "licenseScope": "personal"
        },
        "starter": {
          "monthlyPriceUsd": 9,
          "download": true,
          "maxMapResolutionPx": 2048,
          "enginePackageExport": true,
          "licenseScope": "standard_commercial"
        }
      },
      "exportFormats": [
        "PNG map files",
        "ZIP material set",
        "engine package on Starter+"
      ]
    },
    "genpbr": {
      "name": "GenPBR",
      "version": "2.7 (page header observed on test date)",
      "url": "https://genpbr.com/generate",
      "execution": "Public anonymous generator in the Codex in-app Chromium browser.",
      "renderingMode": "Canvas CPU • Universal",
      "inputResolution": "512×512",
      "outputResolution": "512×512",
      "maps": [
        "normal",
        "metallic",
        "roughness",
        "height",
        "ao"
      ],
      "settings": {
        "normalStrength": 5,
        "metallicIntensity": 0.8,
        "roughnessIntensity": 2,
        "aoIntensity": 2,
        "aoRadius": 12,
        "heightContrast": 1,
        "heightBrightness": 0,
        "invertHeight": false
      },
      "repetitions": "One captured generation per crop; glare and neutral normal maps were regenerated and SHA-256 matched the first capture.",
      "observedAnonymousPriceUsd": 0,
      "pricingAsOfTest": {
        "freeAccount": "$0; non-commercial use only; attribution required.",
        "starterMonthly": "$9.99/month; commercial rights listed."
      },
      "observedControls": [
        "Download All",
        "per-map download",
        "Regen"
      ],
      "documentedFormats": [
        "PNG",
        "ZIP archive",
        "MaterialX"
      ],
      "requiredFreeOutputAttribution": "Textures generated with GenPBR — genpbr.com",
      "pricingSource": "https://genpbr.com/pricing",
      "licensingSource": "https://genpbr.com/licensing"
    }
  }
}

Sources and attribution

Textures generated with GenPBR — genpbr.com