[{"data":1,"prerenderedAt":411},["ShallowReactive",2],{"work-projects":3},[4,61,100,139,167,215,249,302,329,363],{"id":5,"title":6,"award":7,"body":8,"date":42,"description":14,"extension":43,"featured":44,"image":45,"kind":46,"links":47,"meta":48,"navigation":49,"path":50,"seo":51,"stem":52,"summary":53,"tags":54,"video":59,"__hash__":60},"work\u002Fwork\u002Fmonsterverse.md","MonsterVerse",null,{"type":9,"value":10,"toc":38},"minimark",[11,15,18,31],[12,13,14],"p",{},"MonsterVerse combines structured statistics, natural-language descriptions, and artwork, letting you search a monster catalog by text or image, explore creatures visually, and generate controlled variations of them.",[12,16,17],{},"It set out to explore:",[19,20,21,25,28],"ul",{},[22,23,24],"li",{},"how visualization can communicate intent to generative AI;",[22,26,27],{},"how structured stat changes can become coherent textual and visual transformations;",[22,29,30],{},"how to keep a monster's statistics, description, abilities, and artwork consistent with each other.",[12,32,33,37],{},[34,35,36],"strong",{},"Technical Details"," Python and FastAPI backend and a React frontent with D3.js and Plotly for visualization; LangChain for agents, tool calling and orchestration; Google Gemini for text and image generation; OpenCLIP embeddings and ChromaDB for multimodal RAG search; The retrieval uses a hybrid (vector + BM25) followed by a local reranker.",{"title":39,"searchDepth":40,"depth":40,"links":41},"",2,[],"2026-9","md",false,"\u002Fmedia\u002Fwork\u002Fmonsterverse.webp","project",[],{},true,"\u002Fwork\u002Fmonsterverse",{"title":6,"description":14},"work\u002Fmonsterverse","A multimodal platform for searching, exploring, and generating variations of Dungeons & Dragons monsters.",[55,56,57,58],"Generative AI","Multimodal RAG","LLM Agents","Data Visualization","\u002Fmedia\u002Fwork\u002Fmonsterverse.mp4","iEG0zIrMMbonyBZrW6yM-eDNJDerBV1M53weFEEyQdo",{"id":62,"title":63,"award":7,"body":64,"date":82,"description":68,"extension":43,"featured":44,"image":83,"kind":46,"links":84,"meta":88,"navigation":49,"path":89,"seo":90,"stem":91,"summary":92,"tags":93,"video":98,"__hash__":99},"work\u002Fwork\u002Fkiln.md","Kiln",{"type":9,"value":65,"toc":80},[66,69],[12,67,68],{},"Kiln is a desktop application for artists and researchers who want to work with diffusion models at a personal scale: train a compact model on a few hundred of your own images, then sample, paint, bend, and merge what it has learned. It is designed to make working with generative models feel material and craft-like.",[12,70,71,72,75,76,79],{},"The work is organized into two spaces: ",[34,73,74],{},"Prepare",", where you build datasets and train models, and ",[34,77,78],{},"Create",", where you explore and compose with them.",{"title":39,"searchDepth":40,"depth":40,"links":81},[],"2026-08","\u002Fmedia\u002Fwork\u002Fkiln.webp",[85],{"label":86,"url":87},"Try here (CPU)","https:\u002F\u002Fapi.cerebrium.ai\u002Fv4\u002Fp-ad13f3aa\u002Fkiln\u002F",{},"\u002Fwork\u002Fkiln",{"title":63,"description":68},"work\u002Fkiln","A studio for training, bending, merging, and composing with small diffusion models trained on your own images.",[55,94,95,96,97],"Diffusion","Small Data","Model Crafting","Desktop App","\u002Fmedia\u002Fwork\u002Fkiln.mp4","PWCiOjzO0ZLgbt4af97Au49cjFKYOhh2kVEDZvWqA3s",{"id":101,"title":102,"award":7,"body":103,"date":110,"description":107,"extension":43,"featured":49,"image":111,"kind":112,"links":113,"meta":129,"navigation":49,"path":130,"seo":131,"stem":132,"summary":133,"tags":134,"video":137,"__hash__":138},"work\u002Fwork\u002Fdiffusion-model-bending.md","Diffusion Model Bending",{"type":9,"value":104,"toc":108},[105],[12,106,107],{},"Model bending lets you apply transformations to the inner workings of a diffusion model in order to push it towards new and diverse aesthetics. Think of it as granular control for introducing diversity and randomization beyond seeds. Transformations include addition, multiplication, noise, rotation, erosion and dilation, or your own custom ones.",{"title":39,"searchDepth":40,"depth":40,"links":109},[],"2025-06","\u002Fmedia\u002Fwork\u002Fdiffusion-model-bending.webp","tool",[114,117,120,123,126],{"label":115,"url":116},"Code","https:\u002F\u002Fgithub.com\u002Fabuzreq\u002FComfyUI-Model-Bending",{"label":118,"url":119},"Try it","https:\u002F\u002Fdiffusion-bending-demo.netlify.app\u002F",{"label":121,"url":122},"Paper (Book chapter)","\u002Fpublications#abuzuraiq_unboxing_springer_2026",{"label":124,"url":125},"Paper (XAIxArts '25)","\u002Fpublications#abuzuraiq_xaixarts_2025",{"label":127,"url":128},"Project","https:\u002F\u002Fwww.metacreation.net\u002Fprojects\u002Fmodel-bending",{},"\u002Fwork\u002Fdiffusion-model-bending",{"title":102,"description":107},"work\u002Fdiffusion-model-bending","A ComfyUI extension (2,000+ downloads) that applies transformations (addition, noise, rotation, erosion, custom ops) to the inner workings of diffusion models, pushing them toward new and diverse aesthetics.",[55,135,94,136],"Model Bending","ComfyUI","\u002Fmedia\u002Fwork\u002Fdiffusion-model-bending.mp4","CW2UiD0cah7xfsf1CmWvzCLsu34CV37hkxEe0_Ouvt8",{"id":140,"title":141,"award":7,"body":142,"date":152,"description":146,"extension":43,"featured":44,"image":153,"kind":46,"links":154,"meta":158,"navigation":49,"path":159,"seo":160,"stem":161,"summary":162,"tags":163,"video":7,"__hash__":166},"work\u002Fwork\u002Fneurosphere.md","NeuroSphere: AI Marbles",{"type":9,"value":143,"toc":150},[144,147],[12,145,146],{},"The site is built as promotional material for the product, taking the future it imagines at face value. Its podcast, made with Google's NotebookLM, has two speakers discussing the implications of the technology.",[12,148,149],{},"Created as part of the design fiction course \"Interactions with the Future\" at the University of Calgary with Dr. Wesley Willett.",{"title":39,"searchDepth":40,"depth":40,"links":151},[],"2024-11","\u002Fmedia\u002Fwork\u002Fneurosphere.webp",[155],{"label":156,"url":157},"Visit","https:\u002F\u002Fneurosphereai.netlify.app\u002F",{},"\u002Fwork\u002Fneurosphere",{"title":141,"description":146},"work\u002Fneurosphere","A design fiction featuring a promotional website for an AI augmentation product, imagining a future where AI models are traded as commodities. Includes an AI-generated podcast discussing the implications.",[55,164,165],"Design Fiction","Speculative Design","15X8B2F_B3lTE1y56bLWIQUkFxgqBRyJ6qZoZC9FFIY",{"id":168,"title":169,"award":7,"body":170,"date":192,"description":174,"extension":43,"featured":49,"image":193,"kind":112,"links":194,"meta":204,"navigation":49,"path":205,"seo":206,"stem":207,"summary":208,"tags":209,"video":7,"__hash__":214},"work\u002Fwork\u002Fdpredict.md","DPredict",{"type":9,"value":171,"toc":190},[172,175,178,184],[12,173,174],{},"A collaboration between SFU (Ahmed Abuzuraiq, Esmaeil Mottaghi, Halil Erhan) and the Design Process Lab at Perkins&Will (Victor Okhoya, Spyridon Ampanavos, Marcelo Bernal, Cheney Chen and Yehia Madkour).",[12,176,177],{},"The tool leverages a surrogate ML model for daylighting prediction that reduces heavy simulations. The goal was to make advanced performance calculations accessible to designers in the early design stages, without much building-science experience.",[12,179,180,183],{},[34,181,182],{},"Results:"," the tool was applied to internal Perkins+Will design projects. In our study, designers found it fast and easy to use, at the right level of detail for early design, and less reliant on building-performance experts, and they were eager to adopt it.",[12,185,186,189],{},[34,187,188],{},"Role:"," proposal writing, literature review, requirements gathering, project management, technical feasibility testing, mockup design (Figma), prototyping and full-stack web development (Vue.js, CefSharp, D3.js, Grasshopper, Rhino Compute), designing and conducting evaluation studies, analysing and presenting study data, writing papers and presenting at international conferences.",{"title":39,"searchDepth":40,"depth":40,"links":191},[],"2024-06","\u002Fmedia\u002Fwork\u002Fdpredict.webp",[195,198,201],{"label":196,"url":197},"Paper (CAADRIA '24)","\u002Fpublications#mottaghi_dpredict_caadria_2024",{"label":199,"url":200},"Paper (eCAADe '24)","\u002Fpublications#mottaghi_ecaade_2024",{"label":202,"url":203},"Paper (ACADIA '24)","\u002Fpublications#abuzuraiq_designer_friendly_2024",{},"\u002Fwork\u002Fdpredict",{"title":169,"description":174},"work\u002Fdpredict","A performance-based design tool for creating sustainable building designs with low energy demand and high daylight utilization in the early design stages, built on a surrogate ML model that replaces heavy simulations.",[58,210,211,212,213],"Surrogate Modelling","Building Performance","Web","Team Project","O-IKpdxKFWXU164eX3t77E5Dv2oJaA_3-1jx1lGDvXk",{"id":216,"title":217,"award":7,"body":218,"date":233,"description":222,"extension":43,"featured":49,"image":234,"kind":112,"links":235,"meta":241,"navigation":49,"path":242,"seo":243,"stem":244,"summary":245,"tags":246,"video":7,"__hash__":248},"work\u002Fwork\u002Fmonster-shopper.md","Monster Shopper",{"type":9,"value":219,"toc":231},[220,223,226],[12,221,222],{},"A graduate course project with Tamara Munzner at UBC, in collaboration with Ryan Smith and Helena de C. Alvarenga.",[12,224,225],{},"We interviewed Dungeon Masters and arrived at multiple visualization modules tackling different needs. Physical monster manuals are engaging to leaf through but lack filtering; online encounter builders filter well but do not foster serendipitous discovery. Monster Shopper tries to balance visual and data-driven exploration for novice users, adapting a system by the Science Visualization Group at AMNH.",[12,227,228,230],{},[34,229,188],{}," research, design and development.",{"title":39,"searchDepth":40,"depth":40,"links":232},[],"2022-12","\u002Fmedia\u002Fwork\u002Fmonster-shopper.webp",[236,238],{"label":118,"url":237},"https:\u002F\u002Fdnd-monsters-atlas.netlify.app\u002F",{"label":239,"url":240},"Course page","https:\u002F\u002Fwww.cs.ubc.ca\u002F~tmm\u002Fcourses\u002F547-22\u002Fprojects.html",{},"\u002Fwork\u002Fmonster-shopper",{"title":217,"description":222},"work\u002Fmonster-shopper","A visualization interface for visual and data-driven exploration of Dungeons & Dragons monsters, balancing serendipitous browsing with attribute filtering for Dungeon Masters.",[58,247,212,213],"Design Study","gRPjhYWPSixYMuaDpFn4wjcx4TCtVbzeRSwqAu6GNqw",{"id":250,"title":251,"award":7,"body":252,"date":270,"description":256,"extension":43,"featured":49,"image":271,"kind":112,"links":272,"meta":291,"navigation":49,"path":292,"seo":293,"stem":294,"summary":295,"tags":296,"video":300,"__hash__":301},"work\u002Fwork\u002Fdesignsense.md","DesignSense",{"type":9,"value":253,"toc":268},[254,257,262],[12,255,256],{},"With the rise of generative techniques in architectural design, there is a growing need for tools that enable exploring a large number of design alternatives. Through interacting with domain experts and analysing the literature, DesignSense was developed as a response. Its design criteria emphasise encouraging exploration, reducing the cognitive overload of too many choices, and respecting the tacit and explicit dimensions of design judgment. Visual analytics and HCI inform the visualization and interface design.",[12,258,259,261],{},[34,260,188],{}," research, visualization and UI design, and development from scratch.",[12,263,264,267],{},[34,265,266],{},"Activities:"," literature review, abstract task analysis, synthesis of requirements, iterative prototyping, collecting periodic feedback from industry partners, evaluation (focus group and expert review).",{"title":39,"searchDepth":40,"depth":40,"links":269},[],"2020-08","\u002Fmedia\u002Fwork\u002Fdesignsense.webp",[273,276,279,282,285,288],{"label":274,"url":275},"New version to try!","https:\u002F\u002Fdesignsense-beta.netlify.app\u002F#\u002F",{"label":277,"url":278},"Try here","https:\u002F\u002Fdesignsense.app\u002F",{"label":280,"url":281},"Thesis","https:\u002F\u002Fsummit.sfu.ca\u002Fitem\u002F20935",{"label":283,"url":284},"Paper (IJAC '25)","\u002Fpublications#abuzuraiq_designing_2025",{"label":286,"url":287},"Paper (CAADRIA '20)","\u002Fpublications#similarity_2020",{"label":289,"url":290},"Paper (FDG '20)","\u002Fpublications#shopping_2020",{},"\u002Fwork\u002Fdesignsense",{"title":251,"description":256},"work\u002Fdesignsense","A visual analytics system for exploring generative design spaces, developed for my Master's thesis at SFU's Computational Design Lab to help designers navigate large numbers of design alternatives.",[58,297,280,298,299],"Generative Design","Vue.js","D3.js","\u002Fmedia\u002Fwork\u002Fdesignsense.mp4","9u3EvNlniqQY5KP-jML4sM_CdwUE3RFmJFqy2WaOmMw",{"id":303,"title":304,"award":7,"body":305,"date":312,"description":309,"extension":43,"featured":44,"image":313,"kind":46,"links":314,"meta":318,"navigation":49,"path":319,"seo":320,"stem":321,"summary":322,"tags":323,"video":327,"__hash__":328},"work\u002Fwork\u002Fflowui.md","FlowUI",{"type":9,"value":306,"toc":310},[307],[12,308,309],{},"In collaboration with Dr. Halil Erhan, Dr. Robert Woodbury and Maryam Zarei (SFU) and Alyssa Haas (Stantec Vancouver).",{"title":39,"searchDepth":40,"depth":40,"links":311},[],"2020-04","\u002Fmedia\u002Fwork\u002Fflowui.webp",[315],{"label":316,"url":317},"Paper","\u002Fpublications#flowui_2020",{},"\u002Fwork\u002Fflowui",{"title":304,"description":309},"work\u002Fflowui","A design-aid tool that gives architectural designers immediate feedback on the performance of their directly-modelled designs through interactive visualizations and analysis.",[324,325,326,213],"Rhino3D","Grasshopper","Performance-Based Design","\u002Fmedia\u002Fwork\u002Fflowui.mp4","FosuBC1UNXcjDz-vYkL2XfMKz2MlGc_PFGEmDUv_w90",{"id":330,"title":331,"award":7,"body":332,"date":339,"description":336,"extension":43,"featured":49,"image":340,"kind":112,"links":341,"meta":353,"navigation":49,"path":354,"seo":355,"stem":356,"summary":357,"tags":358,"video":7,"__hash__":362},"work\u002Fwork\u002Ftaksim.md","Taksim",{"type":9,"value":333,"toc":337},[334],[12,335,336],{},"Taksim can dictate which regions in a generated space should be adjacent or non-adjacent. This has many applications, like generating a dungeon with a predetermined sequence of missions or generating political maps (e.g. Risk). Dressing the problem up as constrained graph partitioning and solving it with Answer Set Programming yields a highly flexible system.",{"title":39,"searchDepth":40,"depth":40,"links":338},[],"2019-08","\u002Fmedia\u002Fwork\u002Ftaksim.webp",[342,344,347,350],{"label":115,"url":343},"https:\u002F\u002Fgithub.com\u002Fabuzreq\u002FTaksim",{"label":345,"url":346},"Talk","https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=Bu3m_7-3Tm4&t=2331s",{"label":348,"url":349},"Paper (CoG '19)","\u002Fpublications#taksim_2019",{"label":351,"url":352},"Paper (FDG '17)","\u002Fpublications#isomorphism_2017",{},"\u002Fwork\u002Ftaksim",{"title":331,"description":336},"work\u002Ftaksim","A procedural generation system for game spaces that adhere to high- and low-level design constraints, such as which regions must be adjacent, by framing generation as constrained graph partitioning solved with Answer Set Programming.",[359,360,361],"PCG","Answer Set Programming","Graph Partitioning","zIMWowkUeLGHYq4RYggWVFPlCbHbBLF9Q97aMNtbGkw",{"id":364,"title":365,"award":7,"body":366,"date":388,"description":389,"extension":43,"featured":44,"image":390,"kind":46,"links":391,"meta":397,"navigation":49,"path":398,"seo":399,"stem":400,"summary":401,"tags":402,"video":409,"__hash__":410},"work\u002Fwork\u002Fdjinn.md","Djinn",{"type":9,"value":367,"toc":386},[368,374,380],[12,369,370,373],{},[34,371,372],{},"The generator: JuxtaPause."," Inspired by a GIF of an aging woman, I wanted a way to juxtapose images of her at different ages. JuxtaPause stacks the GIF's frames as a 3D matrix and samples across it using a greyscale 2D Perlin noise image, so each pixel is taken from a different moment. Perlin noise was favoured over a random generator because it creates contiguous light and dark regions, giving just enough of each age. Moving the mouse, or a MIDI controller, changes the noise parameters.",[375,376],"prose-video",{"alt":377,"poster":378,"src":379},"JuxtaPause: a portrait blending one woman at different ages through a Perlin noise pattern","\u002Fmedia\u002Fwork\u002Fjuxtapause.webp","\u002Fmedia\u002Fwork\u002Fjuxtapause.mp4",[12,381,382,385],{},[34,383,384],{},"The explorer: Djinn."," Exploring JuxtaPause's generative space by hand means moving the mouse around looking for something \"interesting\". I wanted to automate, or semi-automate, that search. Optimization fails here because interestingness is hard to quantify, so Djinn uses Novelty Search instead: each newly generated piece is compared against the others by its visual features (Histogram of Oriented Gradients), with the aim of finding as many distinct points in the space as possible.",{"title":39,"searchDepth":40,"depth":40,"links":387},[],"2019-03","The generator: JuxtaPause. Inspired by a GIF of an aging woman, I wanted a way to juxtapose images of her at different ages. JuxtaPause stacks the GIF's frames as a 3D matrix and samples across it using a greyscale 2D Perlin noise image, so each pixel is taken from a different moment. Perlin noise was favoured over a random generator because it creates contiguous light and dark regions, giving just enough of each age. Moving the mouse, or a MIDI controller, changes the noise parameters.","\u002Fmedia\u002Fwork\u002Fdjinn.webp",[392,394],{"label":115,"url":393},"https:\u002F\u002Fgithub.com\u002Fabuzreq\u002FDjinn",{"label":395,"url":396},"Try JuxtaPause","https:\u002F\u002Feditor.p5js.org\u002Fabuzreq\u002Ffull\u002FoDP8CFXYT",{},"\u002Fwork\u002Fdjinn",{"title":365,"description":389},"work\u002Fdjinn","Semi-automates the exploration of a visual art generator's space by sampling it through Novelty Search, comparing pieces by visual features (Histogram of Oriented Gradients) to find as many distinct points as possible.",[403,404,405,406,407,408],"Java","OpenCV","p5.js","Novelty Search","Perlin Noise","Generative Art","\u002Fmedia\u002Fwork\u002Fdjinn.mp4","ivChRn2iW5pM6edgGIbNC_Q2eZ8sbbOJByGF_Mw3idI",1789785160010]