obsidian-basesObsidian Bases Kepano
kepano/obsidian-skills
Obsidian Bases.
Установка
npx -y skills add kepano/obsidian-skills --skill obsidian-bases --agent claude-codeObsidian Bases
Создание и редактирование файлов Obsidian Bases (.base): представления, фильтры, формулы, сводки. Используйте при работе с .base файлами, создании табличных/карточных представлений заметок.
Рабочий процесс
- Создать
.baseфайл в хранилище с корректным YAML - Определить область через
filters(по тегу, папке, свойству, дате) - Добавить формулы в секцию
formulas(опционально) - Настроить представления:
table,cards,list,map - Проверить: валидный YAML, все referenced свойства и формулы существуют
- Открыть в Obsidian для подтверждения корректного рендеринга
Схема файла
# Глобальные фильтры применяются ко ВСЕМ представлениям
filters:
and:
- 'status == "active"'
- not:
- 'file.hasTag("archived")'
# Формулы — вычисляемые свойства
formulas:
formula_name: 'expression'
# Отображаемые имена и настройки свойств
properties:
property_name:
displayName: "Отображаемое имя"
formula.formula_name:
displayName: "Имя формулы"
# Кастомные сводные формулы
summaries:
custom_summary_name: 'values.mean().round(3)'
# Одно или несколько представлений
views:
- type: table | cards | list | map
name: "Имя представления"
limit: 10
groupBy:
property: property_name
direction: ASC | DESC
filters:
and:
- 'status == "active"'
order:
- file.name
- property_name
- formula.formula_name
summaries:
property_name: Average
Синтаксис фильтров
# Одиночный фильтр
filters: 'status == "done"'
# AND — все условия должны быть истинны
filters:
and:
- 'status == "done"'
- 'priority > 3'
# OR — любое условие может быть истинным
filters:
or:
- 'file.hasTag("book")'
- 'file.hasTag("article")'
# NOT — исключить совпадающие элементы
filters:
not:
- 'file.hasTag("archived")'
# Вложенные фильтры
filters:
or:
- file.hasTag("tag")
- and:
- file.hasTag("book")
- file.hasLink("Textbook")
Операторы фильтров
| Оператор | Описание |
|---|---|
== | равно |
!= | не равно |
>, <, >=, <= | сравнение |
&&, ||, ! | логические операторы |
Свойства
Три типа свойств:
- Свойства заметки — из frontmatter:
note.authorили простоauthor - Свойства файла — метаданные:
file.name,file.mtimeи др. - Формулы — вычисляемые значения:
formula.my_formula
Ссылка на файловые свойства
| Свойство | Тип | Описание |
|---|---|---|
file.name | String | Имя файла |
file.basename | String | Имя без расширения |
file.path | String | Полный путь |
file.folder | String | Путь к папке |
file.size | Number | Размер в байтах |
file.ctime | Date | Время создания |
file.mtime | Date | Время изменения |
file.tags | List | Все теги файла |
file.links | List | Внутренние ссылки |
file.backlinks | List | Ссылки на этот файл |
Синтаксис формул
formulas:
# Простая арифметика
total: "price * quantity"
# Условная логика
status_icon: 'if(done, "✅", "⏳")'
# Форматирование строк
formatted_price: 'if(price, price.toFixed(2) + " руб.")'
# Форматирование дат
created: 'file.ctime.format("YYYY-MM-DD")'
# Дней с момента создания (.days для Duration)
days_old: '(now() - file.ctime).days'
# Дней до дедлайна
days_until_due: 'if(due_date, (date(due_date) - today()).days, "")'
Ключевые функции
| Функция | Описание |
|---|---|
date(string) | Парсит строку в дату |
now() | Текущие дата и время |
today() | Текущая дата (время 00:00:00) |
if(cond, true, false?) | Условное выражение |
duration(string) | Парсит строку длительности |
file(path) | Получить объект файла |
link(path, display?) | Создать ссылку |
Тип Duration
Вычитание двух дат возвращает Duration, не число.
# ПРАВИЛЬНО — доступ к .days, затем числовые функции
"(date(due_date) - today()).days"
"(now() - file.ctime).days.round(0)"
# НЕПРАВИЛЬНО — Duration не поддерживает .round() напрямую
# "(now() - file.ctime).round(0)" ← ошибка
Типы представлений
# Таблица
views:
- type: table
name: "Мои задачи"
order: [file.name, status, due_date]
summaries: {price: Sum}
# Карточки
views:
- type: cards
name: "Галерея"
order: [file.name, cover_image, description]
# Список
views:
- type: list
name: "Простой список"
order: [file.name, status]
Встраивание
![[MyBase.base]]
![[MyBase.base#Имя представления]]
Правила кавычек YAML
- Одинарные кавычки для формул с двойными кавычками внутри:
'if(done, "Yes", "No")' - Двойные кавычки для простых строк:
"Имя представления"
Устранение неполадок
Синтаксические ошибки YAML
# НЕПРАВИЛЬНО — двоеточие в неквотированной строке
displayName: Status: Active
# ПРАВИЛЬНО
displayName: "Status: Active"
Частые ошибки формул
# НЕПРАВИЛЬНО — Duration не число
"(now() - file.ctime).round(0)"
# ПРАВИЛЬНО — сначала .days, потом round
"(now() - file.ctime).days.round(0)"
# НЕПРАВИЛЬНО — свойство может отсутствовать
"(date(due_date) - today()).days"
# ПРАВИЛЬНО — защита через if()
'if(due_date, (date(due_date) - today()).days, "")'
Готовые примеры
Трекер задач
filters:
and:
- file.hasTag("task")
- 'file.ext == "md"'
formulas:
days_until_due: 'if(due, (date(due) - today()).days, "")'
is_overdue: 'if(due, date(due) < today() && status != "done", false)'
priority_label: 'if(priority == 1, "🔴 High", if(priority == 2, "🟡 Medium", "🟢 Low"))'
views:
- type: table
name: "Активные задачи"
filters:
and: ['status != "done"']
order: [file.name, status, formula.priority_label, due, formula.days_until_due]
groupBy: {property: status, direction: ASC}
Список чтения
filters:
or:
- file.hasTag("book")
- file.hasTag("article")
formulas:
reading_time: 'if(pages, (pages * 2).toString() + " min", "")'
status_icon: 'if(status == "reading", "📖", if(status == "done", "✅", "📚"))'
views:
- type: cards
name: "Библиотека"
order: [cover, file.name, author, formula.status_icon]
Из того же репозитория
obsidian-markdown — markdown для Obsidian
kepano/obsidian-skills
Создаёт правильный Obsidian-flavored markdown: wikilinks с отображаемым текстом, встроенные заметки, backlinks и теги — всё что стандартный markdown не поддерживает.
obsidian-cli — Obsidian CLI Kepano
kepano/obsidian-skills
Obsidian CLI.
json-canvas — JSON Canvas Kepano Obsidian
kepano/obsidian-skills
JSON Canvas.
defuddle — Defuddle Obsidian очистка контекста
kepano/obsidian-skills
Defuddle для очистки контекста Obsidian.
