Files

143 lines
4.6 KiB
Python
Raw Permalink Normal View History

#!/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()