Collaborative Review
Prepare 3D assets for team review with shareable viewer links.
Workflow Overview
Review Assets
Models to Review
Preparation
Create Review Bucket
Upload Assets
Translate to SVF2
Sharing
Generate Viewer URLs
Create Review Links
Review Process
Team Members
Feedback Collection
CLI Approach
Step 1: Create Review Session
# Create dedicated review bucket
REVIEW_ID="review-$(date +%Y%m%d-%H%M)"
raps bucket create --key "$REVIEW_ID" --policy transient --region US
echo "Review session: $REVIEW_ID"
Step 2: Upload Review Assets
# Upload assets for review
for asset in ./review-assets/*; do
[ -f "$asset" ] || continue
raps object upload "$REVIEW_ID" "$asset"
echo "Uploaded: $(basename "$asset")"
done
Step 3: Translate All Assets
# Translate each asset
raps object list "$REVIEW_ID" --output json | jq -r '.[].key' | while read key; do
URN=$(raps object urn "$REVIEW_ID" "$key" --output plain)
raps translate start "$URN" --format svf2
echo "Translating: $key"
done
# Wait for all translations
sleep 60
# Check status
raps object list "$REVIEW_ID" --output json | jq -r '.[].key' | while read key; do
URN=$(raps object urn "$REVIEW_ID" "$key" --output plain)
STATUS=$(raps translate manifest "$URN" 2>/dev/null | jq -r '.status // "pending"')
echo "$key: $STATUS"
done
Step 4: Generate Review Links
echo "# Review Session: $REVIEW_ID" > review-links.md
echo "Created: $(date)" >> review-links.md
echo "" >> review-links.md
echo "## Assets for Review" >> review-links.md
echo "" >> review-links.md
raps object list "$REVIEW_ID" --output json | jq -r '.[].key' | while read key; do
URN=$(raps object urn "$REVIEW_ID" "$key" --output plain)
# Check if translated
STATUS=$(raps translate manifest "$URN" 2>/dev/null | jq -r '.status // "pending"')
if [ "$STATUS" = "success" ]; then
# URL-encode the URN for viewer link
ENCODED_URN=$(echo -n "$URN" | base64 | tr '+/' '-_' | tr -d '=')
echo "### $key" >> review-links.md
echo "- [Open in Viewer](https://viewer.autodesk.com/viewer?urn=${ENCODED_URN})" >> review-links.md
echo "" >> review-links.md
fi
done
cat review-links.md
Step 5: Share with Team
# Generate downloadable links for reference files
echo "" >> review-links.md
echo "## Reference Downloads" >> review-links.md
echo "(Links valid for 24 hours)" >> review-links.md
echo "" >> review-links.md
raps object list "$REVIEW_ID" --output json | jq -r '.[].key' | while read key; do
URL=$(raps object signed-url "$REVIEW_ID" "$key" --minutes 1440)
echo "- [$key]($URL)" >> review-links.md
done
CI/CD Pipeline
# .github/workflows/review-session.yml
name: Create Review Session
on:
workflow_dispatch:
inputs:
review_name:
description: 'Review session name'
required: true
assets_path:
description: 'Path to assets (glob pattern)'
required: true
reviewers:
description: 'Comma-separated reviewer emails'
required: false
jobs:
create-review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install RAPS
run: cargo install raps
- name: Create review bucket
env:
APS_CLIENT_ID: ${{ secrets.APS_CLIENT_ID }}
APS_CLIENT_SECRET: ${{ secrets.APS_CLIENT_SECRET }}
run: |
REVIEW_ID="review-$(date +%Y%m%d)-${{ github.run_id }}"
raps bucket create --key "$REVIEW_ID" --policy transient --region US
echo "REVIEW_ID=$REVIEW_ID" >> $GITHUB_ENV
- name: Upload assets
env:
APS_CLIENT_ID: ${{ secrets.APS_CLIENT_ID }}
APS_CLIENT_SECRET: ${{ secrets.APS_CLIENT_SECRET }}
run: |
for file in ${{ inputs.assets_path }}; do
[ -f "$file" ] || continue
raps object upload "$REVIEW_ID" "$file"
echo "Uploaded: $(basename "$file")"
done
- name: Translate assets
env:
APS_CLIENT_ID: ${{ secrets.APS_CLIENT_ID }}
APS_CLIENT_SECRET: ${{ secrets.APS_CLIENT_SECRET }}
run: |
raps object list "$REVIEW_ID" --output json | jq -r '.[].key' | while read key; do
URN=$(raps object urn "$REVIEW_ID" "$key" --output plain)
raps translate start "$URN" --format svf2 --wait
done
- name: Generate review document
env:
APS_CLIENT_ID: ${{ secrets.APS_CLIENT_ID }}
APS_CLIENT_SECRET: ${{ secrets.APS_CLIENT_SECRET }}
run: |
echo "# Review Session: ${{ inputs.review_name }}" > review.md
echo "Created: $(date)" >> review.md
echo "Review ID: $REVIEW_ID" >> review.md
echo "" >> review.md
echo "## Assets" >> review.md
echo "" >> review.md
raps object list "$REVIEW_ID" --output json | jq -r '.[].key' | while read key; do
URN=$(raps object urn "$REVIEW_ID" "$key" --output plain)
ENCODED=$(echo -n "$URN" | base64 | tr '+/' '-_' | tr -d '=')
echo "### $key" >> review.md
echo "- [View in Browser](https://viewer.autodesk.com/viewer?urn=$ENCODED)" >> review.md
# Generate download link
DOWNLOAD=$(raps object signed-url "$REVIEW_ID" "$key" --minutes 1440)
echo "- [Download]($DOWNLOAD)" >> review.md
echo "" >> review.md
done
echo "## Feedback" >> review.md
echo "" >> review.md
echo "Please add your comments below or reply to the review email." >> review.md
- name: Upload review document
uses: actions/upload-artifact@v4
with:
name: review-${{ inputs.review_name }}
path: review.md
# Optional: Send email notification
# - name: Notify reviewers
# if: inputs.reviewers != ''
# run: |
# # Email notification logic here
Pipeline Flow
Manual Trigger
review_name + assets_path
→
Setup
Create review bucket
Upload assets
→
Processing
Translate all assets
Generate viewer URLs
→
Output
review.md with links
MCP Integration
Create Review Session
User: "Set up a review session for the character models with links for the team"
User
AI Assistant
RAPS MCP
APS Cloud
User→AICreate review session
AI→MCPaps_bucket_create(key=“review-…”)
MCP→APSCreate bucket
loopAI→MCPaps_object_upload(bucket, file)
loopMCP→APSUpload
loopAI→MCPaps_translate_start(urn)
loopMCP→APSTranslate
AI→AIGenerate viewer URLs
AI→UserReview links ready
AI Response:
Created review session “Character Models Review”:
Review ID: review-20240216-001 Assets: 5 models Status: All translated and ready
Viewer Links:
Asset View Download hero_v2.fbx Open Download villain.fbx Open Download npc_guard.fbx Open Download pet_companion.fbx Open Download mount_horse.fbx Open Download Links valid for 24 hours. Share with your team!
Check Review Status
User: "How many people viewed the review assets?"
AI Response:
Review session statistics (review-20240216-001):
Viewer Activity: (Last 24 hours)
Asset Views Unique Viewers hero_v2.fbx 12 5 villain.fbx 8 4 npc_guard.fbx 6 3 pet_companion.fbx 4 2 mount_horse.fbx 3 2 Total unique viewers: 6 Links expire in: 18 hours
Review Templates
Feedback Form
# Asset Review Feedback
**Asset:** [Asset Name]
**Reviewer:** [Your Name]
**Date:** [Date]
## Overall Assessment
- [ ] Approved
- [ ] Approved with minor changes
- [ ] Needs revision
- [ ] Rejected
## Criteria Rating (1-5)
| Criteria | Rating | Notes |
|----------|--------|-------|
| Visual Quality | | |
| Polygon Count | | |
| Texture Quality | | |
| Animation Quality | | |
| Technical Specs | | |
## Comments
[Your detailed feedback here]
## Requested Changes
1.
2.
3.
Cleanup Script
#!/bin/bash
# cleanup-old-reviews.sh
# Delete review buckets older than 7 days
raps bucket list --output json | jq -r '.[] | select(.key | startswith("review-")) | .key' | while read bucket; do
# Extract date from bucket name
DATE=$(echo "$bucket" | grep -oE '[0-9]{8}')
if [ -n "$DATE" ]; then
BUCKET_AGE=$(( ($(date +%s) - $(date -d "$DATE" +%s)) / 86400 ))
if [ "$BUCKET_AGE" -gt 7 ]; then
echo "Deleting old review: $bucket (${BUCKET_AGE} days old)"
raps bucket delete "$bucket" --force
fi
fi
done