Files
karuo-ai/01_卡资(金)/金仓_存储备份/照片分类/create_albums_direct.py

143 lines
4.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
"""
直接创建相册 - 使用Shortcuts/osascript
卡若AI·卡资
"""
import json
import os
import subprocess
import time
OUTPUT_DIR = os.path.expanduser("~/Documents/个人/卡若AI/01_卡资/照片分类")
def load_classification():
with open(os.path.join(OUTPUT_DIR, "classification.json"), "r") as f:
return json.load(f)
def create_album_with_osascript(album_name):
"""用osascript创建空相册"""
script = f'''
tell application "Photos"
activate
delay 1
try
set albumExists to false
repeat with a in albums
if name of a is "{album_name}" then
set albumExists to true
exit repeat
end if
end repeat
if not albumExists then
make new album named "{album_name}"
return "created"
else
return "exists"
end if
on error errMsg
return "error: " & errMsg
end try
end tell
'''
try:
result = subprocess.run(
['osascript', '-e', script],
capture_output=True,
text=True,
timeout=30
)
return result.stdout.strip()
except subprocess.TimeoutExpired:
return "timeout"
except Exception as e:
return f"error: {e}"
def create_smart_albums_sql():
"""生成智能相册的SQL仅供参考不直接修改数据库"""
smart_albums = [
("📸 所有截图", "ZKINDSUBTYPE == 2"),
("🎬 所有视频", "ZKIND == 1"),
("⭐ 收藏照片", "ZFAVORITE == 1"),
("🤳 自拍照片", "ZORIGINALFILENAME LIKE '%faceu%' OR ZORIGINALFILENAME LIKE '%beauty%'"),
("📱 抖音素材", "ZORIGINALFILENAME LIKE '%v0%fg%' OR ZORIGINALFILENAME LIKE '%douyin%'"),
]
print("\n📋 建议创建的智能相册在照片App中手动创建:")
print("="*60)
for name, condition in smart_albums:
print(f" {name}")
print(f" 条件: {condition}")
print("="*60)
def main():
print("📊 卡若照片相册分类器")
print("="*60)
# 加载分类数据
data = load_classification()
# 输出分类统计
print("\n📁 分类统计:")
albums_to_create = []
for category, albums in data["categories"].items():
cat_total = sum(len(uuids) for uuids in albums.values())
print(f"\n{category}】共 {cat_total}")
for album_name, uuids in sorted(albums.items(), key=lambda x: -len(x[1])):
count = len(uuids)
if count >= 50: # 只创建50张以上的相册
albums_to_create.append((f"{category}-{album_name}", count))
print(f"{album_name}: {count}张 → 将创建相册")
else:
print(f" {album_name}: {count}")
# 年份相册
print(f"\n【年份回顾】")
for year_album, uuids in sorted(data["year_albums"].items()):
count = len(uuids)
albums_to_create.append((year_album, count))
print(f"{year_album}: {count}张 → 将创建相册")
print(f"\n{'='*60}")
print(f"📋 计划创建 {len(albums_to_create)} 个相册")
print(f"{'='*60}")
# 生成相册创建报告
report = {
"albums_to_create": [(name, count) for name, count in albums_to_create],
"total_albums": len(albums_to_create),
"instructions": [
"1. 打开「照片」应用",
"2. 点击 文件 → 新建相册",
"3. 按照下方列表创建相册",
"4. 使用智能相册功能自动分类"
]
}
# 保存创建计划
with open(os.path.join(OUTPUT_DIR, "albums_plan.json"), "w") as f:
json.dump(report, f, ensure_ascii=False, indent=2)
# 输出智能相册建议
create_smart_albums_sql()
print("\n🎯 推荐操作:")
print("1. 在照片App中创建以下智能相册自动分类:")
print(" - 文件 → 新建智能相册")
print(" - 设置条件如:文件名包含 'faceu' = 自拍")
print(" - 设置条件如:媒体类型 = 屏幕截图")
print("\n2. 或运行以下命令打开照片App并创建相册:")
print(f" open -a Photos")
# 保存详细的UUID映射方便后续使用
print(f"\n✅ 分类数据已保存至: {OUTPUT_DIR}")
print(" - classification.json: 完整分类数据含UUID")
print(" - albums_plan.json: 相册创建计划")
print(" - report.json: 分类统计报告")
if __name__ == "__main__":
main()