Welcome 👋

CS @ UofT | AI & Cross-platform Dev

LuminaRetouch: 专业级AI照片编辑,无需专业级价格

请访问 GitHub 了解 LuminaRetouch 在数字摄影的世界里,要获得那种完美、适合杂志的照片,通常需要强大的、而且价格昂贵的软件。对于业余摄影爱好者和有抱负的摄影师来说,像 Pixcake 这样的专业工具的高昂价格,可能会成为一个主要的障碍,使他们无法实现自己的创作愿景。如果能够免费获得与 Pixcake 相同的、基于人工智能的先进修图功能呢? 这就是促使我开发 LuminaRetouch 的问题。LuminaRetouch 是一款功能强大的桌面应用程序,它由对摄影的热情和使专业级工具对每个人都可及的愿望驱动。 项目的灵感 我开发了 LuminaRetouch 的原因很简单:我相信每个人都应该能够获得高质量的创作工具。作为一名摄影爱好者,我一直对需要订阅才能使用顶级修图软件的高昂费用感到沮丧。虽然这些软件的功能很强大,但价格对于业余爱好者来说太高了。我知道一定有更好的方法。因此,我决定开发一款功能强大、功能齐全且完全免费的替代方案,供社区使用。 什么是让 LuminaRetouch 突出的? LuminaRetouch 不仅仅是一个照片编辑器,更是一个智能增强工作室。它将传统的图像处理与最先进的人工智能相结合,从而产生令人惊艳、自然的外观效果。 其核心是一个强大的 AI 引擎,可以采用两种模式:一种快速模式,用于使用高速算法进行快速、实时的调整;另一种质量模式,利用广受好评的 GFPGAN 模型,以获得卓越的面部恢复效果。这种双模式方法使您能够完全控制工作流程,无论您需要快速调整还是完美、专业的处理。 该应用程序具有直观且优雅的用户界面,包括实时分屏滑块。这使您可以立即比较图像的“原始”和“修改”状态,从而了解每个调整的影响。 主要功能包括: AI 皮肤增强:智能地平滑皮肤,同时保持自然纹理,并以惊人的精度去除瑕疵。 眼睛和嘴巴细节:通过提亮眼睛、美白牙齿和增强嘴唇颜色,突出您拍摄对象的特征。 面部雕塑:微妙地调整面部轮廓,包括脸部、鼻子和下巴。 AI 放大:使用 Real-ESRGAN 将图像分辨率提高 2 倍或 4 倍,非常适合从任何照片创建高分辨率打印。 自定义模板:保存您喜欢的设置,并通过单击即可将其应用于其他照片。 内部结构 LuminaRetouch 建立在现代的 Python 框架之上,并使用 PySide6 提供了精致的图形界面。核心的图像处理由强大的 OpenCV 库处理,而面部特征的精确检测则使用 MediaPipe。然而,真正的魔法在于它与强大的 PyTorch 驱动的模型(如 GFPGAN 和 Real-ESRGAN)的集成,这些模型驱动了其高级的 AI 功能。 LuminaRetouch 证明了开源开发的强大功能以及对创意的热情。它专为艺术家、业余爱好者和希望在不花费太多金钱的情况下创作令人惊叹的照片的人而设计。请下载、试用,并将您的照片编辑提升到新的水平。

2026年1月31日 · 1 分钟

Ocompress: 用闪电般迅捷的本机图片优化器夺回你的隐私空间

请访问 GitHub 了解 Ocompress 在我们的数字时代,图像至关重要。从专业作品集到日常社交媒体更新,高质量的图像都是必不可少的。然而,高质量通常意味着较大的文件大小,导致网站加载缓慢、存储空间不足以及邮件附件过大。对于许多人来说,在线图像转换器和优化工具是首选解决方案。它们快速、简单,并且能完成任务。但代价是什么? 我一直对这些在线工具感到担忧。每次上传图像时,我都会不禁思考:我的数据去了哪里?谁可以访问它?他们存储了什么?在数据泄露和隐私问题日益严重的时代,将个人或专有图像交给第三方服务器,让我感到风险很高。此外,这些工具如果没有稳定的互联网连接,就毫无用处。这种挫败感激发了 Ocompress 的开发。 我设想了一个与在线转换器完全不同的工具:私密、优先处理离线,并且完全透明。我想要一个在我的桌面上运行,本地处理图像,并且永远不会将任何数据发送到云端的应用程序。因此,我在 GitHub 上找到了一个名为 Imagine 的开源应用程序。它使用 Electron 和 React 构建,这是一种流行的桌面应用程序开发组合。它能用,但它并不是我梦想中的轻量级、高效的机器。可执行文件较大,内存占用也高于我所希望的。这感觉很沉重,与我想要提供的轻量级体验相悖。 真正的转变就在这里。我决定从头开始重建 Imagine,这次重点是采用最先进、最轻量级的技术。我选择了 Tauri 作为核心框架,这是一个具有变革意义的决定。与 Electron 不同,Electron 捆绑了一个完整的 Chromium 实例,而 Tauri 利用了操作系统本身的 Web 渲染器,从而大大减少了应用程序的大小和内存占用(减少了约 95%)。与 Svelte 结合使用,Svelte 是一种将您的声明式组件转换为高度高效的纯 JavaScript 的编译器,新的 Ocompress 已经不仅仅是一个重新设计,而是一次彻底的重构,以实现性能。 结果是一个既安全又尊重隐私,而且速度极快、极其轻量级的应用程序。Ocompress 启动迅速,图像处理速度极快,并且消耗的系统资源很少。您可以将图像压缩为现代格式(如 WebP),使用 MozJPEG 优化 JPEG 格式,或使用 PngQuant 减小 PNG 文件大小,所有这些都在本地、离线完成,并且可以轻松生成 Web 项目的占位符图像。 如果您是开发者、设计师,或者只是重视隐私,并希望拥有一个尊重您的数据和系统资源,那么现在是时候切换了。告别基于云的转换器的不确定性,拥抱本地处理的强大和安全性。Ocompress 不仅仅是一个应用程序,更是一种声明:您不需要为了便利而牺牲隐私。下载、试用,并重新掌控您的图像。

2026年1月31日 · 1 分钟

突破默认:11款解决Windows最大烦恼的应用

我们都知道流程。当你安装新的 Windows 系统时,你最初几个星期会使用微软提供的工具。你使用“照片”应用查看照片,使用“媒体播放器”播放音乐,并使用“文件资源管理器”浏览文件。但最终,你会遇到瓶颈。视频播放器在 4K 文件上卡顿。当管理数千张照片时,“文件资源管理器”感觉笨拙。“卸载”按钮实际上并不能完全删除 所有 内容。 默认的 Windows 工具是为“普通”用户设计的——它们是安全的、简单的,并且故意有限制。但你不是一个普通的用户;你想要速度、隐私和控制。 我整理了一份包含 11 个应用程序的清单,这些应用程序用更强大的工具取代了默认的 Windows 体验。以下是为什么你应该切换的原因。 1. 媒体播放:PotPlayer 替换方案: Windows 电影和电视 -> PotPlayer 理由: Windows 自带的视频播放器经常缺少必要的编解码器(例如 HEVC),而且在处理高码率文件时表现不佳。PotPlayer 是一款功能强大的媒体播放器,它可以播放各种格式的文件,从古老的 AVI 文件到现代的 8K 视频,而无需额外的编解码器。 优点: 性能: 针对硬件加速进行了优化,即使在较旧的硬件上也能流畅播放。 视觉效果: 提供实时后期处理功能(锐化、降噪),使视频看起来更加生动,而不仅仅是“平淡”的 VLC 或 Windows Media Player 的效果。 自定义: 你可以自定义其外观,从极简的无边框窗口到复杂的控制面板。 缺点: 广告历史: 它由一家大型公司(Kakao)拥有,用户过去曾抱怨过偶尔出现的广告弹窗或角落中的“白色框”,但较新版本允许你选择退出或阻止此功能。 2. 文件传输:LocalSend 替换方案: 附近共用 / 手机链接 -> LocalSend 理由: 从 iPhone 传输照片到 Windows 电脑,或者从 Android 传输到 iPad,仍然比想象的要困难。Google 的“快速分享”(以前称为 Nearby Share)现在可以在 Windows 上使用,但需要 Google 帐户,并且可能存在问题。LocalSend 完全绕过云服务,利用你的本地 Wi-Fi 网络,实现设备之间即时文件传输。 ...

2026年1月20日 · 2 分钟
Me skiing in Banff

2025 Banff旅行记

【12月24日·出发】 早晨七点。 在这个本该属于睡眠的时间,我像个神经病一样睁大了眼睛。洗漱,吞咽早饭,一切如常,机械得像个被设定好程序的炼金人偶。我又检查了两遍行李,它们静静地躺在角落,像是随时准备奔赴战场的铠甲。 我瘫在椅子上看着天花板发呆。明明只是一场普通的旅行,可我的嘴角就像被胶带扯着一样,怎么都放不下来。 十点,集结号吹响。目的地:Anderson家。 推开门的一瞬间我愣住了——Sophie居然已经到了。这个像冬天一样的女孩明明最爱睡觉。既然人齐了,那就出发吧,向着人生的下一个路口。 虽说是平安夜,机场却空旷得像世界末日后的避难所。没有圣诞老人的铃声,只有冰冷的广播回荡。 Check in,过安检,流程枯燥得让人想睡觉。坐在登机口,为了消磨这漫长的等待,我和Anderson并肩杀进了《元气骑士》的像素地牢,Rita则是在画画。 一点半的飞机,意味着现在必须进食。为了生存,我不得不买两个鸡肉卷。咬下去的第一口我就后悔了,难吃得像是把硬纸板塞进了嘴里。但这毕竟是能量,如果不吃,下午大概会饿死在万米高空吧。 终于登机。 引擎轰鸣声中,周围的人睡得像一群死猪,只有我点亮了屏幕——《电锯人》,启动。 玛奇玛小姐在屏幕里微笑,我在屏幕外吃着泡面。是的,飞了一个小时我又饿了。Sophie递过来手机,那是她小时候的照片,像个精致的洋娃娃。我看了看,心想幸好没拿出我小时候的照片,那大概像个刚从泥坑里爬出来的猴子,太搞笑了。 落地,舱门打开,寒意如刀割面。 世界一片惨白,看着就冷。取完行李冲出机场,外面正飘着细碎的雪花。那一刻我承认,虽然冷,但真美啊,美得让人想在雪地里打个滚。 “我靠,时间来不及了!” 现实总是打断抒情。租车行快关门了,我们像是在跟时间赛跑的亡命-徒,一路狂飙。 五点三十,我们在卷帘门落下前的最后一刻赶到了。本来预定的是一辆奔驰,那是属于成功人士的座驾。可惜,因为年龄不够——或者说因为我们还是一群没长大的孩子——只能钻进一辆朴实的丰田里。 好吧,丰田也不错,至少耐造,像是我们这些平凡人的命。 拿到车,饥饿感像潮水一样涌上来。目标锁定:山河聚。 推开餐厅大门,热气扑面而来。装修居然还挺酷,平安夜里人声鼎沸,看起来是个不错的地方。点菜的时候我的胃已经开始消化我的肋骨了。 “我要鱼香肉丝!”这是我对中餐最后的执念。 Sophie点了炸子鸡和炒大虾,还有红糖糍粑。等待的半个小时像是一个世纪那么漫长。 终于,炸子鸡端上来了。那一刻,香气炸裂,我恨不得把舌头都吞下去。米饭!快上米饭!鱼香 肉丝紧随其后,纯正的味道在味蕾上跳舞,喜欢! 最后的炒大虾辣得让人头皮发麻,像是吞了一团火,只好打包带走。 填饱肚子,转战大统华。扫荡完零食和物资,我们终于驶向那个未知的小镇。 夜幕降临,虽然看不清,但依稀能看到大山像巨人的剪影耸立在黑暗中。我想象着明天清晨,阳光刺破云层照在雪山顶上,那该是怎样的日照金山。 到了。 哇哦。 那个小镇在黑夜里灯火通明,亮得像是指环王里的瑞文戴尔。那些房子看着真酷,等等,我们真的要住在这里吗?这也太棒了吧,棒得让我觉得自己像个混进贵族晚宴的窃贼。 这房子居然有地下车库,旁边还有Spa和泳池。 输入密码,大门开启,像是打开了潘多拉的魔盒。 主卧是Queen size的大床,古典家具散发着木头的香气,独立卫浴一应俱全。客卧的灯光暖黄,温馨得让人想立刻倒头就睡。最绝的是客厅,巨大的落地窗外就是漫天雪景,美得不真实。 这客厅大得足够容纳我们四个人开黑。哪怕让我在这里住一个月,死在这里都行。 这一天折腾下来,骨头都快散架了。 放下行李,洗去一身风尘。所有人洗漱完毕,属于男人们的保留节目开始了——PUBG! Rita那个叛徒跑去玩了三角洲,呵,洲批,Sophie的睡衣完全就是小学生嘛。 不知过了多久,眼皮重得像挂了铅球。我和Rita实在扛不住了。 倒在床上的时候,我满脑子都是明天的太阳。 晚安,世界。好期待明天。 【12月25日·极乐净土与泡面】 “热……好热。” 谁能想到,在北纬51度的雪山脚下,在这样一个应该被冻成冰雕的早晨,我竟然是被热醒的。这暖气开得简直像是要把我们烤熟了献祭给太阳神。 窗外的阳光刺破窗帘的缝隙,暴力地投射在我的眼皮上。我眯着眼拉开窗帘,那一瞬间,视网膜差点过载。 我忍不住笑出声来。这才是圣诞节该有的样子啊,而不是缩在被窝里瑟瑟发抖。 外面的天空蓝得像是新海诚电影里的每一帧截图,饱和度拉满。远处的雪山在阳光下闪闪发光,像是一群穿着银甲的巨人静静伫立;近处的松树披着厚厚的白雪,空气里除了寒冷,还有一种清冽的雪香,吸一口感觉肺都被净化了。 洗漱完毕,该是展现技术的时候了。 早餐时间。幸好昨天在大统华扫荡了物资。烤面包、小零食,人手一杯饮料。最搞的是那个咖啡机,我满怀期待地操作了一通,结果出来的东西甜得像是初恋……好吧,其实就是那是糖水吧喂! 吃完早饭,接下来是漫长的等待。 Sophie正在进行一项名为“化妆”的精密工程。我说我可以帮忙,毕竟我自诩拥有神之手,结果遭到了她们无情的嘲笑和拒绝。 真是伤心,凡人果然不懂艺术。 两个小时后。 是的,你没看错,整整两个小时。这段时间足够我们教授讲完一本书了。 终于,我们吃上了午饭。 在这个风景如画的豪宅里,在这个神圣的圣诞节,我们的午餐是—— 一人一大碗泡面! 哈哈哈哈,没有什么比在异国他乡吸溜一碗热气腾腾的泡面更让人感到灵魂升华的了。碳水化合物万岁! 出发!目标锁定:各大景点! 车轮碾过积雪,阳光洒在车窗上,把车厢烤得暖洋洋的。我们就这样一路向着湖边飞驰,窗外的雪山、松树和湖泊像是一幅幅画卷在眼前展开,美得不真实。 第一站:明尼万卡湖(Lake Minnewanka)。 名字听起来有点像什么古老的咒语。路边偶遇了一位放牛的大叔,白茫茫的雪原上,那几只黑色的牛显得格外扎眼。黑与白,静与动,整个冬天仿佛因为它们而活了过来。 开着开着,前面的车突然都停了。 难道是有什么隐藏任务触发了?我们赶紧靠边停车。 我靠!是麋鹿!野生的! 那家伙真的超级大,站在雪地里像是一尊威严的雕塑。这种只有在游戏里才能见到的Boss级生物出现在眼前时,那种压迫感和惊喜感简直无法形容。 告别了麋鹿先生,我们抵达了湖边。 湖面竟然还没有完全结冰,水清得像是一块巨大的翡翠,倒映着蓝天白云和远处的雪山。 有人在钓鱼,有人在散步。世界安静得只能听到风的声音。我们在湖边疯狂按快门,试图把这一刻的时间定格。 下一站:硫磺山(Sulphur Mountain)。 听名字感觉会有恶龙居住,但其实是班夫的制高点。 坐上缆车,大地在我们脚下缓缓下沉。当缆车冲出云端,站在山顶俯瞰整个班夫小镇时,那种“会当凌绝顶”的感觉油然而生。群山如海,我们如尘埃,但这一刻,尘埃也在闪闪发光。 下山后,最神经病但也最开心的一幕发生了。 我们在空旷的停车场里,像群傻瓜一样大声唱起了《Jingle Bells》。 “Jingle bells, jingle bells, jingle all the way!” 笑声在空旷的山谷里回荡。管他有没有人听见,这一刻快乐是属于我们的。 ...

2025年12月24日 · 1 分钟