{% extends "base.html" %} {% import '_ui.html' as ui %} {% block title %}{{ friendly_name }} - OS and Packages{% endblock %} {# OS and Packages tab. Each list is a whose rows are drawn as one line plus an expandable body, because static/app.js removes a row with .remove-row by its closest and renumbers .order-num in the tbody. Edits are staged in the page; the save bar's Review and save posts only the sections that changed (views/images.py os_preview / os_save). #} {% block extra_head %} {% endblock %} {% block content %} {% set header_actions %} {% if last_save %} {% else %} Undo last save: nothing saved from this page yet {% endif %} {% endset %} {% set header_subtitle = 'Deploy/Control' %} {% include "_image_header.html" %}

What PESetup puts on the disk besides drivers: the Windows image from OperatingSystem.json, then the offline servicing packages from packages.json. Edits are staged until Review and save, which shows the exact diff of every file first.

{# ==================== Operating system ==================== #}

Operating system

{{ ui.chip(oses | length, 'neutral') }} OperatingSystem.json
{% for r in oses %} {% set osv = r.osv %} {% set idx = osv.wimindex if osv.wimindex is defined else (r.entry.wimindex if r.entry.wimindex is defined else '-') %} {% set size_differs = osv.wim and osv.wim.size and r.wim.exists and osv.wim.size != r.wim.size %} {% endfor %}
{{ loop.index }} {{ osv.productName or osv.marketingName or 'Windows' }} {{ osv.versionNumber }} {{ osv.id }} {% if osv.isActive %}{{ ui.chip('Active', 'ok') }}{% else %}{{ ui.chip('Inactive', 'off') }}{% endif %} {% if os_selection is not none and osv.id | string == os_selection | string %}{{ ui.chip('Selected', 'w11', 'user_selections.json OperatingSystemSelection') }}{% endif %} {% if r.wim.exists %}{{ ui.chip('On disk', 'ok') }}{% else %}{{ ui.chip('Not on disk', 'err') }}{% endif %}{% if size_differs %}{{ ui.chip('Size differs', 'warn') }}{% endif %} {{ r.dest or '(no DestinationDir)' }}
Windows
{{ osv.productName or '-' }}{% if osv.marketingName %} ({{ osv.marketingName }}){% endif %}
Version
{{ osv.versionNumber or '-' }}{% if osv.buildNumber %}, build {{ osv.buildNumber }}{% endif %}, osId {{ osv.id }}
DestinationDir
{{ r.dest or '(no DestinationDir)' }}
install.wim
{% if r.wim.exists %}On disk, {{ r.wim.size | filesizeformat }}, modified {{ r.wim.mtime | local_dt }}{% else %}install.wim not on disk{% endif %}, image index {{ idx }}
{% if size_differs %}
Size
Differs from the JSON: OperatingSystem.json says {{ osv.wim.size | filesizeformat }} ({{ osv.wim.size }} bytes)
{% endif %}
{% call ui.more('operating system ' ~ loop.index) %}{% endcall %}
No operating system entries. PESetup has nothing to apply.
PESetup applies the image index of install.wim from the entry's folder (*destinationdir* is this image's share). {% if os_selection is not none %}The entry marked Selected is the one the media was built for (OperatingSystemSelection = {{ os_selection }}).{% endif %}
{# ==================== Packages ==================== #}

Packages

{{ ui.chip(packages | length, 'neutral') }} packages.json
{% for r in packages %} {% set p = r.entry %} {% set fname = p.fileName or p.FileName or '' %} {% set pdest = p.destinationDir or p.DestinationDir or '' %} {% endfor %}
{{ loop.index }} {{ p.name or '(no name)' }} {{ fname }} {{ p.osId }} {% if p.enabled %}{{ ui.chip('Enabled', 'ok') }}{% else %}{{ ui.chip('Disabled', 'off') }}{% endif %} {% if r.file.exists %}{{ ui.chip('On disk', 'ok') }}{% else %}{{ ui.chip('Missing', 'err') }}{% endif %}
{% if p.comment %}
Comment
{{ p.comment }}
{% endif %}
File
{{ fname or '-' }}
DestinationDir
{{ pdest or '-' }}
On disk
{% if r.file.exists %}Yes, {{ r.file.size | filesizeformat }}{% else %}No: the file is not in that folder{% endif %}
osId
{{ p.osId }}
{% call ui.more('package ' ~ loop.index) %}{% endcall %}
No packages configured.
A package is applied when it is enabled and its osId list contains the OS being installed. Removing an entry here leaves the file on disk.
{# ==================== Hardware models (user_selections.json) ==================== #} {% set n_none = models | selectattr('fam.entries', 'equalto', 0) | list | length %}

Hardware models

{{ ui.chip(models | length, 'neutral') }} {% if n_none %}{{ ui.chip(n_none ~ ' with no driver entry', 'warn') }}{% endif %} Media build selection, not used while imaging

Media Creator Lite saved this list when the media was built: the driver families (Family ID) whose packs it downloaded, and the OS it built for. scripts/Download-Drivers.ps1 and Upload-Image.ps1 read it to choose which driver packs and OS to fetch and upload.

PESetup never reads this file: at imaging it matches the PC's WMI model against HardwareDriver.json alone, so adding a model here does not give a PC drivers. Driver entries counts map entries with the same family.

Tools/user_selections.json
{% for r in models %} {% endfor %}
{{ loop.index }} {% if r.fam.entries %} {{ ui.chip(r.fam.entries ~ ' entr' ~ ('ies' if r.fam.entries != 1 else 'y'), 'ok' if r.fam.on_disk == r.fam.entries else 'warn') }} {{ r.fam.on_disk }} zip{{ 's' if r.fam.on_disk != 1 }} on disk {% else %} {{ ui.chip('None', 'off') }} {% endif %}
{% if has_selections %}No hardware models selected.{% else %}No user_selections.json for this image.{% endif %}
Unsaved changes
{% endblock %} {% block extra_scripts %} {% endblock %}