Creates professional art cataloging sheets (fichas de catalogacao) for artworks from inventory spreadsheets or website URLs. Use this skill whenever the user wants to create fichas, catalog sheets, or inventory cards for obras de arte, quadros, pinturas, esculturas, gravuras, fotografias artisticas, or any fine art piece. Also triggers on: 'inventario de obras', 'catalogo de arte', 'ficha tecnica de obra', 'catalogar acervo', 'documentar colecao', 'ficha de arte', 'art inventory', 'artwork documentation', 'cataloging sheet'. The skill reads artwork data from spreadsheets (.xlsx, .csv, Google Sheets) or website URLs (gallery pages, artist portfolios, auction listings, exhibition pages), researches each artist online, and generates one DOCX file per artwork with curatorial analysis, conservation notes, and lighting/installation guidelines — ready for architecture and interior design projects.
Generate professional artwork cataloging sheets from inventory data or website URLs. Each ficha documents an artwork with identification, physical description, curatorial analysis, and installation/lighting guidelines for architecture and interior design projects. Input can be a spreadsheet, a Google Sheets link, or a website URL (gallery, artist portfolio, auction house, exhibition page).
This skill is designed for art consultants, interior designers, architects, and collectors who need to document artworks in a structured, professional format. It's particularly useful when:
1. READ DATA → Parse spreadsheet OR scrape website URL for artwork inventory
2. FIND EXAMPLES → Look for existing fichas as format reference (Google Drive, uploads)
3. RESEARCH → For each artist: search web + Drive for bio, exhibitions, curatorial texts
4. GENERATE → Create one DOCX per artwork using the ficha template
5. DELIVER → Save all files to outputs folder
The input can be a spreadsheet (.xlsx, .csv, Google Sheets link) or a website URL (gallery, artist portfolio, auction listing, exhibition page).
Read it with pandas:
import pandas as pd
df = pd.read_excel('file.xlsx', sheet_name=None) # read all sheets
If the user provides a Google Sheets link, try these approaches in order:
google_drive_fetch MCP if available (note: won't work for Sheets, only Docs)Claude in Chrome MCP and extract with JavaScript or get_page_text/htmlview URL and extract table dataWhen the user provides a URL instead of a spreadsheet, extract artwork data from the web page:
Extraction strategy (try in order):
Claude in Chrome MCP: navigate to the URL, then use get_page_text or javascript_tool to extract structured dataWebFetch to retrieve the page HTML, then parse it with Python (BeautifulSoup)Common website patterns:
| Site type | What to look for | Extraction approach |
|---|---|---|
| Gallery portfolio (e.g., luismaluf.com) | Artist pages with artwork grids/lists | Navigate to artist page, extract each artwork's title, medium, dimensions, image URL |
| Auction house (e.g., Christie's, Sotheby's) | Lot listings with details | Extract lot number, artist, title, estimate, medium, dimensions from each listing |
| Artist personal site | Portfolio/works section | Look for artwork cards/entries with title, year, technique, dimensions |
| Exhibition page | Checklist or artwork list | Extract artist names, titles, media from the exhibition checklist |
| Online catalog (e.g., Artsy, Saatchi) | Artwork detail pages | Navigate to each artwork page and extract structured fields |
Extraction with Chrome MCP:
1. Navigate to URL with `navigate` tool
2. Use `get_page_text` to get full page text
3. If page has artwork listings, use `javascript_tool` to extract structured data:
- document.querySelectorAll('.artwork-item') or similar selectors
- Extract: title, artist, medium, dimensions, image URL, price
4. If page has sub-pages for individual artworks, collect those URLs first,
then visit each one to extract detailed information
5. For paginated sites, navigate through pages collecting data from each
Extraction with WebFetch + Python:
# After fetching HTML content
from bs4 import BeautifulSoup
soup = BeautifulSoup(html_content, 'html.parser')
# Look for common artwork containers
artworks = []
for item in soup.select('.artwork, .work-item, .portfolio-item, article'):
artwork = {
'title': item.select_one('h2, h3, .title')?.text.strip(),
'artist': item.select_one('.artist, .author')?.text.strip(),
'medium': item.select_one('.medium, .technique')?.text.strip(),
'dimensions': item.select_one('.dimensions, .size')?.text.strip(),
'image': item.select_one('img')?.get('src'),
}
artworks.append(artwork)
Key considerations for URL input:
Expected columns (names may vary — match flexibly):
| Concept | Common column names |
|---|---|
| Item number | ITEM, #, Numero |
| Room/Location | AMBIENTE, Local, Room |
| Artwork title | OBRA, Titulo, Title, Nome |
| Description | DESCRICAO, Descricao, Description |
| Material/Technique | MATERIAL, Tecnica, Technique, Medium |
| Dimensions | DIMENSOES, Dimensoes, Dimensions |
| Notes | OBSERVACOES, Obs, Notes |
| Photo links | LINK, Fotos, Photos, Links |
If columns don't match, infer from content or ask the user.
The user may point to existing fichas as format reference. Check:
google_drive_search for documents containing "Ficha" or "Catalogacao")Read the examples fully with google_drive_fetch and extract the template structure: section headings, field names, formatting style, and tone. Adapt the output to match what the user already has.
If no examples are provided, use the default template in Step 4.
This step is important — it transforms a bare inventory row into a rich, professional document. When the input is a URL, some research may already be done during extraction (the source page itself is rich context), but always supplement with additional searches. For each unique artist in the dataset:
Web search:
"[artist name]" artista or "[artist name]" artistGoogle Drive search (if MCP available):
What to gather:
Handling missing info: If research yields little, work with what the spreadsheet provides. Note "Informacao nao disponivel" for fields you can't fill rather than inventing content.
Use the docx skill (read its SKILL.md first) to create professional Word documents. Install docx-js locally if needed:
mkdir -p project && cd project && npm init -y && npm install docx
Each ficha follows this structure (adapt if user provided examples with different sections):
FICHA DE CATALOGACAO DE OBRA DE ARTE
Inventario Consolidado - [Project Name]
═══════════════════════════════════════
1. IDENTIFICACAO DA OBRA
• Artista: [name (birthplace, year)]
• Titulo: "[title]"
• Serie: [if applicable]
• Tecnica: [medium/technique]
• Dimensoes: [H x W x D cm]
• Edicao: [if applicable, e.g., 59/100]
• Proveniencia: [gallery, auction, gift]
• Item no Inventario: [number]
• Ambiente Sugerido: [room]
2. DESCRICAO FISICA E CONSERVACAO
• Moldura: [frame description or "Sem moldura"]
• Protecao: [glass, acrylic, none]
• Estado de Conservacao: [condition + care notes]
• Composicao: [visual description of the artwork]
3. ANALISE CURATORIAL E CONTEXTO
[2-3 paragraphs about the artist's practice, this work's
significance, exhibition history, institutional presence.
Include quotes from curatorial texts if available.]
4. DIRETRIZES DE INSTALACAO E PROJETO LUMINOTECNICO
Posicionamento Sugerido: [placement advice for the room]
Iluminacao:
• Tipo de luminaria recomendada
• Temperatura de cor (geralmente 2700K-3000K)
• Tecnologia (LED sem UV/calor)
• Angulo de incidencia (tipicamente 30 graus)
• Notas especiais (reflexos em vidro, texturas, etc.)
5. REFERENCIAS FOTOGRAFICAS E FONTES
• [photo links]
• [gallery links]
• [curatorial text references]
────────────────────────────────────
Documento gerado para fins de inventario patrimonial
e especificacao tecnica de design.
The docx output should feel professional and clean:
LevelFormat.BULLET (never unicode bullets)const { Document, Packer, Paragraph, TextRun, HeadingLevel,
AlignmentType, BorderStyle, LevelFormat, ExternalHyperlink } = require('docx');
// Bullet config (one per document, reference by name)
const bulletConfig = {
reference: "bullets",
levels: [{
level: 0, format: LevelFormat.BULLET, text: "\u2022",
alignment: AlignmentType.LEFT,
style: { paragraph: { indent: { left: 720, hanging: 360 } } }
}]
};
// Section heading with blue bottom border
function sectionHeading(text) {
return new Paragraph({
heading: HeadingLevel.HEADING_2,
spacing: { before: 300, after: 150 },
border: { bottom: { style: BorderStyle.SINGLE, size: 6, color: "2E75B6", space: 8 } },
children: [new TextRun({ text, font: "Arial", size: 26, bold: true, color: "2E75B6" })]
});
}
// Labeled bullet item (bold label + normal value)
function bulletItem(label, value) {
return new Paragraph({
numbering: { reference: "bullets", level: 0 },
spacing: { after: 60 },
children: [
new TextRun({ text: `${label}: `, bold: true, font: "Arial", size: 22 }),
new TextRun({ text: value, font: "Arial", size: 22 })
]
});
}
After generating, validate each file:
python <docx-skill-path>/scripts/office/validate.py output.docx
Most artworks in residential/commercial interiors follow these principles:
| Artwork type | Light temp | Notes |
|---|---|---|
| Oil/acrylic on canvas | 2700-3000K | Warm light enriches pigments |
| Works on paper | 2700K | Minimize UV; lower lux levels |
| Photography | 2700-3000K | Watch for reflections on glass |
| Textiles/mixed media | 2700K | Rasant light reveals texture |
| Sculpture | 3000K | Multiple angles for dimension |
General rules:
Save all DOCX files to the outputs folder with clear naming:
Ficha_01_[Title_Short]_[Artist_LastName].docx
Ficha_02_[Title_Short]_[Artist_LastName].docx
...
Present links to the user using computer:// paths. If there are many files, also mention total count and suggest the user upload them to Google Drive for conversion to Google Docs.
The user may ask to revise a specific ficha with additional information (PDFs, gallery links, curatorial texts). When this happens:
javascript_tool or get_page_text instead of WebFetch. If content still can't be extracted, ask the user to provide the data in another format.