Experience

  1. Sept 2025 — Now

    AI Software Engineer · Reply

    • AI
    • RAG
    • LLMs
    • OpenShift
    • MongoDB
  2. Sept 2024 — Dec 2024

    AI Engineer · HIT × Systra

    • AI
    • Big Data
    • Deep Learning
  3. Sept 2022 — Sept 2023

    Software Engineer · Pirelli

    • Python
    • SQL
    • AWS
    • PostgreSQL
    • Angular
    • Docker
    • Qlik Sense

Projects

  1. OmniHarp

    Chord harp plugin for DAWs · 2026

    An Omnichord-style instrument for your DAW: pick one of 54 chords from a grid, the 12 strings retune to it, and every strum stays in key. Runs as VST3, AU or a standalone app, with a local MCP server so AI assistants can play it.

    • C++
    • JUCE
    • VST3
    • AU
    • MCP
  2. Meeting Pilot

    Application for macOS. · 2026

    Local-first meeting notes app. It detects a call, records it with a live transcript and notes, publishes them to Notion or Obsidian, and lets you ask questions about the meeting.

    Source on GitHub
    • Swift
    • Python
    • LLMs
    • WebGL
  3. Timbre: Search Samples the Way You Hear Them

    Sample search assistant for producers · 2025

    Find samples the way you hear them: describe a sound in plain words or drop in an audio file, and get matching samples from a library enriched with LLM captions and CLAP audio embeddings.

    • LLMs
    • CLAP
    • Agentic RAG
    • Qdrant
    • MongoDB
  4. Vital MCP

    MCP server for the Vital wavetable synth · 2026

    Lets AI assistants design, edit and explain presets for the free Vital synth from a plain request, then listen to the result through the real plugin and fix it.

    • Python
    • MCP
    • LLMs
    • Audio Analysis
    • DawDreamer
  5. Healthcare AI Virtual Assistant

    Generative AI · 2025

    A RAG-based virtual assistant for healthcare that answers patient questions, gives basic medical advice, recommends doctors and manages appointments.

    • GenAI
    • RAG
    • FastAPI
    • PostgreSQL
    • pgvector
    • Ollama
    • Angular 17
  6. Dynamic Pressure Regulation in Pump Systems

    Industrial AI Challenge · Systra and HIT · 2024

    AI for managing hydraulic pumps during grouting on large civil-engineering sites, with GRU models and an experimental offline reinforcement learning approach.

    • Deep Learning
    • Reinforcement Learning
    • PyTorch
    • MongoDB
  7. Retina Vessel Segmentation and Generative Models

    Deep Learning for 3D Medical Imaging · University of Twente · 2025

    Segments retinal blood vessels with a U-Net and Swin Transformer ensemble, then synthesizes extra training images with diffusion models and SPADE.

    • Deep Learning
    • Segmentation
    • Generative Models
    • PyTorch
    • MONAI
  8. Fake Image Detectors and Adversarial Attacks

    Computer Vision · University of Trento · 2024

    Tests how robust AI-generated-image detectors are against Stable Diffusion "laundering" attacks, using a two-step real, laundered and synthetic classifier.

    • Deep Learning
    • Generative Models
    • PyTorch
    • MONAI
  9. Urban Waste Management

    Big Data Technologies · University of Trento · 2024

    A big-data pipeline and live dashboard for city waste bins: Kafka ingestion, Spark predictions and route optimization, served to an Angular dashboard.

    • Data Engineering
    • Kafka
    • Spark
    • MongoDB
    • Redis
    • SQL
    • Docker
    • Angular 17
  10. Surgical Video Phase Recognition

    Advanced Computer Vision and Pattern Recognition · University of Twente · 2025

    Recognizing the phases of a surgery from video, for the Advanced Computer Vision and Pattern Recognition course.

    • Computer Vision
  11. Process Capability for Scrap Reduction

    Bachelor's thesis · Pirelli · University of Turin · 2022

    A sensor-data pipeline and Qlik Sense quality dashboard built to reduce scrap in Pirelli's tyre production.

    • Python
    • Qlik Sense
    • JMP
    • AWS
    • Statistical Analysis
  12. Process Mining

    Process Mining · University of Twente · 2025

    Linking process mining with agent-based modeling to build a continuous improvement loop for a job shop with automated guided vehicles (AGVs).

    • ProM
    • Disco
    • PM4Py
  13. Reddit Analysis of Character.ai

    Computational Social Science · University of Trento · 2024

    Topic modeling and a semantic network of Reddit discussions about Character.ai, with a focus on therapy-related conversations.

    • NLP
    • Topic Modeling
    • Deep Learning
    • PyTorch
  14. Dice Wars AI Player

    Machine Learning · University of Twente · 2025

    A Deep Q-Learning agent that learns to play the board game Dice Wars.

    • Reinforcement Learning
    • Deep Learning
    • PyTorch
  15. Data Mining for Referral Advice

    Data Science · University of Twente · 2025

    Data mining on a real-world spine-center dataset to predict the right treatment referral for low back pain from patient questionnaires, with fewer questions.

    • Machine Learning
    • SQL
    • scikit-learn
  16. Departmental Impact on Collaboration Networks

    Advanced Social Network Analysis · University of Trento · 2024

    How department shapes scientists' roles in a collaboration network, compared through beta and betweenness centrality.

    • R
    • Graphs
    • Network Analysis
  17. Choice-Based Conjoint Analysis on Smartphones

    Customer and Business Analytics · University of Trento · 2024

    Which smartphone attributes drive consumer choices, with a focus on the leading Chinese manufacturers.

    • R
    • Conjoint Analysis

Hobbies

  • Photography Street and travel, mostly natural light. Editing pictures and videos
  • Music Music production, guitar, concerts
  • Cycling

Reply · Sept 2025 — Now

AI Software Engineer

  • Full-stack: scalable web and software applications across 10 distinct projects for 2 major banks.
  • AI integration: brought AI into operational workflows, developing conversational chatbots, RAG pipelines and automated document-processing tools for risk analysis.
  • Framework architecture: primary technical point of contact for the proprietary AI framework.
  • Technical leadership: represented the company as a technical mentor at two industry hackathons, guiding teams building AI-driven solutions.

Visit Reply

HIT × Systra · Sept 2024 — Dec 2024

AI Engineer

Developed an AI solution for dynamic pressure regulation in pump systems, in collaboration with Systra for the Industrial AI Challenge.

Visit HIT × SystraSee the project

Pirelli · Sept 2022 — Sept 2023

Software Engineer

  • ETL: data collection, analysis processes and pipeline creation (Python, SQL and AWS).
  • Databases: creation, development and management of database systems (PostgreSQL).
  • Web development: creation, development and management of web apps (Angular, Git, Docker, HTML/JS/CSS).
  • BI: business intelligence with Qlik Sense for data visualization.

Visit PirelliSee the project

Sample search assistant for producers · 2025

Timbre: Search Samples the Way You Hear Them

Timbre is a sample-search assistant for music producers. Sample libraries describe sounds with technical tags and file names, but producers think in words like "punchy", "warm" or "dark". With Timbre you can describe a sound in plain words and get matching samples plus effect settings to get closer to it, or drop in an audio file and get a description of how it sounds, clean tags and the most similar samples. It is shown here as a plugin inside the DAW.

The semantic gap

A sample starts as a signal, becomes machine descriptors and picks up user tags that are sparse and often unrelated to how it sounds. Producers search in a different vocabulary. The first diagram shows the two sides and the three tools that connect them: LLM captions, a shared CLAP space for audio and text, and a hallucination check.

Project phases

The repo is split into four stages, written in Python. The first three run once to build the dataset; the last one answers every request from the plugin.

  • Data extraction: a SampleFocus scraper collects samples on a matrix of 11 instruments × 8 timbres (up to 250 per cell, skipping impossible pairs like an airy sub bass), and a SocialFX knowledge base maps descriptors such as "warm" to DSP effect parameters. Audio goes to GridFS and metadata to MongoDB.
  • Data exploration: counts the SocialFX descriptors and keeps the ones used at least 8 times as the working vocabulary.
  • Data ingestion: enriches every sample and writes the vectors to Qdrant, with the SocialFX descriptors in their own collection.
  • Agentic RAG: a FastAPI /chat endpoint runs the agent workflow that the plugin talks to.

Semantic enrichment

  • Label generation: GPT-4o turns the original label and noisy tags into a natural-language caption and a cleaner tag set.
  • Hallucination check: CLAP embeds the caption and the audio; captions scoring at least 0.25 are marked verified, the rest low confidence, and the score is stored so the plugin can show how much to trust a label.
  • Dual-vector indexing: each sample becomes one Qdrant point with a caption vector (text-embedding-3-small, 1536-d) and a CLAP audio vector (512-d).

Agentic orchestration

  • Intent Classifier: decides whether a request is a retrieval (text) or an analysis (audio).
  • Retrieval: the Audio Retriever ranks samples by caption similarity while the Sound Designer, in parallel, looks up DSP parameters for the adjectives in the query.
  • Analysis (reverse RAG): the Audio Analyst fingerprints the dropped audio with CLAP, finds its nearest neighbours, and the Label Enricher writes a label from their tags.
  • Humanizer: turns the JSON results into the plugin's answer, with previews ready to drag onto a track.

Results

  • Text-to-audio search: replacing raw tags with LLM-written captions raised nDCG@5 from 0.5851 to 0.8460.
  • Audio-to-audio search: CLAP finds acoustically coherent neighbours even when the human tags disagree, as the retrieval map shows.

Source on GitHub

MCP server for the Vital wavetable synth · 2026

Vital MCP

An MCP server that lets any AI assistant (Claude Desktop, Claude Code, Codex, Cursor and other MCP clients) design, edit and explain presets for Vital, a free wavetable synth. You describe a sound, for example "a dark reese bass with two detuned saws, a ladder filter at 400 Hz and a slow LFO on the cutoff", and the assistant writes the .vital preset, ready to open in Vital.

What it can do

  • Create presets from the init patch or an existing one, and edit them in place (with a backup) or as a copy.
  • Set any of Vital's ~800 parameters in plain units ("1.2 kHz", "800 ms", "25%"), with out-of-range values clamped and typos corrected.
  • Build the modulation matrix, wavetables (basic shapes, additive harmonics, morphing tables) and custom LFO shapes, and label the macros.
  • Describe and compare presets: oscillators, filters, envelopes, LFOs, modulations and effects in a readable breakdown.

Listening to its own presets

A language model can't hear, so on its own it designs presets blind. The optional render_preset tool plays the preset through the real Vital plugin offline (with DawDreamer), saves a WAV and measures it: level and clipping, brightness, energy per frequency band, stereo width and envelope timing. The assistant then fixes what's off and listens again.

In the demo, the first render of a Blinding Lights-style lead came back dull and close to clipping. Claude opened the filter from 2.2 to 4.5 kHz and lowered the volume by 3 dB, and the second render measured brighter with proper headroom. A reference WAV can also be passed to match a target sound.

Install

One-click extension for Claude Desktop, or a single uvx command for Claude Code, Codex and VS Code. It needs Vital 1.5 or newer; listening also needs Vital's VST3.

Source on GitHub

Generative AI · 2025

Healthcare AI Virtual Assistant

An AI virtual assistant for the healthcare sector that can answer complex patient questions, give basic medical advice, manage appointments, and understand and generate contextual responses accurately and naturally.

Stack

  • Database: PostgreSQL for patients, doctors, appointments and chats; pgvector for the RAG embeddings.
  • Backend: FastAPI, exposing REST APIs for all CRUD operations on patients, doctors, appointments and chats.
  • Frontend: Angular 17, for talking to the assistant, managing appointments and browsing chat history.

Features

  • Chat with RAG for contextual answers, using the MedQuAD and MIMIC-III datasets together.
  • Doctor recommendation once the patient's needs are understood, with free-slot proposals and booking.
  • Follow-up suggestions related to the user's previous question.
  • Intent detection (booking, viewing history and so on) to respond accordingly.
  • Sentiment analysis of each question to set the tone and type of the response.
  • Login and registration, a list of bookings, and access to past conversations.

Source on GitHub

Industrial AI Challenge · Systra and HIT · 2024

Dynamic Pressure Regulation in Pump Systems

Part of the Industrial AI Challenge. Using real-world data from construction sites, we explored how AI can improve the management of hydraulic pumps during grouting, a critical process in large-scale civil engineering projects.

We developed two AI-based approaches: Gated Recurrent Units (GRUs) and an experimental offline reinforcement learning model.

I mainly worked on the supervised learning models (GRU and LSTM) and on data preprocessing and exploration.

This project is under NDA, so there's no public repository.

Deep Learning for 3D Medical Imaging · University of Twente · 2025

Retina Vessel Segmentation and Generative Models

Retinal vessel segmentation helps diagnose retinal diseases. This project first applies a series of deep learning models to segment the vessels, then uses generative models to synthesize additional image data. It's validated on the public DRIVE and STARE datasets.

  • Preprocessing: resolution enhancement and augmentations, including CLAHE and Gabor filtering.
  • Segmentation: an ensemble of U-Net and Swin Transformer models.
  • Generative modeling: image synthesis with diffusion models combined with SPADE normalization.

Results

Dice coefficient and pixel-wise accuracy are logged alongside the ground-truth masks, and the predicted masks closely resemble them. SwinTNet performs more consistently over time than U-Net with dropout. Because DRIVE is small, adding STARE improved performance: the best Mean Dice comes from the U-Net Dropout and SwinTNet ensemble trained on both datasets.

Generative model

  • SPADE: a normalization layer that uses the segmentation mask to modulate feature maps, preserving per-pixel semantic information.
  • Latent diffusion: an autoencoder compresses images into a latent space, and a diffusion model is trained on those latents.
  • Semantic diffusion: the noisy latent goes into a U-Net encoder and the semantic layout into the decoder through multi-layer SPADE, using the mask better than simple concatenation.

Source on GitHub

Computer Vision · University of Trento · 2024

Fake Image Detectors and Adversarial Attacks

The goal was to explore the adversarial robustness of detectors for AI-generated images.

We used the two-step architecture from S. Mandelli, P. Bestagini and S. Tubaro, "When synthetic traces hide real content: Analysis of stable diffusion image laundering". The first step separates real images from synthetic ones (fully generated and laundered); the second separates fully synthetic images from laundered ones.

  • Verify the Stable Diffusion laundering attack using the MMLAB TrueFake dataset.
  • Explore other ways to run the laundering attack.
  • Test the robustness of the detector proposed in the paper.

Source on GitHub

Big Data Technologies · University of Trento · 2024

Urban Waste Management

A data-notifier collects data from several sources: Australian bin and weather APIs, plus a synthetic generator that simulates pedestrian counts from historical data. It sends the data through Kafka to a data-collector, which stores everything in MongoDB (including historical CSV data) and static data such as device IDs in PostgreSQL.

Spark then generates predictions and computes optimal collection routes. The backend fetches the processed data through Spark and Redis and serves it with Flask to the Angular dashboard.

Source on GitHub

Advanced Computer Vision and Pattern Recognition · University of Twente · 2025

Surgical Video Phase Recognition

Recognizing the phases of a surgery from video, for the Advanced Computer Vision and Pattern Recognition course.

Source on GitHub

Bachelor's thesis · Pirelli · University of Turin · 2022

Process Capability for Scrap Reduction

The aim was to minimize scrap in Pirelli's tyre production process. We built a streamlined pipeline for sensor data and delivered a quality dashboard for monitoring.

Qlik Sense dashboard

Filtering by date or measurement shows the production time series, box plots, distributions and process capability indices (Cp, Cpk, Pp, Ppk), which are essential for preventing scrap.

Pipeline

Data comes straight from sensors. We first analyzed it in JMP to find patterns and trends, then built a Python pipeline that pulls data from an IIoT AWS database, preprocesses it and saves Parquet files back to AWS for Qlik Sense.

Source on GitHub

Process Mining · University of Twente · 2025

Process Mining

While process mining maps workflows from event logs, complex data often limits its real-world use. Our project links process mining with agent-based modeling to create a continuous improvement feedback loop applied to a job shop with automated guided vehicles (AGVs). We use this framework to analyze:

  • The impact of adding more AGVs.
  • How dispatch rules and driving directions affect throughput and bottlenecks.
  • The role of product complexity.
  • How accurately the simulations match the theoretical models.

Computational Social Science · University of Trento · 2024

Reddit Analysis of Character.ai

This study looks at public perceptions of Character.ai, a platform for chatting with AI characters, using Reddit discussions.

Topic modeling with LDA and principal component analysis identify the key themes of engagement: escapism, support-based interactions and assistance.

Therapy-related discussions get special attention. "Comfort" emerges as a significant concept, and a semantic network maps its associations, offering insight into the platform's role in users' well-being.

Source on GitHub

Machine Learning · University of Twente · 2025

Dice Wars AI Player

An AI that plays Dice Wars, trained with reinforcement learning.

Deep Q-Learning

At the heart of the agent is a neural network that approximates the Q-value function Q(s, a): the long-term expected reward of taking action a in state s, assuming the agent plays optimally afterwards.

Why DQN fits the game

Dice Wars is turn-based, with a discrete, sequential environment: a finite number of moves per turn, discrete actions (attack or end turn) and clearly defined states (the board and the match status). That makes Q-learning a natural fit, since each step depends heavily on previous choices.

Training

We built an environment for experimenting with network architectures, reward functions, hyperparameters and player matchups, and toggled high-level descriptors like border strength and entropy to measure their impact. Training was iterative: many episodes under varied conditions, tracking reward curves and win rates, and adjusting based on intermediate evaluations.

Source on GitHub

Data Science · University of Twente · 2025

Data Mining for Referral Advice

Low back pain is one of the leading causes of disability worldwide, and choosing the right referral is a key challenge: misguided or delayed referrals contribute to chronic pain and higher costs.

Using a real-world dataset from the Groningen Spine Center, the project asks two questions:

  • Can we automatically predict the most appropriate treatment from patient questionnaire answers?
  • Can we reduce the number of questions without significantly lowering model performance?

Source on GitHub

Advanced Social Network Analysis · University of Trento · 2024

Departmental Impact on Collaboration Networks

This study analyzes a collaboration network of scientists, keeping ties with more than three interactions.

It compares Management, Economics and Behavioral Sciences (DeptGroup = 1) with other fields (DeptGroup = 0), using beta centrality for local influence and betweenness centrality for bridging roles.

DeptGroup 1 shows stronger connectivity within its clusters, while DeptGroup 0 plays more bridging roles. Permutation tests validate the results, showing how departmental affiliation shapes local and global roles in the network.

Source on GitHub

Customer and Business Analytics · University of Trento · 2024

Choice-Based Conjoint Analysis on Smartphones

Conjoint analysis is a marketing research method for understanding what consumers prefer in a product or service.

This research uses Choice-Based Conjoint (CBC) analysis to measure the importance of different smartphone attributes, focusing on the most prominent Chinese manufacturers, and compares customers' preferences across characteristics.

The findings offer useful insights for managing retail inventory in the smartphone industry.

Source on GitHub