AI Assisted Portfolio Curation Workflow | Case Study

This is the portfolio follow-up system to Amir2000 Image Automation | Case Study. It uses existing AI quality values to surface strong candidates, then finalize selection manually and publish a curated portfolio page plus downloadable PDF.

PySide6 desktop picker MySQL + FTP PHP admin + print workflow Human final curation
Portfolio Picker V2 case-study main image
Figure 1: Portfolio Picker V2 visual identity.

0. Section Map (What Each Point Means)

1. Executive Summary And Scope Boundary

The portfolio workflow curates from a large existing archive into a tight public selection. AI assists candidate discovery and humans make final artistic decisions.

Boundary clarification: this system does not generate metadata. Metadata generation happens in the automation pipeline before this stage.

2. Problem Context

Manual portfolio refresh does not scale well when the archive is large. Reviewing everything by hand every time is slow and inconsistent.

3. Architecture And Connected Systems

This case study is system 2 in a two-system chain:

System 2 components:

3A. System Diagram

The diagram shows the production chain from upstream automation to portfolio curation and final web delivery quality.

Amir2000 Image Automation Metadata and AI scores photos_info_revamp Portfolio Curation Workflow Picker + PHP admin + print portfolio_v2 with manual selection SEO and Performance Engineering WebP delivery and page quality Measured PageSpeed outcomes
Figure 2: End-to-end link between the three case studies and their runtime responsibilities.

4. Portfolio Picker V2 Logic (Code-Level Workflow)

Picker behavior is explicit and transactional. For each selected image it creates exactly five versions and executes a rollback-safe pipeline.

Portfolio Picker V2 main interface with filters, preview, metadata panel, and action buttons
Figure 3: Picker UI with filters, candidate list, preview, metadata panel, and step log.
Admin reorder collection grid showing current portfolio order and save controls
Figure 4: Current portfolio collection grid used for drag reorder.

5. PHP Admin And Print Workflow (Code-Level)

Admin runtime (portfolio_admin.php):

Portfolio admin interface showing filters and editable portfolio cards
Figure 5: Admin grid for show and hide toggles, metadata readout, and caption edits.
Portfolio admin drag reorder section with save order and refresh preview controls
Figure 6: Drag reorder section that controls Show_Order for visible rows.

Public print/runtime (portfolio_print.php):

Public portfolio print page grid with open PDF button and EXIF overlays
Figure 7: Public portfolio print layout used for browsing and PDF viewing.

6. Table Schema: portfolio_v2

The table below reflects the active schema used by this workflow and labels each column by runtime ownership/origin.

Column Type Primary Origin Notes
id int(11) Portfolio table Primary key (auto-increment).
revamp_id varchar(11) photos_info_revamp.id ** / special token *** Regular picker rows inherit source id from photos_info_revamp and Special Add rows use generated 1_### tokens.
Folder varchar(255) Picker-managed Set to portfolio_v2 during add flow.
File_Name varchar(300) Source + normalization Stable JPG filename used as identity key in picker upsert.
Path varchar(255) Picker-generated Public URL of watermarked web JPG in /pic/images/portfolio_v2/.
WebP_Path varchar(255) Picker-generated Public URL of generated WebP main image.
Thumb_Path varchar(255) Picker-generated Public URL of watermarked JPG thumbnail.
WebP_Thumb_Path varchar(255) Picker-generated Public URL of WebP thumbnail.
DateTime datetime photos_info_revamp ** / Special Add EXIF *** Regular picker rows inherit DateTime from photos_info_revamp and Special Add rows attempt EXIF extraction.
Camera varchar(25) photos_info_revamp ** / Special Add EXIF *** Camera model inherited from photos_info_revamp for regular rows and extracted from EXIF for Special Add rows.
Lens_model varchar(255) photos_info_revamp ** / Special Add EXIF *** Lens model inherited from photos_info_revamp for regular rows and extracted from EXIF for Special Add rows.
Width int(11) Picker-generated Saved from generated web JPG dimensions (display size).
Height int(11) Picker-generated Saved from generated web JPG dimensions (display size).
Exposure varchar(12) photos_info_revamp ** / Special Add EXIF *** Regular picker rows inherit exposure from photos_info_revamp and Special Add rows use EXIF extraction.
Aperture varchar(5) photos_info_revamp ** / Special Add EXIF *** Regular picker rows inherit aperture from photos_info_revamp and Special Add rows use EXIF extraction.
ISO int(11) photos_info_revamp ** / Special Add EXIF *** Regular picker rows inherit ISO from photos_info_revamp and Special Add rows use EXIF extraction.
Focal_length int(11) photos_info_revamp ** / Special Add EXIF *** Regular picker rows inherit focal length from photos_info_revamp and Special Add rows use EXIF extraction.
Keywords varchar(500) photos_info_revamp ** / Special Add dialog *** Regular picker rows inherit keywords from photos_info_revamp and Special Add rows use manual dialog values.
Caption varchar(300) photos_info_revamp ** / Special Add dialog *** / Admin edit Regular picker rows inherit caption from photos_info_revamp, Special Add rows use dialog values, and admin can edit later.
Location varchar(250) photos_info_revamp ** / Special Add dialog *** Regular picker rows inherit location from photos_info_revamp and Special Add rows use manual dialog values.
Subject varchar(200) Special Add dialog *** / optional manual Usually empty for regular rows and mainly populated in Special Add flow.
nima_score double photos_info_revamp ** / Special Add scoring *** Regular picker rows inherit score from photos_info_revamp and Special Add rows are scored before insert.
blur_score double photos_info_revamp ** / Special Add scoring *** Regular picker rows inherit score from photos_info_revamp and Special Add rows are scored before insert.
brightness_score double photos_info_revamp ** / Special Add scoring *** Regular picker rows inherit score from photos_info_revamp and Special Add rows are scored before insert.
contrast_score double photos_info_revamp ** / Special Add scoring *** Regular picker rows inherit score from photos_info_revamp and Special Add rows are scored before insert.
brisque_score double photos_info_revamp ** / Special Add scoring *** Regular picker rows inherit score from photos_info_revamp and Special Add rows are scored before insert.
clip_aesthetic_score double photos_info_revamp ** / Special Add scoring *** Regular picker rows inherit score from photos_info_revamp and Special Add rows are scored before insert.
sort_order int(11) Legacy/unused in current picker/admin Protected from picker updates and admin uses Show_Order instead.
Original_File_Name varchar(300) photos_info_revamp ** / source file *** Regular picker rows inherit original file name from photos_info_revamp and Special Add rows use selected source file name.
QR double photos_info_revamp ** / Special Add scoring *** Primary ranking signal inherited from photos_info_revamp for regular rows and computed for Special Add rows.
QC_Status varchar(25) photos_info_revamp ** / Special Add scoring *** Quality category inherited from photos_info_revamp for regular rows and computed for Special Add rows.
Review_Status varchar(25) Picker-managed Set to Uploaded during successful add flow.
Picked int(11) Workflow state field Reserved/protected in picker updates and defaults to 0.
Show_Portfolio int(11) PHP admin-managed Visibility toggle for live portfolio rendering.
Show_Order int(11) PHP admin-managed Manual ordering used by print/public page flow.

Legend: ** field value is inherited from photos_info_revamp for regular picker rows. *** field value is populated in the Special Add flow from EXIF, manual dialog input, or scoring.

Table constraints in current dump include a primary key on id and unique key (revamp_id, File_Name).

7. Special Cases And Edge Handling

8. Operational Outcomes And Tradeoffs

Tradeoff: human review takes more time per batch and it keeps portfolio quality and balance under manual control.

9. Key Takeaway

This workflow is a practical hybrid curation system: AI assists discovery and ranking, while human selection defines the final portfolio narrative.

© 2026 Amir Darzi
Privacy Policy  |  Photography site | W3C-Valid  |  Cookie settings